微博API汇总及 mid和url的转换算法

微博API 汇总

1. 搜索

  • m端

    [GET]

    https://m.weibo.cn/api/container/getIndex?containerid=100103type%3D1%26q%3D关键词&page_type=searchall&page=2

  • weibo.cn(简版)

    [POST]高级搜索(须登录)

    http://weibo.cn/search/mblog?

    keyword=关键词

    &advancedfilter=1(高级搜索)

    &starttime=20200201(开始日期)

    &endtime=20200210(结束日期)

    &sort=time或hot(实时or热门)

    &page=1

2.评论

  • m端

    [GET]

    https://m.weibo.cn/api/comments/show?

    id=4469270321071880(微博id(mid))

    &page=3

  • weibo.cn(简版)旧版网站采用的是url方式,并未采用mid

    [GET]

    https://weibo.cn/comment/IthYFj4xx (url, 可用mid转换计算得)

    ?page=2

附:mid-url转换函数

微博采用的是base62编码来进行mid映射

base62即 26个小写字母+26个大写字母+10个数字=62

可用python进行实现

ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
 
def base62_encode(num, alphabet=ALPHABET):
    """Encode a number in Base X
 
    `num`: The number to encode
    `alphabet`: The alphabet to use for encoding
    """
    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):
    """Decode a Base X encoded string into the number
 
    Arguments:
    - `string`: The encoded string
    - `alphabet`: The alphabet to use for encoding
    """
    base = len(alphabet)
    strlen = len(string)
    num = 0
 
    idx = 0
    for char in string:
        power = (strlen - (idx + 1))
        num += alphabet.index(char) * (base ** power)
        idx += 1
 
    return num

def mid_to_url(midint):

    # >>> mid_to_url(3501756485200075)
    # 'z0JH2lOMb'
    # >>> mid_to_url(3501703397689247)
    # 'z0Ijpwgk7'
    # >>> mid_to_url(3501701648871479)
    # 'z0IgABdSn'
    # >>> mid_to_url(3500330408906190)
    # 'z08AUBmUe'
    # >>> mid_to_url(3500247231472384)
    # 'z06qL6b28'
    
    midint = str(midint)[::-1]
    size = len(midint) / 7 if len(midint) % 7 == 0 else len(midint) / 7 + 1
    result = []

    for i in range(int(size)):
        s = midint[i * 7: (i + 1) * 7][::-1]
        s = base62_encode(int(s))
        s_len = len(s)
        if i < size - 1 and len(s) < 4:
            s = '0' * (4 - s_len) + s
        result.append(s)
    result.reverse()
    return ''.join(result)

def url_to_mid(url):

    # >> url_to_mid('z0JH2lOMb')
    # 3501756485200075L
    # >> url_to_mid('z0Ijpwgk7')
    # 3501703397689247L
    # >> url_to_mid('z0IgABdSn')
    # 3501701648871479L
    # >> url_to_mid('z08AUBmUe')
    # 3500330408906190L
    # >> url_to_mid('z06qL6b28')
    # 3500247231472384L

    url = str(url)[::-1]
    size = len(url) / 4 if len(url) % 4 == 0 else len(url) / 4 + 1
    result = []
    for i in range(int(size)):
        s = url[i * 4: (i + 1) * 4][::-1]
        s = str(base62_decode(str(s)))
        s_len = len(s)
        if i < size - 1 and s_len < 7:
            s = (7 - s_len) * '0' + s
        result.append(s)
    result.reverse()
    return int(''.join(result))

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值