查看: 35|回复: 0

[技术教程] Typecho评论区操作系统及来源

[复制链接]
  • 打卡等级:常驻代表
  • 打卡总天数:47
  • 打卡月天数:1
  • 打卡总奖励:373
  • 最近打卡:2025-08-14 14:42:50
发表于 2025-7-21 15:05:28 | 显示全部楼层 |阅读模式
评论区显示操作系统和评论来源的作用是提供更多信息和背景,对于作者和访问者来说都具有一定的意义。

对于作者来说,了解评论来源和操作系统可以帮助他们了解读者的分布和设备偏好。这些信息可用于改进网站或内容的适应性,例如优化页面加载速度、调整布局以适应不同设备等。

对于访问者来说,评论区显示操作系统和评论来源可以帮助他们了解其他读者的背景和观点。通过查看评论来源,他们可以了解不同地区、不同文化和不同群体的观点和反馈。此外,了解评论来源还可以帮助他们判断评论的可信度和相关性。

总之,评论区显示操作系统和评论来源可以提供更多信息和背景,为作者和访问者提供了更全面的视角和理解。

基于纯代码实现方案
1、首先打开主题目录下的 functions.php 文件,复制下面的代码,添加到合适的位置。
  1. // 获取浏览器信息
  2. function getBrowser($agent)
  3. {
  4. if (preg_match('/MSIE\s([^\s|;]+)/i', $agent, $regs)) {
  5.     $outputer = 'Internet Explore';
  6.     } else if (preg_match('/FireFox\/([^\s]+)/i', $agent, $regs)) {
  7.     $str1 = explode('Firefox/', $regs[0]);
  8.     $FireFox_vern = explode('.', $str1[1]);
  9.     $outputer = 'FireFox';
  10.     } else if (preg_match('/Maxthon([\d]*)\/([^\s]+)/i', $agent, $regs)) {
  11.     $str1 = explode('Maxthon/', $agent);
  12.     $Maxthon_vern = explode('.', $str1[1]);
  13.     $outputer = 'MicroSoft Edge';
  14.     } else if (preg_match('#360([a-zA-Z0-9.]+)#i', $agent, $regs)) {
  15.     $outputer = '360 Fast Browser';
  16.     } else if (preg_match('/Edge([\d]*)\/([^\s]+)/i', $agent, $regs)) {
  17.     $str1 = explode('Edge/', $regs[0]);
  18.     $Edge_vern = explode('.', $str1[1]);
  19.     $outputer = 'MicroSoft Edge';
  20.     } else if (preg_match('/UC/i', $agent)) {
  21.     $str1 = explode('rowser/',  $agent);
  22.     $UCBrowser_vern = explode('.', $str1[1]);
  23.     $outputer = 'UC Browser';
  24. }  else if (preg_match('/QQ/i', $agent, $regs)||preg_match('/QQ Browser\/([^\s]+)/i', $agent,
  25. $regs)) {
  26.     $str1 = explode('rowser/',  $agent);
  27.     $QQ_vern = explode('.', $str1[1]);
  28.     $outputer = 'QQ Browser';
  29.     } else if (preg_match('/UBrowser/i', $agent, $regs)) {
  30.     $str1 = explode('rowser/',  $agent);
  31.     $UCBrowser_vern = explode('.', $str1[1]);
  32.     $outputer = 'UC Browser';
  33.     }  else if (preg_match('/Opera[\s|\/]([^\s]+)/i', $agent, $regs)) {
  34.     $outputer = 'Opera';
  35.     } else if (preg_match('/Chrome([\d]*)\/([^\s]+)/i', $agent, $regs)) {
  36.     $str1 = explode('Chrome/', $agent);
  37.     $chrome_vern = explode('.', $str1[1]);
  38.     $outputer = 'Google Chrome';
  39.     } else if (preg_match('/safari\/([^\s]+)/i', $agent, $regs)) {
  40.     $str1 = explode('Version/',  $agent);
  41.     $safari_vern = explode('.', $str1[1]);
  42.     $outputer = 'Safari';
  43. } else{
  44.     $outputer = 'Google Chrome';
  45. }
  46. echo $outputer;
  47. }
  48. // 获取操作系统信息
  49. function getOs($agent)
  50. {
  51. $os = false;
  52. if (preg_match('/win/i', $agent)) {
  53.     if (preg_match('/nt 6.0/i', $agent)) {
  54.         $os = 'Windows Vista · ';
  55.     } else if (preg_match('/nt 6.1/i', $agent)) {
  56.         $os = 'Windows 7 · ';
  57.     } else if (preg_match('/nt 6.2/i', $agent)) {
  58.         $os = 'Windows 8 · ';
  59.     } else if(preg_match('/nt 6.3/i', $agent)) {
  60.         $os = 'Windows 8.1 · ';
  61.     } else if(preg_match('/nt 5.1/i', $agent)) {
  62.         $os = 'Windows XP · ';
  63.     } else if (preg_match('/nt 10.0/i', $agent)) {
  64.         $os = 'Windows 10 · ';
  65.     } else{
  66.         $os = 'Windows X64 · ';
  67.     }
  68. } else if (preg_match('/android/i', $agent)) {
  69.     if (preg_match('/android 9/i', $agent)) {
  70.         $os = 'Android Pie · ';
  71.     }
  72.     else if (preg_match('/android 8/i', $agent)) {
  73.         $os = 'Android Oreo · ';
  74.     }
  75.     else {
  76.         $os = 'Android · ';
  77.     }
  78. }
  79. else if (preg_match('/ubuntu/i', $agent)) {
  80.     $os = 'Ubuntu · ';
  81. } else if (preg_match('/linux/i', $agent)) {
  82.     $os = 'Linux · ';
  83. } else if (preg_match('/iPhone/i', $agent)) {
  84.     $os = 'iPhone · ';
  85. } else if (preg_match('/mac/i', $agent)) {
  86.     $os = 'MacOS · ';
  87. }else if (preg_match('/fusion/i', $agent)) {
  88.     $os = 'Android · ';
  89. } else {
  90.     $os = 'Linux · ';
  91. }
  92. echo $os;
  93. }
复制代码
2、在主题目录文件中,找到 comments.php 文件(有些主题可能是 comment.php),在合适位置(比如评论作者的后面)添加以下代码
  1. <?php getOs($comments->agent); ?><?php getBrowser($comments->agent); ?>
复制代码
注意:这里用的是comments.php做的演示。如果你的主题目录下评论文件名为 comment.php ,可能需要到上面JS代码中稍微改动一下。
3、在主题目录文件中找到 style.css 文件(路径参考:/usr/themes/Joe-master/assets/css),将下面的代码添加到最下面
  1. .ua-icon {
  2. display: inline-block;
  3. width: 1pc;
  4. height: 1pc;
  5. background-size: cover;
  6. background-repeat: no-repeat;
  7. vertical-align: text-top
  8. }

  9. .icon-360 {
  10. background-image: url(https://youdomain.com)
  11. }
  12. .icon-android {
  13. background-image: url(https://youdomain.com);
  14. height: 19px
  15. }
  16. .icon-apple {
  17. background-image: url(https://youdomain.com)
  18. }
  19. .icon-baidu {
  20. background-image: url(https://youdomain.com)
  21. }
  22. .icon-chrome {
  23. background-image: url(https://youdomain.com)
  24. }
  25. .icon-edge {
  26. background-image: url(https://youdomain.com)
  27. }
  28. .icon-firefox {
  29. background-image: url(https://youdomain.com)
  30. }
  31. .icon-google {
  32. background-image: url(https://youdomain.com)
  33. }
  34. .icon-ie {
  35. background-image: url(https://youdomain.com)
  36. }
  37. .icon-liebao {
  38. background-image: url(https://youdomain.com)
  39. }
  40. .icon-linux {
  41. background-image: url(https://youdomain.com)
  42. }
  43. .icon-mac {
  44. background-image: url(https://youdomain.com)
  45. }
  46. .icon-opera {
  47. background-image: url(https://youdomain.com)
  48. }
  49. .icon-qq {
  50. background-image: url(https://youdomain.com)
  51. }
  52. .icon-quark {
  53. background-image: url(https://youdomain.com)
  54. }
  55. .icon-safari {
  56. background-image: url(https://youdomain.com)
  57. }
  58. .icon-ubuntu {
  59. background-image: url(https://youdomain.com)
  60. }
  61. .icon-uc {
  62. background-image: url(https://youdomain.com)
  63. }
  64. .icon-win1 {
  65. background-image: url(https://youdomain.com)
  66. }
  67. .icon-win2 {
  68. background-image: url(https://youdomain.com)
  69. }
复制代码
4、将以下代码加入到function.php 文件(主题目录下的文件)
  1. // 获取浏览器信息
  2. function getBrowser($agent)
  3. {
  4. if (preg_match('/MSIE\s([^\s|;]+)/i', $agent, $regs)) {
  5.     $outputer = '<i class="ua-icon icon-ie"></i>&nbsp;&nbsp;Internet Explore';
  6. } else if (preg_match('/FireFox\/([^\s]+)/i', $agent, $regs)) {
  7.   $str1 = explode('Firefox/', $regs[0]);
  8. $FireFox_vern = explode('.', $str1[1]);
  9.     $outputer = '<i class="ua-icon icon-firefox"></i>&nbsp;&nbsp;FireFox';
  10. } else if (preg_match('/Maxthon([\d]*)\/([^\s]+)/i', $agent, $regs)) {
  11.   $str1 = explode('Maxthon/', $agent);
  12. $Maxthon_vern = explode('.', $str1[1]);
  13.     $outputer = '<i class="ua-icon icon-edge"></i>&nbsp;&nbsp;MicroSoft Edge';
  14. } else if (preg_match('#360([a-zA-Z0-9.]+)#i', $agent, $regs)) {
  15. $outputer = '<i class="ua-icon icon-360"></i>&nbsp;&nbsp;360极速浏览器';
  16. } else if (preg_match('/Edge([\d]*)\/([^\s]+)/i', $agent, $regs)) {
  17.     $str1 = explode('Edge/', $regs[0]);
  18. $Edge_vern = explode('.', $str1[1]);
  19.     $outputer = '<i class="ua-icon icon-edge"></i>&nbsp;&nbsp;MicroSoft Edge';
  20. } else if (preg_match('/UC/i', $agent)) {
  21.           $str1 = explode('rowser/',  $agent);
  22. $UCBrowser_vern = explode('.', $str1[1]);
  23.     $outputer = '<i class="ua-icon icon-uc"></i>&nbsp;&nbsp;UC浏览器';
  24. }  else if (preg_match('/QQ/i', $agent, $regs)||preg_match('/QQBrowser\/([^\s]+)/i', $agent,
  25. $regs)) {
  26.               $str1 = explode('rowser/',  $agent);
  27. $QQ_vern = explode('.', $str1[1]);
  28.     $outputer = '<i class= "ua-icon icon-qq"></i>&nbsp;&nbsp;QQ浏览器';
  29. } else if (preg_match('/UBrowser/i', $agent, $regs)) {
  30.           $str1 = explode('rowser/',  $agent);
  31. $UCBrowser_vern = explode('.', $str1[1]);
  32.     $outputer = '<i class="ua-icon icon-uc"></i>&nbsp;&nbsp;UC浏览器';
  33. }  else if (preg_match('/Opera[\s|\/]([^\s]+)/i', $agent, $regs)) {
  34.     $outputer = '<i class= "ua-icon icon-opera"></i>&nbsp;&nbsp;Opera';
  35. } else if (preg_match('/Chrome([\d]*)\/([^\s]+)/i', $agent, $regs)) {
  36. $str1 = explode('Chrome/', $agent);
  37. $chrome_vern = explode('.', $str1[1]);
  38.     $outputer = '<i class="ua-icon icon-chrome"></i>&nbsp;&nbsp;Google Chrome';
  39. } else if (preg_match('/safari\/([^\s]+)/i', $agent, $regs)) {
  40.      $str1 = explode('Version/',  $agent);
  41. $safari_vern = explode('.', $str1[1]);
  42.     $outputer = '<i class="ua-icon icon-safari"></i>&nbsp;&nbsp;Safari';
  43. } else{
  44.     $outputer = '<i class="ua-icon icon-chrome"></i>&nbsp;&nbsp;Google Chrome';
  45. }
  46. echo $outputer;
  47. }
  48. // 获取操作系统信息
  49. function getOs($agent)
  50. {
  51. $os = false;

  52. if (preg_match('/win/i', $agent)) {
  53.     if (preg_match('/nt 6.0/i', $agent)) {
  54.         $os = '&nbsp;&nbsp;<i class= "ua-icon icon-win1"></i>&nbsp;&nbsp;Windows
  55. Vista&nbsp;/&nbsp;';
  56.     } else if (preg_match('/nt 6.1/i', $agent)) {
  57.         $os = '&nbsp;&nbsp;<i class= "ua-icon icon-win1"></i>&nbsp;&nbsp;Windows
  58. 7&nbsp;/&nbsp;';
  59.     } else if (preg_match('/nt 6.2/i', $agent)) {
  60.         $os = '&nbsp;&nbsp;<i class="ua-icon icon-win2"></i>&nbsp;&nbsp;Windows
  61. 8&nbsp;/&nbsp;';
  62.     } else if(preg_match('/nt 6.3/i', $agent)) {
  63.         $os = '&nbsp;&nbsp;<i class= "ua-icon icon-win2"></i>&nbsp;&nbsp;Windows
  64. 8.1&nbsp;/&nbsp;';
  65.     } else if(preg_match('/nt 5.1/i', $agent)) {
  66.         $os = '&nbsp;&nbsp;<i class="ua-icon icon-win1"></i>&nbsp;&nbsp;Windows
  67. XP&nbsp;/&nbsp;';
  68.     } else if (preg_match('/nt 10.0/i', $agent)) {
  69.         $os = '&nbsp;&nbsp;<i class="ua-icon icon-win2"></i>&nbsp;&nbsp;Windows
  70. 10&nbsp;/&nbsp;';
  71.     } else{
  72.             $os = '&nbsp;&nbsp;<i class="ua-icon icon-win2"></i>&nbsp;&nbsp;Windows
  73. X64&nbsp;/&nbsp;';
  74.     }
  75. } else if (preg_match('/android/i', $agent)) {
  76. if (preg_match('/android 9/i', $agent)) {
  77.         $os = '&nbsp;&nbsp;<i class="ua-icon icon-android"></i>&nbsp;&nbsp;Android
  78. Pie&nbsp;/&nbsp;';
  79.     }
  80. else if (preg_match('/android 8/i', $agent)) {
  81.         $os = '&nbsp;&nbsp;<i class="ua-icon icon-android"></i>&nbsp;&nbsp;Android
  82. Oreo&nbsp;/&nbsp;';
  83.     }
  84. else{
  85.         $os = '&nbsp;&nbsp;<i class="ua-icon icon-android">
  86.    </i>&nbsp;&nbsp;Android&nbsp;/&nbsp;';
  87. }
  88. }
  89. else if (preg_match('/ubuntu/i', $agent)) {
  90.     $os = '&nbsp;&nbsp;<i class="ua-icon icon-ubuntu"></i>&nbsp;&nbsp;Ubuntu&nbsp;/&nbsp;';
  91. } else if (preg_match('/linux/i', $agent)) {
  92.     $os = '&nbsp;&nbsp;<i class= "ua-icon icon-linux"></i>&nbsp;&nbsp;Linux&nbsp;/&nbsp;';
  93. } else if (preg_match('/iPhone/i', $agent)) {
  94.     $os = '&nbsp;&nbsp;<i class="ua-icon icon-apple"></i>&nbsp;&nbsp;iPhone&nbsp;/&nbsp;';
  95. } else if (preg_match('/mac/i', $agent)) {
  96.     $os = '&nbsp;&nbsp;<i class="ua-icon icon-mac"></i>&nbsp;&nbsp;MacOS&nbsp;/&nbsp;';
  97. }else if (preg_match('/fusion/i', $agent)) {
  98.     $os = '&nbsp;&nbsp;<i class="ua-icon icon-android"></i>&nbsp;&nbsp;Android&nbsp;/&nbsp;';
  99. } else {
  100.     $os = '&nbsp;&nbsp;<i class="ua-icon icon-linux"></i>&nbsp;&nbsp;Linux&nbsp;/&nbsp;';
  101. }
  102. echo $os;
  103. }
复制代码
5、将以下代码添加到comments.php中122行附近所在的div中
  1. <span class="comment-ua">
  2. <?php getOs($comments->agent); ?>
  3. <?php getBrowser($comments->agent); ?>
  4. </span>
复制代码
注意:部分主题需要将comments修改为this才生效
UA图标下载:https://liuyajun.lanzout.com/icyIp1kfkdbg
基于腾讯位置服务
打开腾讯位置服务官网,注册一个账号或者直接用QQ或者微信登录都可以(需要验证手机号)。
打开控制台,点击左侧边栏中的应用管理,然后点击创建应用,输入应用名称和应用类型即可。
一个应用可以添加多个Key,一个Key一天可以免费调用10000次IP定位服务(并发5次/s)。其他选项根据提示,按需选择即可。
将以下代码复制到Cuteen/core/Function.php的末尾:
  1. /* 腾讯LBS IP定位服务 */
  2. function curl_tencentlbs_ip($ip) {
  3.     //应用Key也就是上面的Key,修改成自己的Key即可
  4.     $key = 'XXX-XXX';
  5.     $url = 'https://apis.map.qq.com/ws/location/v1/ip?ip='.$ip.'&key='.$key;
  6.     $ch = curl_init();
  7.     curl_setopt($ch, CURLOPT_URL, $url);
  8.     curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
  9.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  10.     curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
  11.     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  12.     curl_setopt($ch, CURLOPT_HTTPGET, true);
  13.     curl_setopt($ch, CURLOPT_REFERER, $url);
  14.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  15.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  16.     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');
  17.     $content = curl_exec($ch);
  18.     curl_close($ch);
  19.     if($content) {
  20.         $json = json_decode($content,true);
  21.         if($json['status'] == 0 ) {
  22.             $resjson = $json['result']['ad_info'];
  23.             if($resjson['province']=='北京市'||$resjson['province']=='天津市'||$resjson['province']=='上海市'||$resjson['province']=='重庆市') {
  24.                 return $resjson['nation'].$resjson['city'];
  25.             }
  26.             return $resjson['nation'].$resjson['province'];
  27.         }
  28.     }
  29.     return '';
  30. }
复制代码
注意:为了保护个人隐私,上面的代码已去除城市和区县信息,仅显示国家和省份信息。
将下面的代码复制到主题目录下的 comment.php 评论文件中(路径参考:usr/themes/Joe-master/public/comment.php)
  1. IP属地:<?php echo curl_tencentlbs_ip($comments->ip); ?>
复制代码
原文地址:https://vjo.cc/31

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表