Skip to content

Instantly share code, notes, and snippets.

@wangcheng
Last active November 6, 2020 17:03
Show Gist options
  • Save wangcheng/3663599e3766571d255e33e1175517e6 to your computer and use it in GitHub Desktop.
Save wangcheng/3663599e3766571d255e33e1175517e6 to your computer and use it in GitHub Desktop.
微博国际版链接切换到微博移动版或者桌面版
// ==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