Last active
July 2, 2021 05:20
-
-
Save Jermic/16f8a129b0b30311ab4584b610351613 to your computer and use it in GitHub Desktop.
微博 url 与 mid 互转工具
This file contains hidden or 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
""" | |
:author Jermic | |
:date 2019-02-13 | |
:weibo https://weibo.com/Jermic/ | |
""" | |
ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" | |
def base62_encode(num, alphabet=ALPHABET): | |
num = int(num) | |
if num == 0: | |
return alphabet[0] | |
arr = [] | |
base = len(alphabet) | |
while num: | |
rem = num % base | |
num = num // base | |
arr.append(alphabet[rem]) | |
arr.reverse() | |
return ''.join(arr) | |
def base62_decode(string, alphabet=ALPHABET): | |
string = str(string) | |
num = 0 | |
idx = 0 | |
for char in string: | |
power = (len(string) - (idx + 1)) | |
num += alphabet.index(char) * (len(alphabet) ** power) | |
idx += 1 | |
return num | |
def reverse_cut_to_length(content, code_func, cut_num=4, fill_num=7): | |
content = str(content) | |
cut_list = [content[i - cut_num if i >= cut_num else 0:i] for i in range(len(content), 0, (-1 * cut_num))] | |
cut_list.reverse() | |
result = [] | |
for i, item in enumerate(cut_list): | |
s = str(code_func(item)) | |
if i > 0 and len(s) < fill_num: | |
s = (fill_num - len(s)) * '0' + s | |
result.append(s) | |
return ''.join(result) | |
def url_to_mid(url: str): | |
""" | |
>>> url_to_mid('z0JH2lOMb') | |
3501756485200075 | |
>>> url_to_mid('z0IgABdSn') | |
3501701648871479 | |
>>> url_to_mid('z08AUBmUe') | |
3500330408906190 | |
>>> url_to_mid('z06qL6b28') | |
3500247231472384 | |
>>> url_to_mid('yAt1n2xRa') | |
3486913690606804 | |
""" | |
result = reverse_cut_to_length(url, base62_decode, 4, 7) | |
return int(result) | |
def mid_to_url(mid_int: int): | |
""" | |
>>> mid_to_url(3501756485200075) | |
'z0JH2lOMb' | |
>>> mid_to_url(3501701648871479) | |
'z0IgABdSn' | |
>>> mid_to_url(3500330408906190) | |
'z08AUBmUe' | |
>>> mid_to_url(3500247231472384) | |
'z06qL6b28' | |
>>> mid_to_url(3486913690606804) | |
'yAt1n2xRa' | |
""" | |
result = reverse_cut_to_length(mid_int, base62_encode, 7, 4) | |
return result | |
if __name__ == "__main__": | |
print(url_to_mid('Hd1N2qpta')) | |
print(mid_to_url(4331051486294436)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment