本文分享一个显示评论区ip地址的typecho插件,响应国家的号召。并且详细介绍如何使用该插件。

2022-06-06更新了最终版本的插件修改代码。

2022-06-23更新:推荐大家用这个:
推荐一款Handsome主题专用的UserAgent插件_浏览器信息_操作系统_IP地址显示


最近,大家看视频、刷微博,只要在网络发表一些看法,会发现有一个“IP属地”,显示你在上海、北京、河南、四川或国外。这是包括微信、微博、抖音、小红书在内的主流APP,都强制开启了IP属地显示。咱们草根站长虽然不是什么主流媒体,但是一定跟党走,响应国家号召!感谢虾米皮皮乐提供的资源。

2021年国家网信办发布《互联网用户账号名称信息管理规定(征求意见稿)》,第十二条明确提出,互联网用户账号服务平台应以显著方式,在互联网用户账号信息页面展示账号IP地址属地信息。境内互联网用户账号IP地址属地信息需标注到省(区、市),境外账号IP地址属地信息需标注到国家(地区)。


插件下载

插件下载地址1

插件下载地址2提取码:6666

使用教程

以handsome主题为例,其他主题可以自行尝试,应该是通用的。甚至可以查看插件源码自动改一改就好了。

1、在服务器插件目录下新建一个文件夹,名为CommentLocation,然后将php文件上传上去即可。

上传ip插件

2、在后台启动插件(不需要配置什么)

启动插件

3、在主题评论文件中添加代码,在handsome主题中,是文件位置:

../themes/handsome/component/comments.php

在大约72行的位置

<span class="comment-author vcard">改为:

            <span class="comment-author vcard">
              <b class="fn"><?php echo $author; ?>&nbsp;&nbsp;
              IP:<?php $comments->location(); ?>
              </b>
              <!--显示ip地址-->

其实就是加了一个:

  IP:<?php $comments->location(); ?>

css懒得搞了,就和author保持一致。喜欢倒腾的可以去自定义css一波。

切换api接口(可选)

作者使用的查询ip接口是 ipip.net 的免费 API。看官方文件说免费的可以每天查询50次(免费接口支持IPv4地址(限速每天50次,仅供测试))。一般情况对于个人博客来说是够用的。

当然,你可以自行切换成别的查询ip地址的免费api。下面提供了几个,可以试试。建议保持默认就好了。

默认api

这里会几个备用api

// 搜狐查询ip的api接口
http://pv.sohu.com/cityjson

//IP-API接口
http://ip-api.com/json/?lang=zh-CN

//在CSDN发现的
https://ip.help.bj.cn

腾讯IP地址查询接口:http://fw.qq.com/ipaddress
新浪IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js
搜狐IP地址查询接口:http://pv.sohu.com/cityjson
谷歌IP地址查询接口:http://j.maxmind.com/app/geoip.js
有道IP地址查询接口:http://www.youdao.com/smartresult-xml/search.s
1616 IP地址查询接口:http://w.1616.net/chaxun/iptolocal.php
126 http://ip.ws.126.net/ipquery

将api切换为IP-API网站的接口示例

我发现不少存在ip显示“未知”,寻思着将ip查询接口地址更改一下。

于是切换到了ip-api网站的接口。改动的地方在这:

修改的地方

这一部分新的代码:

            try {
                $client = Typecho_Http_Client::get();
                $client->setMethod(Typecho_Http_Client::METHOD_GET);
                $client->setHeader('User-Agent', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; GreenBrowser)');
                $client->setTimeout(60);
                $responseBody = $client->send("http://ip-api.com/json/" . $archive->ip. "?lang=zh-CN");
                if (class_exists('\Typecho\Http\Client')) $responseBody = $client->getResponseBody();
                if ($responseBody && ($location = json_decode($responseBody, true))) {
                    self::updateLocation($archive->coid, $location);
                }
            } catch (Exception $e) {
                self::log($e->getMessage(), 'error');
            }
        }
        // if ($location[] !== "success") {
        //     return _t($template, "未知");
        // }
        // if ($location[1] != '中国') {
        // return $location[1];} 

        $location = array_values(array_filter($location));
        return _t($template, $location[5]);
    }

ip-api的官方文档

如果存在显示一部分ip,一部分没显示,建议再插件的设置里彻底卸载(请慎重选择)勾选上删除数据,然后禁用再重新启用。差不多就是刷新一下。

最终效果

来看看最终效果吧~~

显示ip的效果

简单的CSS样式

2022-05-15 更新:

没忍住,加了个简单的样式:

.MyIP{ background:#F0F8FF;
        padding: 0.2em 0.6em 0.3em;
    font-family: 楷体,'Times New Roman','sans-serif', 宋体;
        color: #000000;
        margin-left: 5px;
        max-width: 150px;
        opacity: 0.65;
        vertical-align: middle;
        white-space: nowrap;
        text-overflow: ellipsis;
        cursor: pointer;
            }

放到后台的自定义CSS中。

然后在comments.php把样式添加上即可:

              <b class="fn "><?php echo $author; ?>&nbsp;&nbsp; </b>
              <b class="MyIP">   IP ➽ <?php $comments->location(); ?> </b>   
              <!--显示ip地址-->
              </span>

样式效果


插件来源(在此感谢分享):

显示 Typecho 评论 IP 定位插件


2022-06-06更新:

修改插件里的 public static function render($archive, ?string $template)代码,增加了直辖市的判断:


    public static function render($archive, ?string $template)
    {
        $archive = $archive === null ? Typecho_Widget::widget('Widget_Comments_Archive') : $archive;
        $template = $template ?? "%s";
        $db = Typecho_Db::get();
        $prefix = $db->getPrefix();
        $coid = $archive->coid;
        $result = $db->fetchRow("SELECT `location` FROM `${prefix}comments` WHERE `coid` = ${coid} and `location` is not null");
        if ($result) {
            $location = unserialize($result['location']);
        } else {
            if (!filter_var($archive->ip, FILTER_VALIDATE_IP)) {
                self::updateLocation($archive->coid, ["未知"]);
                return _t($template, "未知");
            }
            try {
                $client = Typecho_Http_Client::get();
                $client->setMethod(Typecho_Http_Client::METHOD_GET);
                $client->setHeader('User-Agent', 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; GreenBrowser)');
                $client->setTimeout(60);
                $responseBody = $client->send("http://ip-api.com/json/" . $archive->ip. "?lang=zh-CN");
                // $responseBody = $client->send("http://ip.ws.126.net/ipquery");
                if (class_exists('\Typecho\Http\Client')) $responseBody = $client->getResponseBody();
                if ($responseBody && ($location = json_decode($responseBody, true))) {
                    self::updateLocation($archive->coid, $location);
                }
            } catch (Exception $e) {
                self::log($e->getMessage(), 'error');
            }
        }

        $location = array_values(array_filter($location));
        if ($location[5] == "上海" || $location[5] == "北京" || $location[5] == "天津" || $location[5] == "重庆") {

        return _t($template, $location[4]);
        }
        else{
        return _t($template, $location[4] ."  ". $location[5]);}

    }

博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/ipshow.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 06 月 23 日
如果觉得我的文章对你有用,请随意赞赏