热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

几种获取IP根据IP获取地址的方法JS,第三方新浪网易腾讯

第一种是利用纯真ip数据库,这个可以在网上找到很多,缺点是更新有点慢。 第二种是利用门户网站的接口 目前已知的有腾讯、新浪、网易、搜狐和Google提供IP地址查询API,但是找得

第一种是利用纯真ip数据库,这个可以在网上找到很多,缺点是更新有点慢。
 
第二种是利用门户网站的接口
 
目前已知的有腾讯、新浪、网易、搜狐和Google提供IP地址查询API,但是找得到的只有腾讯、新浪和网易的,Google的貌似要用Google Maps所以没有研究。看了下国内的几个腾讯提供的是Javascript的,网易提供的是XML,而新浪的有多种格式可以用,注意非XML的数据源都是GBK格式的,不管是Javascript调用还是PHP调用都要转换一下编码,不然得到的是乱码。而更需要注意的是,如果一次性查询多个IP,使用门户网站的API来查询会非常缓慢,我大概写了个for循环试了下,不管是用PHP解析XML还是file_get_contents()函数获取内容,查询10次以上会变得非常缓慢,甚至可能超时。
 
腾讯的IP地址API接口地址:http://fw.qq.com/ipaddress,返回的是数据格式为:var IPData = new Array("123.124.2.85","","北京市","");,一个Javascript的对象,目前还不知道如何输入IP查询。
 
新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js
 
新浪多地域测试方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=123.124.2.85
 
网易有道的IP地址查询接口:http://www.youdao.com/smartresult-xml/search.s?type=ip&q=123.124.2.85

使用JS代码进行调取腾讯的api接口:
 查看源代码打印帮
 
 
 //腾讯API的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);
 //调用查询接口需要抓取网页,有三种方法,第一种是curl,第二种是
 //file_get_contents,第三种fopen->fread->fclose,推荐第二种方法
 
 function getIPLoc($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("@(.*)

@iU",$result,$ipArray);
 $loc = $ipArray[1];
 return $loc;
 }
 
//根据腾讯接口查询ip地址,使用file_get_contents抓去网页
 function getIPLoc($queryIP){
 $url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
 $result = file_get_contents($url);
 $result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
 preg_match("@(.*)

@iU",$result,$ipArray);
 $loc = $ipArray[1];
 return $loc;
 }
 //根据腾讯接口查询ip地址,使用fopen->fread->fclose抓去网页
 function getIPLoc($queryIP){
 $url = 'http://ip.qq.com/cgi-bin/searchip?searchip1='.$queryIP;
 $handle = fopen ("$url", "rb");
 $result = "";
 do {
    $data = fread($handle, 1024);
    if (strlen($data) == 0) {
    break;
    }
    $result .= $data;
 } while(true);
 $result = mb_convert_encoding($result, "utf-8", "gb2312"); // 编码转换,否则乱码
 preg_match("@(.*)

@iU",$result,$ipArray);
 $loc = $ipArray[1];
 return $loc;
 }

//新浪查询ip接口  第五个第六个是地理信息
 function getiploc($IP_ip){
 $IP_str = @file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip='.$IP_ip);
         if(!empty($IP_str)){   
             $IP_tmp = explode("    ", $IP_str);
             $IP_city = iconv("GBK", "UTF-8", $IP_tmp[5]);
 return  $IP_city;
 }

//有道API的PHP调用方法
 $url = "http:www.youdao.com/smartresult-xml/search.s?type=ip&q=".$ip;
 $doc = new DOMDocument();
    $doc->load($url);
    $smartresult = $doc->getElementsByTagName_r("product");
    foreach($smartresult as $product)
    {
       $locatiOns= $product->getElementsByTagName_r("location");
       $location = $locations->item(0)->nodeValue;
    }
    if($location != "")
    {
        echo $i.".".$ip;
        echo "  来自".$location."的网友";
    }
    else
    {
        echo $i.".".$ip;
        echo "  来自火星的网友";
    }
 public function sinaIPApi($ip){
    $str = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=".$ip);
    $str = iconv("gbk", "utf-8//IGNORE", $str);
    preg_match_all("/[\x{4e00}-\x{9fa5}]+/u",$str,$get);
    $add = implode('',$get[0]);
    return $add;
 }
 //$get是一个非常棒的二维数组
 
新浪API也可以像腾讯API那样用file_get_contents()函数获取完地址后使用一连串的字符串函数处理,我写的函数使用正则表达式从新浪的返回结果中提供包含中文的字符串,并且分段存入一个二维数组,这个可能只是针对新浪的API有用并且存在bug。举个例子查询学校分配给我的IP地址后var_dump()一下函数里面的$get变量得到以下结果: array(1) { [0]=> array(6) { [0]=> string(6) "中国" [1]=> string(6) "北京" [2]=> string(6) "北京" [3]=> string(9) "教育网" [4]=> string(6) "学校" [5]=> string(18) "中国地质大学" } },而函数输出的结果则是“中国北京北京教育网学校中国地质大学”。


几种获取IP 根据IP获取地址的方法 JS,第三方 新浪 网易 腾讯的相关教程结束。



推荐阅读
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Unity3D引擎的体系结构和功能详解
    本文详细介绍了Unity3D引擎的体系结构和功能。Unity3D是一个屡获殊荣的工具,用于创建交互式3D应用程序。它由游戏引擎和编辑器组成,支持C#、Boo和JavaScript脚本编程。该引擎涵盖了声音、图形、物理和网络功能等主题。Unity编辑器具有多语言脚本编辑器和预制装配系统等特点。本文还介绍了Unity的许可证情况。Unity基本功能有限的免费,适用于PC、MAC和Web开发。其他平台或完整的功能集需要购买许可证。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
author-avatar
手机用户2602918323
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有