Skip to content

Instantly share code, notes, and snippets.

@Jermic
Last active July 2, 2021 05:20
Show Gist options
  • Save Jermic/16f8a129b0b30311ab4584b610351613 to your computer and use it in GitHub Desktop.
Save Jermic/16f8a129b0b30311ab4584b610351613 to your computer and use it in GitHub Desktop.
微博 url 与 mid 互转工具
"""
: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