WP-UserAgent [纯真增强版] 15.01.01

之前为了下载纯真的ip 地址数据库订阅了他们的公众号,前几天的时候看到推送说什么数据库格式更新了,有了 czdb 的格式,并且提供了各种语言的 sdk。

不过这个东西应该不是最近才推的,因为印象里貌似很久之前就看到皇家园林写的数据库迁移的文章。官方给的sdk 地址是这个:https://github.com/tagphi/czdb_searcher_php

按照文档操作,感觉也不复杂,直接:

composer require czdb/searcher

composer导入,就一行命令的事,但是为了弄个插件,需要在服务器上装这么个东西?那插件安装到别的地方也麻烦啊。想着一次性解决这个问题,直接下载源码,修改导入方式,按照网上的教程一通改,并不好使,最后 还是请教杜郎,才解决了这个问题:

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

实际效果:

插件下载地址:

温馨提示: 此处隐藏内容需要发表评论,并且审核通过后才能查看。
(发表评论请勾选 在此浏览器中保存我的显示名称、邮箱地址和网站地址,以便下次评论时使用。
(请仔细检查自己的昵称和评论内容,以免被识别为垃圾评论而导致无法正常审核。)

☆版权☆

* 网站名称:obaby@mars
* 网址:https://oba.by/
* 个性:https://oba.by/
* 本文标题: 《WP-UserAgent [纯真增强版] 15.01.01》
* 本文链接:https://oba.by/2024/11/18473
* 短链接:https://oba.by/?p=18473
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

67 comments

  1. Wordpress App 25 Wordpress App 25 iPhone iOS 18.1 iPhone iOS 18.1 cn中国–安徽–合肥–肥西县 电信

    你这个插件还集成了这个归属地啊,厉害了!
    那个制表符也废了我很长时间,突然一个意外才让我发现这个是个制表符。
    对了是不是服务器需要支持 IPv6 才能记录访问者的 IPv6 啊?

    1. Google Chrome 126 Google Chrome 126 Android 10 Android 10 cn中国–山东–青岛 联通

      是哒 需要服务器支持V6 我的现在也不支持 还被杜郎嘲笑了 因为我要做v6的适配 哈哈哈

        1. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

          嗯呢,想着是,既然折腾一次,就给折腾好了。

  2. WebView 4 WebView 4 Android 12 Android 12 cn中国–广东–中山 电信

    是调本地的,还是调远程接口?我用的是调免费接口,还挺稳定的

    1. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      全部远程接口都去掉了。纯本地代码查询

  3. Google Chrome 130 Google Chrome 130 Mac OS X 10.15 Mac OS X 10.15 cn中国–浙江–杭州 华数

    要是知道会被挂出来,我会认真一点,不写错别字。

    1. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      这个插件本来设计的架构就比较重,所以,再一层层的添加功能就变得更加庞大了。

    2. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      你这网站就挂了个黑客帝国风格的瀑布流啊~~

            1. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

              哼唧,哼唧,干嘛把 blog 链接藏起来嘛~~
              快说,除了能看到的那些是不是还有见不得人东西?

              1. Google Chrome 130 Google Chrome 130 Mac OS X 10.15 Mac OS X 10.15 cn中国–湖北–武汉 电信

                藏起来,可以过滤一部分无效流量,最后能找到入口的,肯定是很有趣的人。这样很有意思,不是嘛!

                1. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

                  嗯嗯,很有道理的样纸,真是个小机灵鬼~~

  4. IBrowse r IBrowse r Android 12 Android 12 cn中国–河南–漯河 联通

    一直用的你的13,前段时间不是查照我网站评论慢的原因,所有的插件都去掉了。现在正常了,正巧15也更新了,晚点儿的时候试试。一上午优化我的卡片功能,你的页面标题和描述,一会儿能抓取成功,一会儿又抓取不了了,飘忽不定。 mosking

    1. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      嗯嗯,这个 归属地去掉网络查询之后,速度应该能快不少,尤其是评论多的时候。

    2. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      可以先去申请下那个密钥,这个审核大概得一两天。

      1. IBrowse r IBrowse r Android 12 Android 12 cn中国–河南–漯河 联通

        没看懂他那个审核前需要用户上传的截图?把15的相关代码截图发过去吗?怎么证明正在使用纯真?

        1. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

          不用证明在用,就是帮他们宣传,类似酱紫的。
          看我博客的右下角:
          cz88

            1. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

              其实他这个有点丑,我想把那个链接换成图片,结果他们的 logo 是透明的,哈哈哈。

            2. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

              我把他们 logo 改了下颜色,给换上了。哈哈哈

                  1. Microsoft Edge 130 Microsoft Edge 130 Windows 11 Windows 11 cn中国–河南–漯河 联通

                    我在https://github.com/nmgliangwei/qqwry/releases下载了cz88_public_v4.czdb和cz88_public_v6.czdb,并放入了对应目录,现在缺少一个密钥,我以为是开发者密钥,但看文件里你发的开头部分应该不是。我激活数次没有成功,一直提示“无法启用插件,因为它引起了一个致命错误(fatal error)。”,查看网站错误日志,提示错误如下https://my1981.cn/cuowutishi.jpg。我的环境如下:PHP8.3+Nginx -Tengine2.2.4(3.1.0)+MYSQL5.6,WP是最新版本。

                    1. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

                      这两个文件是需要和密钥对应的,感觉是不同的密钥要下载不同的数据库,这个通用的应该解不出来。
                      show-useragent 目录下有个 sample.php,可以直接使用 php 加参数运行,如果这个跑不起来就说明密钥和数据库不对应,这个不是开发者密钥,要审核通过之后再下载页面才能复制到密钥。
                      cz88 密钥

  5. Firefox 132 Firefox 132 Windows 10 Windows 10 cn中国–云南–丽江 电信

    牛叉呀,现在我博客都在弱化这个 功能了,经常发现很多地方的这个IP都不准

    1. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      嗯嗯,的确社区版的准确度差点,不过这中国地大物博,根据归属地聊天,也能知道他那里现在是艳阳高照,还是白雪皑皑,哈哈哈
      所以我觉得还是有点意思的,留着这个东西

    1. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      哈哈哈,这,那看来 ip 的准确度还是一般,不过能知道是国外就 ok 了,😂

  6. Safari 18 Safari 18 Mac OS X 10.15 Mac OS X 10.15 us美国–加利福尼亚州–洛杉矶–洛杉矶 Cogent

    搞的工程好大啊,我也来测测准确性~

    1. Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      本来就不小了,嘿嘿。我在原来的基础上又加了东西,所以更大啦。

  7. Microsoft Edge 130 Microsoft Edge 130 Windows 11 Windows 11 cn中国–河北–承德 联通

    在子比主题下启用插件什么都不显示,周末有空了还需要调试一下

  8. Google Chrome 118 Google Chrome 118 Windows 11 Windows 11 cn中国–安徽 移动/数据上网公共出口

    这就厉害了,我来看下我的ip归属能正确识别不

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注