-
-
Save wangcheng/3846f0774d01c98648858f0ad09e8470 to your computer and use it in GitHub Desktop.
新浪微博mid与url互转实用工具
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
/** | |
* 新浪微博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" | |
*/ | |
export 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" | |
*/ | |
export 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(""); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment