IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    WP-UserAgent [纯真增强版] 15.01.01

    obaby发表于 2024-11-08 02:45:50
    love 0

    之前为了下载纯真的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

    实际效果:

    插件下载地址:

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



沪ICP备19023445号-2号
友情链接