WP-UserAgent [纯真增强版] 15.01.01
之前为了下载纯真的ip 地址数据库订阅了他们的公众号,前几天的时候看到推送说什么数据库格式更新了,有了 czdb 的格式,并且提供了各种语言的 sdk。
不过这个东西应该不是最近才推的,因为印象里貌似很久之前就看到皇家园林写的数据库迁移的文章。官方给的sdk 地址是这个:https://github.com/tagphi/czdb_searcher_php
按照文档操作,感觉也不复杂,直接:
composer require czdb/searcher
composer导入,就一行命令的事,但是为了弄个插件,需要在服务器上装这么个东西?那插件安装到别的地方也麻烦啊。想着一次性解决这个问题,直接下载源码,修改导入方式,按照网上的教程一通改,并不好使,最后 还是请教杜郎,才解决了这个问题:
真不错,直接小花花+1.
下载 copmoser 导出的包,直接扔到插件目录下,
因为最终要修改的是 ip2text.php 文件中的convertip函数,所以直接扔到 show-useragent 目录下,在代码中导入代码,并且初始化:
require_once __DIR__ . '/vendor/autoload.php'; use Czdb\DbSearcher; $v4databasePath = dirname(__FILE__).'/czdb/db/cz88_public_v4.czdb'; $v6databasePath = dirname(__FILE__).'/czdb/db/cz88_public_v6.czdb'; $queryType = 'MEMORY'; $key = 'n2pf2******************=='; // Initialize the DbSearcher with the command line arguments // $instance = new SomeNamespace\SomeClass(); $v4dbSearcher = new DbSearcher($v4databasePath, $queryType, $key); $v6dbSearcher = new DbSearcher($v6databasePath, $queryType, $key); // $dbSearcher = new DbSearcher($databasePath, $queryType, $key); function convertip($ip) { global $v4dbSearcher; global $v6dbSearcher; try{ if(strpos($ip, ':') != false){ $region = $v6dbSearcher->search($ip); }else if (strpos($ip, '.')!= false) { $region = $v4dbSearcher->search($ip); }else{ $region='Unknown'; } }catch (Exception $e) { // Handle the exception and inform the user $region = 'Exception'; } return $region; }
这里初始化了两个DbSearcher,分别对应 v4 和v6的查询。查询代码也很简单,就上面这几行。
同样,既然有了国家代码,那剩下的就是去掉原来通过接口查询所属国家的问题了,之前用接口是因为qqwry.dat 旧版本没有 v6 的数据,后来也一直没更新,所以归属地现实国旗是通过接口实现的,现在既然 46 都有了,那就可以直接本地解析了,不过比较坑爹的是 v4 的地址是“-”拼接的,v6 的地址感觉是空格,实际上是个制表符’\t’,为了这个制表符废了半天的劲,一直解析不出来,直接头大:
function getCountryName($str) { $parts = explode('–', $str); $name = count($parts) > 0 ? $parts[0] : ''; // print($name); if (strpos($name, " ")!==false){ $parts = explode(" ", $str); $name = count($parts) > 0 ? $parts[0] : ''; // print($name); } if (strpos($name, "\t")!==false){ $parts = explode("\t", $str); $name = count($parts) > 0 ? $parts[0] : ''; // print($name); } return $name; }
之所以解析不出来是最开始的if (strpos($name, “\t”)!==false)用的单引号,后来才发现,单引号下转义字符无效,这尼玛是凭什么啊,果然 php 是最好的语言。
后面就是讲国家名转换为 2 位国家代码了:
function getCountryCode($countryName) { $countryMap = array( '中国' => 'CN', '美国' => 'US', '日本' => 'JP', '韩国' => 'KR', '俄罗斯' => 'RU', '法国' => 'FR', '德国' => 'DE', '英国' => 'GB', '意大利' => 'IT', '加拿大' => 'CA', // 省略部分国家地区 '瓦利斯和富图纳' => 'WF', '也门' => 'YE', '赞比亚' => 'ZM', '津巴布韦' => 'ZW', ); $countryName = removeWhitespace($countryName); $countryCode = 'unknown'; if (isset($countryMap[$countryName])) { $countryCode = $countryMap[$countryName]; } // ; return $countryCode; return strtolower($countryCode); }
到这里改造基本就全部完成了。
更新日志:
= v15.01.01 = * 替换本地IP归属地查询数据库为纯真CZDB格式 * 替换IPv6归属地查询,替换为本地数据库,去掉查询服务器配置功能 * 鉴于纯真数据库需要授权码,需要去 https://cz88.com/geo-public 获取授权密钥以及数据库文件 * 密钥配置文件,ip2c-text.php $key = 'n2pf2******************pg=='; * 数据库下载之后放入show-useragent\czdb\db 目录下,文件名分别为: cz88_public_v4.czdb cz88_public_v6.czdb
插件安装无法直接使用,请按照下面的步骤操作:
* 需要去 https://cz88.com/geo-public 获取授权密钥以及数据库文件
* 密钥配置文件,ip2c-text.php $key = ‘n2pf2******************pg==’;
* 数据库下载之后放入show-useragent\czdb\db 目录下,文件名分别为: cz88_public_v4.czdb cz88_public_v6.czdb
实际效果:
插件下载地址:
温馨提示: 此处隐藏内容需要发表评论,并且审核通过后才能查看。
(发表评论请勾选 在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。)
(请仔细检查自己的昵称和评论内容,以免被识别为垃圾评论而导致无法正常审核。)