本文发布于 822 天前,其中的信息可能已经有所发展或是发生改变。
近期国内各大平台都在添加IP归属地,我也想趁这股风潮添加一下。
本文提到的免费数据库、API均为非商业授权,请勿用于商业用途。
但很可惜的是由于使用的是免费IP库,所以不支持IPV6,博客很早开启了IPV6支持,导致一部分评论不显示IP归属地,于是我就将其安装上后暂时搁置了。
今天访问友链网站,注意这样到一篇文章[2]
据了解,其IPV6支持是通过访问ip-api.com的API获取,于是参考其代码对插件进行了修改,现在可以显示所有IP属地。
修改的部分代码
function curl_get_https($url){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$tmpInfo = curl_exec($curl);
curl_close($curl);
return $tmpInfo;
}
if (!function_exists('get_user_city_e')) :
function get_user_city_e($ip){
$result = curl_get_https("http://ip-api.com/json/".$ip."?lang=zh-CN");
$json=json_decode($result,true);
if ($json == null){$c = " 获取失败 ";}
elseif($json["status"]=="success" && $json["country"]=="中国") {
$c = $json['regionName'];
}
elseif($json["status"]=="success"){
$c = $json['country'];
}
else{
$c = " 未知 ";
}
return $c;}
endif;
if (!function_exists('easy_location_handle_comment')) :
function easy_location_handle_comment($comment_text)
{
$comment_ID = get_comment_ID();
$comment = get_comment($comment_ID);
if ($comment->comment_author_IP && get_user_city($comment->comment_author_IP)) {
$comment_text .= '<div class="comment--location" id="offline"><i class="fa fa-map-marker" aria-hidden="true"></i> IP属地(仅供参考):' . get_user_city($comment->comment_author_IP) . '</div>' ;
}
elseif($comment->comment_author_IP){
$comment_text .= '<div class="comment--location" id="api"><i class="fa fa-map-marker" aria-hidden="true"></i> IP属地(仅供参考):' . get_user_city_e($comment->comment_author_IP) . '</div>' ;
}
else{
$comment_text .= '<div class="comment--location">未获取评论IP地址</div>' ;
}
return $comment_text;
}
endif;
匆匆修改,可能会存在问题,欢迎进行指正。
更新记录
2023年3月20日 :添加当访问api网站失败时" 获取失败 "的提示,避免直接抛出php报错。