微博移动版/国际版分享网页自动跳转PC版

修改自 owovo 的 “微博移动版网页自动跳转PC版”,添加了微博国际版的支持。修复了原算法的一些BUG。

  1. // ==UserScript==
  2. // @name 微博移动版/国际版分享网页自动跳转PC版
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.7
  5. // @description 修改自 owovo 的 “微博移动版网页自动跳转PC版”,添加了微博国际版的支持。修复了原算法的一些BUG。
  6. // @author Archeb
  7. // @match https://m.weibo.cn/detail/*
  8. // @match https://m.weibo.cn/status/*
  9. // @match https://share.api.weibo.cn/share/*
  10. // @match http://share.api.weibo.cn/share/*
  11. // @grant none
  12. // ==/UserScript==
  13.  
  14. (function() {
  15. 'use strict';
  16.  
  17. var WeiboUtil = {
  18. // 62进制字典
  19. str62keys: [
  20. "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
  21. "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
  22. "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"
  23. ],
  24. };
  25.  
  26. /**
  27. * 62进制值转换为10进制
  28. * @param {String} str62 62进制值
  29. * @return {String} 10进制值
  30. */
  31. WeiboUtil.str62to10 = function(str62) {
  32. var i10 = 0;
  33. for (var i = 0; i < str62.length; i++)
  34. {
  35. var n = str62.length - i - 1;
  36. var s = str62[i];
  37. i10 += this.str62keys.indexOf(s) * Math.pow(62, n);
  38. }
  39. return i10;
  40. };
  41.  
  42. /**
  43. * 10进制值转换为62进制
  44. * @param {String} int10 10进制值
  45. * @return {String} 62进制值
  46. */
  47. WeiboUtil.int10to62 = function(int10) {
  48. var s62 = '';
  49. var r = 0;
  50. while (int10 != 0 && s62.length < 100) {
  51. r = int10 % 62;
  52. s62 = this.str62keys[r] + s62;
  53. int10 = Math.floor(int10 / 62);
  54. }
  55. return s62;
  56. };
  57.  
  58. /**
  59. * URL字符转换为mid
  60. * @param {String} url 微博URL字符
  61. * @return {String} 微博mid
  62. */
  63. WeiboUtil.url2mid = function(url) {
  64. var mid = '';
  65.  
  66. for (var i = url.length - 4; i > -4; i = i - 4) //从最后往前以4字节为一组读取URL字符
  67. {
  68. var offset1 = i < 0 ? 0 : i;
  69. var offset2 = i + 4;
  70. var str = url.substring(offset1, offset2);
  71.  
  72. str = this.str62to10(str);
  73. if (offset1 > 0) { //若不是第一组,则不足7位补0
  74. while (str.length < 7)
  75. {
  76. str = '0' + str;
  77. }
  78. }
  79.  
  80. mid = str + mid;
  81. }
  82.  
  83. return mid;
  84. };
  85.  
  86. /**
  87. * mid转换为URL字符
  88. * @param {String} mid 微博mid
  89. * @return {String} 微博URL字符
  90. */
  91. WeiboUtil.mid2url = function(mid) {
  92. if(!mid) {
  93. return mid;
  94. }
  95. mid = String(mid); //mid数值较大,必须为字符串!
  96. if(!/^\d+$/.test(mid)){ return mid; }
  97. var url = '';
  98.  
  99. for (var i = mid.length - 7; i > -7; i = i - 7) //从最后往前以7字节为一组读取mid
  100. {
  101. var offset1 = i < 0 ? 0 : i;
  102. var offset2 = i + 7;
  103. var num = mid.substring(offset1, offset2);
  104. num = this.int10to62(num);
  105. num = i>0 ? num.padStart(4,"0") : num
  106. url = num + url;
  107. }
  108.  
  109. return url;
  110. };
  111. let weibointl= /share\/(\d+,)?(\d+).html/g.exec(document.location.href);
  112. if(weibointl){
  113. forward=function(a,mid,b=1){window.weibomid=mid}
  114. eval(document.querySelector('.m-btn-ellipse.m-btn-block.m-btn-orange').getAttribute('onclick'))
  115. window.location="https://m.weibo.cn/status/" + window.weibomid;
  116. }else{
  117. console.log("[WeiboPcGo] 不是微博国际版页面,尝试解析移动版")
  118. }
  119. try {
  120. const html = document.documentElement.innerHTML
  121. const mid = html.match(/"mid":\s"(.*?)"/)[1]
  122. const uid = html.match(/https:\/\/m\.weibo\.cn\/u\/(.*?)\?/)[1];
  123. var id = "";
  124. if (document.location.href.match(/^.*m\.weibo\.cn\/(status|detail)\/(\w+)\??.*$/i) && !/^\d+$/.test(RegExp.$2)) {
  125. id = RegExp.$2;
  126. } else {
  127. id = WeiboUtil.mid2url(mid);
  128. }
  129. const href = `https://weibo.com/${uid}/${id}`
  130. window.location=href;
  131. } catch (e) {
  132. console.log('[WeiboPcGo] 解析 id 失败', e)
  133. }
  134. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址