!
优惠码:wxsnote
信息

高德地图API开通及PHP使用IP地址获取归属地

从2022年4月开始,大家会发现各大网络社交平台(如:抖音、快手、微博、B站 等)都在评论区和用户个人主页增加了账号ip归属地信息。我们站长在使用的网站程序多数未自带显示归属地功能,所以给大家分享一下王先生笔记是如何开通高德web服务api和如何使用PHP应用到普通程序和子比主题中的。

经过我一番搜索,原来是因为有了新规定,《互联网用户账号名称信息管理规定》 第十二条规定(自己看吧,我就不复制了)。

高德地图web服务开通以及获取key

打开高德开放平台:https://lbs.amap.com/

高德开放平台的服务多数是免费的,主要是依据开发者范围规格决定的,如下图所示。各位在看本文的站长们请以自身情况而定

图片[1]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记

开发者自行做账号认证,认证地址:https://console.amap.com/dev/user/permission

图片[2]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记

点击后台的应用管理,点击创建应用

图片[3]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记

填写名称,类型选择自己网站的类型

图片[4]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记

点击添加key

图片[5]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记

key名称要符合规范(支持汉字、数字、字母、下划线、中划线,不超过15个),平台选择web服务,如果你只有一台服务器用这项服务,可以添加IP白名单

图片[6]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记

获得了key

图片[7]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记

PHP示例

普通PHP程序使用

子比主题评论区

以下代码仅适用于子比,其他主题需要修改拼接位置

第一步:在主题根目录下创建func.php文件,并在第一行写上<?php(已经创建了此文件的就不用管了)

第二步:在func.php文件中最下行增加下面的代码

/**
 * @description: 根据ip地址获取用户地区
 * @param {*} $user_ip
 * @return {*}
 */
function wxs_user_ip($user_ip)
{
    $api_key = ''; //这里填上你申请的高德key

    if (!$api_key || !$user_ip) {
        return '';
    }

    $api  = 'https://restapi.amap.com/v3/ip?key=' . $api_key . '&output=json&ip=' . $user_ip;
    $json = file_get_contents($api);
    $arr  = (array) json_decode($json, true);

    if (empty($arr['province'])) {
        //没有获取到地区显示的内容
        $dizhi = "未知地区"; //这里可以改成其他的
    } else {
        $dizhi = $arr['province'];
    }
    return $dizhi;
}

/**
 * @description: 在评论区显示地区
 * @param {*} $info
 * @param {*} $comment
 * @param {*} $depth
 * @return {*}
 */
function wxs_footer_info_add_province($info, $comment, $depth)
{
    $user_ip = $comment->comment_author_IP;
    if ($user_ip) {
        $province = wxs_user_ip($user_ip);
        $province = $province ? '<span class="badg c-grey badg-sm flex0 ml3" data-toggle="tooltip" alt="IP:' . $user_ip . '" title="该用户评论时所在地区:' . $province . '">' . $province . '</span>' : '';

        $info = $province . $info;
    }

    return $info;
}
add_filter('comment_footer_info', 'wxs_footer_info_add_province', 10, 3);
/**
*由子比主题作者进行代码优化
*原代码来自本帖作者 天无神话
**/

第三步:自己去高德申请接口后,修改以下代码中的高德key为你申请的

图片[8]-高德地图API开通及PHP使用IP地址获取归属地-王先生笔记

通过此方法不会影响以后主题在线更新,在线更新不会丢失此功能

代码的原理:使用wp记录评论者评论时的ip地址,将评论记录的ip作为接口参数拼接到接口url。使用php的函数获取api接口返回json数组。将json转换为php认识的内容,再将省份的内容提取出来。在指定位置增加添加经过判断是否为未知区域的归属地。

高德地图的api除了无法查询到1%IP归属地和海外归属地,除此之外还有一个大坑。它查询不到IP的归属地,就返回数组为空。我写这个代码的时候,没有注意到,也没有加判断。当时有一个人的评论显示Array,当时给我弄懵了,后来才发现这个大坑。所以我给代码加了显示未知归属地的判断。

注意事项

如果你的网站有cdn,那么需要在wordpress配置文件wp-config.php第二行<?php下面增加下面的代码,用于获取用户真实ip地址,否则wp保存的就是cdn的回源的ip

//获取用户真实ip地址
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  $list = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
  $_SERVER['REMOTE_ADDR'] = $list[0];
}
温馨提示:本文最后更新于2023-06-26 19:33:16,某些文章具有时效性,若有错误或已失效,请在下方留言或加入QQ群:399019539联系群主。
友情赞助

如果你喜欢我的内容,可以赞助我哦!你的一点点心意,是我不断前进的动力!
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 共3条

请登录后发表评论

    请登录后查看评论内容