Last active
November 6, 2020 17:03
-
-
Save wangcheng/3663599e3766571d255e33e1175517e6 to your computer and use it in GitHub Desktop.
微博国际版链接切换到微博移动版或者桌面版
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name New Userscript | |
// @namespace http://tampermonkey.net/ | |
// @version 0.1 | |
// @description try to take over the world! | |
// @author You | |
// @match ://weibointl.api.weibo.com/share/* | |
// @grant none | |
// ==/UserScript== | |
/** | |
* 新浪微博mid与url互转实用工具 | |
* 作者: XiNGRZ (http://weibo.com/xingrz) | |
*/ | |
// 62进制字典 | |
const str62keys = [ | |
"0", | |
"1", | |
"2", | |
"3", | |
"4", | |
"5", | |
"6", | |
"7", | |
"8", | |
"9", | |
"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", | |
"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" | |
]; | |
/** | |
* 62进制值转换为10进制 | |
* @param {String} str62 62进制值 | |
* @return {String} 10进制值 | |
*/ | |
const str62to10 = (str62) => { | |
var i10 = 0; | |
for (var i = 0; i < str62.length; i++) { | |
var n = str62.length - i - 1; | |
var s = str62[i]; | |
i10 += str62keys.indexOf(s) * Math.pow(62, n); | |
} | |
return String(i10); | |
}; | |
/** | |
* 10进制值转换为62进制 | |
* @param {String} str10 10进制值 | |
* @return {String} 62进制值 | |
*/ | |
const str10to62 = (str10) => { | |
let int10 = parseInt(str10, 10); | |
var s62 = ""; | |
var r = 0; | |
while (int10 !== 0 && s62.length < 100) { | |
r = int10 % 62; | |
s62 = str62keys[r] + s62; | |
int10 = Math.floor(int10 / 62); | |
} | |
return s62; | |
}; | |
const chunkString = (str, step) => { | |
const result = []; | |
for (let i = str.length; i > 0; i = i - step) { | |
result.unshift(str.substring(i - step, i)); | |
} | |
return result; | |
}; | |
/** | |
* URL字符转换为mid | |
* @param {String} url 微博URL字符,如 "wr4mOFqpbO" | |
* @return {String} 微博mid,如 "201110410216293360" | |
*/ | |
const url2mid = (url) => { | |
console.log(url, chunkString(url, 4)); | |
return chunkString(url, 4) | |
.map((s) => str62to10(s).padStart(7, "0")) | |
.join(""); | |
}; | |
/** | |
* mid转换为URL字符 | |
* @param {String} mid 微博mid,如 "201110410216293360" | |
* @return {String} 微博URL字符,如 "wr4mOFqpbO" | |
*/ | |
const mid2url = (mid) => { | |
if (typeof mid !== "string" || !/^\d+$/.test(mid)) { | |
throw new Error("wrong mid"); | |
} | |
return chunkString(mid, 7) | |
.map((s) => str10to62(s).padStart(4, "0")) | |
.join(""); | |
}; | |
function addButtons(userId, weiboId){ | |
const btnWrap = document.createElement('div'); | |
btnWrap.style="position: fixed; top: 0; right: 0;" | |
const btnToCn = document.createElement('button'); | |
btnToCn.textContent = '切换到微博移动版' | |
btnToCn.addEventListener('click',()=>{ | |
location.href= `https://m.weibo.cn/status/${weiboId}`; | |
}) | |
const btnToCom = document.createElement('button'); | |
btnToCom.textContent = '切换到微博桌面版' | |
btnToCom.addEventListener('click',()=>{ | |
location.href= `https://weibo.com/${userId}/${mid2url(weiboId)}`; | |
}) | |
btnWrap.appendChild(btnToCn) | |
btnWrap.appendChild(btnToCom) | |
document.body.appendChild(btnWrap) | |
} | |
(function() { | |
'use strict'; | |
const weiboInfoHtml = document.querySelector('.f-m-img').innerHTML | |
const weiboId = weiboInfoHtml.match(/forward\(0,\.(\d+)/)[1] | |
const userInfoHtml = document.querySelector('.weibo-top.m-box.m-avatar-box').innerHTML | |
const userId = userInfoHtml.match(/forward\((\d+)/)[1] | |
addButtons(userId, weiboId) | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment