因为要做天气预报这件事,发现搜狐好像没有一个实时的判断浏览器所在城市的方法——已有的都是把判断结果放在某定期失效的cookie里,这样可以减少服务器压力。
仔细一想就觉得这玩意其实对资源消耗没有那么大,于是就要求整一个实时的。。。。。然后就觉得该接口也可以给外部开发者调用:http://pv.sohu.com/cityjson
这个接口是给浏览器JS来调用的,缺省返回 gbk 编码的数据;如果你的应用是 UTF-8,加一个参数 http://pv.sohu.com/cityjson?ie=utf-8
目前这个接口只是搜狐在用,所以参数很简单,返回的那个 cid 还很魔幻;如果觉得这个接口确实有帮助,可以把需求发给俺们来继续改进之
未来也许搜狐会提供给互联网开发者更多的接口和服务。
BTW:写这篇blog之前突然想到,中国互联网应该有类似的接口了吧,一查之下果然 QQ 有一个 http://fw.qq.com/ipaddress
,但好像不是官方支持,而且它只有 gbk,哇咔咔
=================================================================
各门户/大型网站IP地址查询接口:
腾讯
: http://fw.qq.com/ipaddress
直接返回本机的IP地址对应的地区,准确度较高。
其实还可以利用腾讯的IP分享计划根据IP地址来获取更准确的IP地址,详看教程:http://bbs.pinluo.com/thread-28505-1-1.html
新浪
:http://counter.sina.com.cn/ip?ip=IP
地址
或http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=IP
地址
返回Js数据,感觉不是很精确,可以把问号后面的去掉,直接返回本机对应的IP所在地。
搜狐
:http://pv.sohu.com/cityjson?ie=utf-8
或者http://txt.go.sohu.com/ip/soip
网易有道
:http://www.youdao.com/smartresult-xml/search.s?type=ip&q=0.0.0.0
把0.0.0.0换成需查询的IP地址即可,以下同,这个应该是用纯真的数据库。
(还可查手机号码)
http://www.youdao.com/smartresult-xml/search.s?type=mobile&q=13888880000
太平洋电脑网
:http://whois.pconline.com.cn/?ip=0.0.0.0
把0.0.0.0换成IP地址,页面上还有其他无关内容。
IP138
:http://www.ip138.com/ips.asp?ip=IP
地址
准确度非常高,IP经常更新。
纯真IP数据库
:http://www.cz88.net/
====================================================
我用新浪打开是显示:1 116.1.204.0 116.1.205.255 中国 广西 崇左 电信 广西南宁市电信
用腾讯打开是显示:var IPData = new Array("116.1.205.88","","广西","南宁市");
用www.ip138.com
打开是显示:116.1.205.88 本站主数据:广西自治区南宁市 电信
很明显,新浪是错误的,它IP显示错误,并且将南宁市显示为崇左市了。这是两个不同的城市啊!
===========调用方法示例=====================
使用JS代码进行调取:
Js代码
<script
language="javascript" type="text/javascript"
src="http://fw.qq.com/ipaddress"></script>
<script>document.write("你的IP是:"+IPData[0]+",来
自:"+IPData[2]);</script>
<script language="javascript"
type="text/javascript"
src="http://fw.qq.com/ipaddress"></script>
<script>document.write("你的IP是:"+IPData[0]+",来
自:"+IPData[2]);</script>
使用PHP解析的方法:
Php代码
<?php
function getIpPlace(){
$ip=file_get_contents("http://fw.qq.com/ipaddress");
$ip=str_replace('"',' ',$ip); $ip2=explode("(",$ip);
$a=substr($ip2[1],0,-2); $b=explode(",",$a); return $b; }
$ip=getIpPlace(); print_r($ip); ?>
<?phpfunction
getIpPlace(){ $ip=file_get_contents("http://fw.qq.com/ipaddress");
$ip=str_replace('"',' ',$ip); $ip2=explode("(",$ip);
$a=substr($ip2[1],0,-2); $b=explode(",",$a); return
$b;}$ip=getIpPlace();print_r($ip);?>
=============================================================
PHP利用腾讯IP分享计划获取IP地理位置
腾讯的IP分享计划的查询接口连接是:http://ip.qq.com/cgi-bin/searchip
,该连接后面会带有一个get参数searchip1,即searchip1=你要查询的IP地址。
使用方法是:采用PHP向http://ip.qq.com/cgi-bin/searchip
发送http get request,然后获取相应,获得相应结果后,将结果用正则表达式将需要的地理位置信息提取出来就OK了。当然,PHP发送get请求的方法有很多,我用curl来模拟http请求的方法。
Curl
是PHP的一个扩展,进行测试之前,先确认PHP已经加载了curl扩展。打开PHP配置文件php.ini,搜索
“extension=php_curl.dll”,将其前面的分号(;)去掉,然后重启HTTP服务器,查看phpinfo(),若能看到curl的信
息,说明PHP扩展curl成功。
接下来就简单了,一段代码就可以搞定:
/**根据腾讯IP分享计划的地址获取IP所在地,比较精确 */
function getIPLoc_QQ($queryIP){
$url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
$ch = curl_init($url);
curl_setopt($ch,CURLOPT_ENCODING ,'gb2312');
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
$result = curl_exec($ch);
$result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
curl_close($ch);
preg_match("@<span>(.*)</span></p>@iU",$result,$ipArray);
$loc = $ipArray[1];
return $loc;
}
使用getIPLoc_QQ("183.37.209.57")即可得到IP地址所在的地址位置。
腾讯IP分享计划这个网站用的是gb2312编码,获取的响应需要用mb_convert_encoding函数进行编码转换,否则会有乱码。
分享到:
相关推荐
wydomain目标系统信息收集组件,完全模块化,脚本均可拆可并、可合可分的使用!...解析获取到的所有子域名,生成IP列表集合,截取成RFC地址C段标准(42.42.42.0/24) 利用bing.com、aizhan.com的接口,查询所有C段
此外,Floodlight 是使用 Floodlight 控制器构建的应用程序集合。 Floodlight 防火墙是一个允许用户在流表中创建、查看和删除规则的应用程序。 防火墙应用程序使用 ReST API 公开 CRUD 功能。 Floodlight 防火墙...
RFC1365 一种IP地址扩展提议 RFC1370 OSPF适用范围声明 RFC1387 RIP(版本2)协议分析 RFC1388 RIP协议版本2 RFC1393 Traceroute使用IP选项 RFC1397 在边界网关协议(Border Gateway Protocol)版本2 RFC1408 Telnet...
01 ip地址与子网划分 02 ip地址配置 03 虚拟机网络模式 04 三层隔离验证试验 第8章 01 上节课复习 02 软件包介绍 03 rpm软件包管理 04 yum软件包管理 05 源码安装python3.5 06 ssh服务 07 apache服务 08 samba服务...
1.2.1 IP地址 1.2.2 地址解析 1.2.3 域名系统 1.2.4 数据包的封装和分用 1.2.5 端口号 1.3 网络编程接口(Winsock API) 1.4 Winsock常用函数介绍 1.4.1 基本Socket函数 1.4.2 数据库函数 1.4.3 Winsock规范...
RSACryption--RSA加密/RSA解密字符串 RSA加密应用最多是银行接口,这里的方法可以直接使用哦 5.FTP操作类 FTPClient FTPClient--FTP操作帮助类,FTP上传,FTP下载,FTP文件操作,FTP目录操作 FTPHelper ...
RFC1365 一种IP地址扩展提议 RFC1370_OSPF适用范围声明 RFC1387_RIP(版本2)协议分析 RFC1388_RIP协议版本2 RFC1393 Traceroute使用IP选项 RFC1397_在边界网关协议(Border Gateway Protocol)版本2 RFC1408_...
RFC1365 一种IP地址扩展提议 RFC1370 OSPF适用范围声明 RFC1387 RIP(版本2)协议分析 RFC1388 RIP协议版本2 RFC1393 Traceroute使用IP选项 RFC1397 在边界网关协议(Border Gateway Protocol)版本2 RFC1408 Telnet...
RSACryption--RSA加密/RSA解密字符串 RSA加密应用最多是银行接口,这里的方法可以直接使用哦 5.FTP操作类 FTPClient FTPClient--FTP操作帮助类,FTP上传,FTP下载,FTP文件操作,FTP目录操作 FTPHelper ...
Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 13、&和&&的区别。 &是位运算符...
基本信息 作者: 臧萌 ...12.2.4 使用接口仅需一步——实现接口 342 12.2.5 接口——让类集多重类型于一身 344 12.2.6 简化recordTransport()方法 347 12.3 再探接口 349 12.3.1 重温上节中的程序 349...
基本信息 作者: 臧萌 ...12.2.4 使用接口仅需一步——实现接口 342 12.2.5 接口——让类集多重类型于一身 344 12.2.6 简化recordTransport()方法 347 12.3 再探接口 349 12.3.1 重温上节中的程序 349...
该应用程序与PostgresSQL数据库连接,以在具有两列的表上读/写数据,其中一列包含IP地址,另一列包含主机名。 该应用程序具有REST Web界面,以便用户与这些数据进行交互(CRUD模型实现) SPA使用REST接口,以便...
Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...
Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips ...
Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符...
取IP地址.ec 取 mdb表名.ec 取mp3信息模块.ec 取串口的端口号模块+Get_Com.ec 取任意文件图标.ec 取功能键状 态.ec 取十进制.ec 取句柄对应全路径文件名2.1.ec 取图片尺寸.ec 取声调拼音模块.ec 取声调拼音模 块1.0....
{1.12}Java API}{41}{section.1.12} {1.13}Linux命令}{41}{section.1.13} {1.13.1}基本查看、移动}{41}{subsection.1.13.1} {1.13.2}权限}{42}{subsection.1.13.2} {1.13.3}打包备份与恢复}{42}{subsection....
ThreadImRunnable.java 继承Runnable接口实现多线程 mulThread.java 创建多个线程对象的类 demoJoin.java 演示使用join()以确保主线程最后结束 clicker.java 一个计数用的线程类 demoPri.java 调用上面这个类...