最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python進行新浪微博的mid和url互相轉換實例(10進制和62進制互算)

 更新時間:2014年04月25日 10:19:17   作者:  
我們在使用新浪微博API時,有時需要得到一個微博的url,但是如statuses/public_timeline等接口中取得的微博status的字段中并沒有包含

不過,status中包含了一個mid字段,通過mid,我們實際上是可以通過計算得到url的。

在開始計算之前有必要說明一下,什么是base62編碼。它實際上就是十進制和62位進制的互換。對于62進制,從0數到9以后,10用小寫字母a表示,接著數完26個字母,到z為35,然后36為大寫字母A,一直到61為大寫字母Z。所以,我們可以實現(xiàn)十進制數字base62編碼的encode和decode。下面的代碼實際上來自stackoverflow:

復制代碼 代碼如下:

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

下面先說url到mid的轉換。對于一個新浪微博url,它是形如:http://weibo.com/2991905905/z579Hz9Wr,中間的數字是用戶的uid,重要的是后面的字符串“z579Hz9Wr”。它的計算其實也很簡單,從后向前四個字符一組,就得到:

復制代碼 代碼如下:

z
579H
z9Wr

將每個字符串用base62編碼來decode,就可以得到它們的十進制數字分別為:

復制代碼 代碼如下:

35
1219149
8379699

將它們拼起來就可以得到mid為:“3512191498379699”。這里要強調的是:對于除了開頭的字符串,如果得到的十進制數字不足7位,需要在前面補足0。比如得到的十進制數分別為:35,33040,8906190,則需要在33040前面添上兩個0。
代碼如下:

復制代碼 代碼如下:

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_to_mid('yCtxn8IXR')
    3491700092079471L
    >>> url_to_mid('yAt1n2xRa')
    3486913690606804L
    '''
    url = str(url)[::-1]
    size = len(url) / 4 if len(url) % 4 == 0 else len(url) / 4 + 1
    result = []
    for i in range(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))

mid轉為url也就很簡單了,對于一個mid,我們從后向前每7位一組,用base62編碼來encode,拼起來即可。同樣要注意的是,每7個一組的數字,除了開頭一組,如果得到的62進制數字不足4位,需要補足0。

復制代碼 代碼如下:

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'
    >>> mid_to_url(3491700092079471)
    'yCtxn8IXR'
    >>> mid_to_url(3486913690606804)
    'yAt1n2xRa'
    '''
    midint = str(midint)[::-1]
    size = len(midint) / 7 if len(midint) % 7 == 0 else len(midint) / 7 + 1
    result = []
    for i in range(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)

運行doctest可以看到所有的測試用例都通過了。

最后其實我不太明白為什么新浪微博不直接把url包含在字段中,而新浪微博的開放平臺也有很多不符合標準的地方,其實本文的內容并沒有什么技術含量,不過就是讓開發(fā)人員折騰一下。還有比如refresh token的問題等等,這里就不一一枚舉了。

相關文章

  • Django框架驗證碼用法實例分析

    Django框架驗證碼用法實例分析

    這篇文章主要介紹了Django框架驗證碼用法,結合實例形式分析了Python Django框架驗證碼的功能、實現(xiàn)方法及相關操作技巧,需要的朋友可以參考下
    2019-05-05
  • numpy中的高維數組轉置實例

    numpy中的高維數組轉置實例

    下面小編就為大家分享一篇numpy中的高維數組轉置實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 淺談用VSCode寫python的正確姿勢

    淺談用VSCode寫python的正確姿勢

    本篇文章主要介紹了淺談用VSCode寫python的正確姿勢,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • python經典百題之static定義靜態(tài)變量的三種方法

    python經典百題之static定義靜態(tài)變量的三種方法

    日常腳本編寫過程中時常會用到python的靜態(tài)方法、實例方法、類方法,下面這篇文章主要給大家介紹了關于python經典百題之static定義靜態(tài)變量的三種方法,需要的朋友可以參考下
    2024-09-09
  • 采用python實現(xiàn)簡單QQ單用戶機器人的方法

    采用python實現(xiàn)簡單QQ單用戶機器人的方法

    這篇文章主要介紹了采用python實現(xiàn)簡單QQ單用戶機器人的方法,需要的朋友可以參考下
    2014-07-07
  • 淺析Python中的元編程

    淺析Python中的元編程

    Python元編程是指在運行時對Python代碼進行操作的技術,它可以動態(tài)地生成、修改和執(zhí)行代碼,從而實現(xiàn)一些高級的編程技巧,本文就來和大家詳細聊聊吧
    2023-03-03
  • 詳解python中*號的用法

    詳解python中*號的用法

    這篇文章主要介紹了python中*號的用法,文中通過代碼給大家介紹了雙星號(**)的用法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • 詳解Python讀取和寫入操作CSV文件的方法

    詳解Python讀取和寫入操作CSV文件的方法

    CSV 文件(逗號分隔值文件)是一種純文本文件,它使用特定的結構來排列表格數據。本文將詳細介紹Python中讀取個寫入操作CSV文件的方法,需要的可以參考一下
    2022-03-03
  • Python二進制文件轉換為文本文件的代碼實現(xiàn)

    Python二進制文件轉換為文本文件的代碼實現(xiàn)

    在日常編程中,我們經常會遇到需要將二進制文件轉換為文本文件的情況,在Python中,我們可以利用各種庫和技術來完成這項任務,本文將介紹如何使用Python將二進制文件轉換為文本文件,并提供實用的代碼示例,需要的朋友可以參考下
    2024-04-04
  • Python Print實現(xiàn)在輸出中插入變量的例子

    Python Print實現(xiàn)在輸出中插入變量的例子

    今天小編就為大家分享一篇Python Print實現(xiàn)在輸出中插入變量的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評論

中江县| 蚌埠市| 阿鲁科尔沁旗| 阜南县| 沈丘县| 册亨县| 壤塘县| 纳雍县| 新蔡县| 开封市| 吴江市| 肥乡县| 子长县| 商丘市| 尚志市| 花莲市| 镇原县| 郸城县| 双辽市| 雷山县| 宣城市| 吉木萨尔县| 威宁| 昌都县| 吉水县| 达尔| 永安市| 乌兰县| 平顶山市| 集贤县| 息烽县| 宁海县| 双牌县| 克拉玛依市| 鹤壁市| 达孜县| 兴仁县| 定结县| 兰州市| 哈密市| 谢通门县|