无主题 · 开发技术博客

Wodpress评论UA信息和地理信息显示(代码,免插件)

 

效果可以查看本博客评论列表,鼠标滑过显示系统和浏览器信息。

其实这个功能已经有插件了,愿意折腾代码的朋友可以看下本文中介绍的方法;不想折腾代码直接下载插件即可:WP-UserAgent

原理

通过分析留言中存储的userAgent信息分析操作系统和浏览器

userAgent信息:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36

php代码

//UA信息
function user_agent($ua) {
 //开始解析操作系统
 $os = null;
 if (preg_match('/Windows NT 6.0/i', $ua)) {
   $os = "Windows Vista";
 } elseif (preg_match('/Windows NT 6.1/i', $ua)) {
   $os = "Windows 7";
 } elseif (preg_match('/Windows NT 6.2/i', $ua)) {
   $os = "Windows 8";
 } elseif (preg_match('/Windows NT 6.3/i', $ua)) {
   $os = "Windows 8.1";
 } elseif (preg_match('/Windows NT 10.0/i', $ua)) {
   $os = "Windows 10";
 } elseif (preg_match('/Windows NT 5.1/i', $ua)) {
   $os = "Windows XP";
 } elseif (preg_match('/Windows NT 5.2/i', $ua) && preg_match('/Win64/i', $ua)) {
   $os = "Windows XP 64 bit";
 } elseif (preg_match('/Android ([0-9.]+)/i',$ua,$matches)) {
   $os = "Android " . $matches[1];
 } elseif (preg_match('/iPhone OS ([_0-9]+)/i' , $ua , $matches)) {
   $os = 'iPhone ' . $matches[1];
 } elseif (preg_match('/Ubuntu/i',$ua, $matches)) {
   $os = 'Ubuntu ';
 } elseif (preg_match('/ Mac OS X ([0-9]+)/i',$ua, $matches)) {
   $os = 'Mac OS ' . $matches[1];
 } else {
   $os = '未知操作系统';
 }
 if (preg_match('#(Camino|Chimera)[ /]([a-zA-Z0-9.]+)#i', $ua, $matches)) {
   $browser = 'Camino ' . $matches[2];
 } elseif (preg_match('#SE 2([a-zA-Z0-9.]+)#i', $ua, $matches)) {
   $browser = '搜狗浏览器 2' . $matches[1];
 } elseif (preg_match('#360([a-zA-Z0-9.]+)#i', $ua, $matches)) {
   $browser = '360浏览器 ' . $matches[1];
 } elseif (preg_match('#Maxthon( |\/)([a-zA-Z0-9.]+)#i', $ua, $matches)) {
   $browser = 'Maxthon ' . $matches[2];
 } elseif (preg_match('#Chrome/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
   $browser = 'Chrome ' . $matches[1];
 } elseif (preg_match('#XiaoMi/MiuiBrowser/([0-9.]+)#i' , $ua , $matches)) {
   $browser = '小米浏览器 ' . $matches[1];
 } elseif (preg_match('#Safari/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
   $browser = 'Safari ' . $matches[1];
 } elseif (preg_match('#opera mini#i', $ua)) {
   preg_match('#Opera/([a-zA-Z0-9.]+)#i', $ua, $matches);
   $browser = 'Opera Mini ' . $matches[1];
 } elseif (preg_match('#Opera.([a-zA-Z0-9.]+)#i', $ua, $matches)) {
   $browser = 'Opera ' . $matches[1];
 } elseif (preg_match('#TencentTraveler ([a-zA-Z0-9.]+)#i', $ua, $matches)) {
   $browser = '腾讯TT浏览器 ' . $matches[1];
 } elseif (preg_match('#UCWEB([a-zA-Z0-9.]+)#i', $ua, $matches)) {
   $browser = 'UCWEB ' . $matches[1];
 } elseif (preg_match('#MSIE ([a-zA-Z0-9.]+)#i', $ua, $matches)) {
   $browser = 'Internet Explorer ' . $matches[1];
 } elseif (preg_match('Edge/12.0',$ua,$matches)) { //win10中spartan浏览器
   $browser = 'Spartan';
 } elseif (preg_match('#(Firefox|Phoenix|Firebird|BonEcho|GranParadiso|Minefield|Iceweasel)/([a-zA-Z0-9.]+)#i', $ua, $matches)) {
   $browser = 'Firefox ' . $matches[2];
 } else {
   $browser = '未知浏览器';
 }
 return $os . " | " . $browser;
}

以上代码可以轻松在网上找到,不过代码一般都比较过时,比如win8及以上系统,小米浏览器等不能正确判断;我根据现实情况简单修改了代码去掉了一些无用代码,但是目前的UA信息有限,写的并不全面。

UA信息调用代码

<?php echo user_agent($comment->comment_agent); ?>

在评论列表代码找到合适的位置直接调用即可

鼠标滑过显示效果代码

$(".commentdiv").hover(
 function(){
   $(this).find('.commentua').stop(true,true).fadeIn(300)
 },
 function(){
   $(this).find('.commentua').stop(true,true).fadeOut(300)
 }
);

.commnetdiv 为要悬停元素

.commentua 为悬停显示元素,即:ua信息;该元素(标签)初始化隐藏即可。

可扩展内容

评论表中还有评论者IP(comment_author_ip)可以通过ip分析确定评论者所处位置;

可显示为“来自:XXX的网友”

功能写的越多,服务器压力越大,大家要把握好这个平衡;折腾诚可贵,负载价更高。 

2015-04-12 更新

显示评论者地理信息

 使用新浪提供的ip地址查询接口可以根据评论者ip查询对应地理位置信息

/*
*根据新浪IP查询接口获取IP所在地
*/
function getIPLoc_sina($ip1){
	$url = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip='.$ip1;
	$ch = curl_init($url);
	//curl_setopt($ch,CURLOPT_ENCODING ,'utf8');
	curl_setopt($ch, CURLOPT_TIMEOUT, 10);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回
	$location = curl_exec($ch);
	$location = json_decode($location);
	curl_close($ch);
	$loc = "";
	if($location===FALSE) return "";
	if (empty($location->desc)) {
		$loc = $location->country.$location->province.$location->city;
	}else{
		$loc = $location->desc;
	}
	return $loc;
}

更多接口和更多接口使用方法请移步IP地址查询接口 IP归属地接口查看

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

¥ 打赏博主
站内评论 新浪微博评论
发表评论
评论(46)
没有看到评论?强制刷新
评论 (23)
引用 (0)
  • 17楼
    http://vm.i-im.net李光春 :

    lz好,发现你最后面的地址跳转有问题 更多接口和更多接口使用方法请移步IP地址查询接口 IP归属地接口查看 这里

    2016.10.7 17:50 中国广东广州 | Windows 7 | Chrome 50.0.2661.102 回复

    • 管理员
      http://wuzhuti.cn小武 :

      @李光春 : 感谢提醒,已修改

      2016.10.9 10:32 中国辽宁大连 | Mac OS 10 | Safari 602.1.50 回复
      • http://vm.i-im.net李光春 :

        @小武 : :razz:

        2016.10.9 12:04 中国广东广州 | Windows 7 | Chrome 50.0.2661.102 回复
  • 16楼
    https://blog.liyang.io/李阳博客 :

    学习啦,还不错收藏下先

    2016.07.11 21:50 中国北京北京 | Mac OS 10 | Chrome 51.0.2704.106 回复
  • 15楼
    http://shellbin.topshell :

    全程玩仓鼠和点鼠标怎么破

    2016.06.28 21:10 中国山西大同 | Mac OS 10 | Chrome 50.0.2661.102 回复
  • 14楼
    http://2dapao.com爱打炮导航 :

    不知道是什么原因,我是想自由评论的,不要审核,结果后台评论全放行了,还是要审核。 评论作者必须填入姓名和电子邮件地址 用户必须注册并登录才可以发表评论 这两个我都没有勾选的。评论必须经人工批准。 评论者先前须有评论通过了审核这两句也是没勾选的,按说应该是可以的啊,怎么还是不行

    2016.05.8 02:12 中国广东中山 | Windows 7 | Chrome 48.0.2564.116 回复

    • 管理员
      http://wuzhuti.cn小武 :

      @爱打炮导航 : 老大, 你想问什么呀?

      2016.05.9 09:30 中国辽宁大连 | Windows 10 | Chrome 50.0.2661.94 回复
  • 13楼
    http://www.reteng.org热腾网 :

    看到 折腾诚可贵,负载价更高。 这句话,我选择放弃添加。

    2016.04.19 21:34 中国河北石家庄 | Windows 10 | Chrome 48.0.2564.116 回复

    • 管理员
      http://wuzhuti.cn小武 :

      其实这句话说的优点严重,做好本地缓存之后对负载影响还是很低的。为用的阿里云配置最低的服务器,你看访问速度还行哈。

      2016.04.20 19:58 中国天津天津 | Mac OS 10 | Chrome 49.0.2623.112 回复
      • http://www.reteng.org热腾网 :

        @小武 : 我的网站开始使用的插件缓存,后来越来越慢,现在把后台插件能去的都去了。本地缓存,有时评论不能及时显示出来。

        2016.04.20 23:56 中国河北石家庄 | Windows 10 | Chrome 46.0.2486.0 回复

        • 管理员
          http://wuzhuti.cn小武 :

          你的博客是用nginx服务器吗? 如果是 nginx 可以利用 nginx Fastcgi cache并配合 Nginx Helper 插件效果比较好。这个插件可以在评论之后,和文章更新之后清除对应的缓存。

          2016.04.21 10:43 中国天津天津 | Mac OS 10 | Chrome 49.0.2623.112 回复
          • http://www.reteng.org热腾网 :

            @小武 : 用的是阿里云的虚拟主机

            2016.05.15 14:00 中国河北石家庄 | Windows 10 | Chrome 48.0.2564.116 回复

            • 管理员
              http://wuzhuti.cn小武 :

              @热腾网 : 虚拟主机没办法

              2016.05.15 16:20 中国辽宁大连 | Mac OS 10 | Safari 601.5.17 回复
  • 12楼
    http://zlinet.com拽立网 :

    发现问题,你的代码识别不了360浏览器,

    2016.04.12 08:45 中国广东深圳 | Windows 7 | Chrome 45.0.2454.101 回复

    • 管理员
      http://wuzhuti.cn小武 :

      @拽立网 : 能否麻烦你用360浏览器给我留个言,我看一下360浏览器的UA信息。。谢谢。

      2016.04.12 10:33 中国天津天津 | Mac OS 10 | Chrome 49.0.2623.110 回复
      • http://zlinet.com拽立网 :

        @小武 : 我本来就是360浏览器啊,加油修复吧!

        2016.04.12 14:05 中国广东深圳 | Windows 7 | Chrome 45.0.2454.101 回复
    • 小武 :

      @拽立网 : 测试 360浏览器UA信息

      2016.04.12 14:16 中国天津天津 | Windows 10 | Chrome 45.0.2454.101 回复

    • 管理员
      http://wuzhuti.cn小武 :

      @拽立网 : 不知道是360 的开发人员太懒,还是360浏览器太烂,他直接使用的是Chrome内核默认的UA信息作为360浏览器的UA信息,以前的版本不是这样的。。http://tool.lu/useragent http://www.useragentstring.com/ 这两个工具是在线检测UA信息的(比较权威),他们检测出来的也是 Chrome浏览器

      2016.04.12 14:24 中国天津天津 | Mac OS 10 | Chrome 49.0.2623.110 回复
  • 11楼
    GC :

    看看我的 :roll: :roll:

    2016.02.8 12:43 中国广东茂名 | Windows 7 | Chrome 45.0.2454.101 回复
  • 10楼
    http://bpplpp.comleejon :

    请问下,您的https用的是哪家CDN只是https?

    2016.02.8 10:55 中国广西桂林 | Windows 7 | Chrome 48.0.2564.103 回复

    • 管理员
      http://wuzhuti.cn小武 :

      https用得哪家cnd是什么意思?

      2016.02.8 18:23 中国辽宁大连 | Mac OS 10 | Chrome 48.0.2564.103 回复
      • http://bpplpp.comleejon :

        @小武 : 比如百度免费套餐CDN不支持https,你的站用的是哪家CDN?

        2016.02.8 18:28 中国广西桂林 | Windows 7 | Chrome 48.0.2564.103 回复

        • 管理员
          http://wuzhuti.cn小武 :

          我博客现在不用cdn加速了

          2016.02.8 18:29 中国辽宁大连 | Mac OS 10 | Chrome 48.0.2564.103 回复
  • 还没有Trackback