Joe 主题对接腾讯 LBS 展示 IP 属地

chen'mo
2022-11-06 / 1 评论 / 4,693 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年11月06日,已超过473天没有更新,若内容或图片失效,请留言反馈。

上次偶然逛 CSDN 看到腾讯的 LBS 服务支持 IP 定位,而且还支持 IPv6 地址定位,这个是其他 LBS 供应商所不支持的 (百度地图、高德地图),所有腾讯 LBS 服务还算良心。我们一步一步对接主题吧,今天先来申请应用 AK。

注册账号
https://lbs.qq.com/
打开腾讯位置服务官网,点击登录,直接使用 QQ 登录或微信登录即可,如果单独注册需要输入手机号之类,麻烦的事情,但是使用 QQ 登录 / 微信登录后也需要校验一下手机号,但是个人信息不用填写太多。

创建应用
打开控制台,左侧有一个应用管理,点击后可创建应用,输入应用名称和应用类型即可,无需输入域名、备案信息啥的,所有这方便无需担心。

创建应用

一个应用可以添加多个 Key,一个 Key 每日可调用 10000 次,并发 5 次每秒。
添加Key

这时候我们选择 WebService API 服务即可,选择后有三种方案,域名白名单、授权 IP、签名校验,一般我们会部署在服务器上,所以可以选择授权 IP,这样方便一些;域名白名单和签名校验限制有些多,且我们这次对接主题也是以授权 IP 为主。

保存后我们就能拿到一个 Key,这里我们简称 AK,下面开始对接 Joe 主题展示博友访客 IP 属地信息。

添加主题调用方法
2022.05.25:为了个人隐私,以下代码已去除城市和区县信息,仅显示国家和省

核心方法代码位置:Joe/core/function.php 在末尾添加以下代码

/* 腾讯Lbs IP定位服务 */
function curl_tencentlbs_ip($ip) {
    //应用Key也就是上面所说的AK,修改成自己的Key即可
    $key = 'XXX-XXX';
    $url = 'https://apis.map.qq.com/ws/location/v1/ip?ip='.$ip.'&key='.$key;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_HTTPGET, true);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36');
    $content = curl_exec($ch);
    curl_close($ch);
    if($content) {
        $json = json_decode($content,true);
        if($json['status'] == 0 ) {
            $resjson = $json['result']['ad_info'];
            if($resjson['province']=='北京市'||$resjson['province']=='天津市'||$resjson['province']=='上海市'||$resjson['province']=='重庆市') {
                return $resjson['nation'].$resjson['city'];
            }
            return $resjson['nation'].$resjson['province'];
        }
    }
    return '';
}

上面调用接口后,处理以下国内的直辖市,这样就不会显示成北京市北京市了。

修改主题评论相关代码
评论代码位置:/Joe/public/comment.php

需要修改的位置大概在末尾最后一个方法,位置 112 行。

也可以在需要显示评论信息的位置插入下方嵌入点代码即可,我是把 IP 信息放在 agent 旁边了,这样不是特别显眼。

<?php echo curl_tencentlbs_ip($comments->ip); ?>

以下示例代码从 96 行到尾部

<?php
function threadedComments($comments, $options)
{ ?>
    <li class="comment-list__item">
        <div class="comment-list__item-contain" id="<?php $comments->theId(); ?>">
            <div class="term">
                <img width="48" height="48" class="avatar lazyload" src="<?php _getAvatarLazyload() ?>" data-src="<?php _getAvatarByMail($comments->mail); ?>" alt="头像" />
                <div class="content">
                    <div class="user">
                        <span class="author"><?php $comments->author(); ?></span>
                        <?php if ($comments->authorId === $comments->ownerId) : ?>
                            <i class="owner">作者</i>
                        <?php endif; ?>
                        <?php if ($comments->status === "waiting") : ?>
                            <em class="waiting">(评论审核中...)</em>
                        <?php endif; ?>
                        <div class="agent"><?php echo curl_tencentlbs_ip($comments->ip); ?> <?php _getAgentOS($comments->agent); ?> · <?php _getAgentBrowser($comments->agent); ?></div>
                    </div>
                    <div class="substance">
                        <?php _getParentReply($comments->parent) ?>
                        <?php echo _parseCommentReply($comments->content); ?>
                    </div>
                    <div class="handle">
                        <time class="date" datetime="<?php $comments->date('Y-m-d'); ?>"><?php $comments->date('Y-m-d'); ?></time>
                        <span class="reply joe_comment__reply" data-id="<?php $comments->theId(); ?>" data-coid="<?php $comments->coid(); ?>">
                            <i class="icon fa fa-pencil" aria-hidden="true"></i>回复
                        </span>
                    </div>
                </div>
            </div>
        </div>
        <?php if ($comments->children) : ?>
            <div class="comment-list__item-children">
                <?php $comments->threadedComments($options); ?>
            </div>
        <?php endif; ?>
    </li>
<?php } ?>

效果如下:
IP

其他博客主题,应该也可以适用。

Linux一键更换国内软件源脚本:LinuxMirrors
« 上一篇 11-05
Typecho 评论验证插件 hCaptcha
下一篇 » 11-07

评论 (1)

插入图片
  1. 头像
    胡子延 Lv.1   广东省东莞市
    MacOS · Google Chrome
    沙发

    请问博主,后台评论管理处如何修改为显示ip属地

    回复