天天看點

關于如何搶到半佛仙人的支付寶紅包方法?✔0x01 前言0x02 具體分析0x03 代碼部分

0x01 前言

每次打開b站發現半佛老師發的神秘代碼都早已被搶完,于是氣不過,看了一下半佛老師以往發的動态,尋求規律。emmmm,我看用腳本去擷取神秘代碼應該可行。

是以接着看下面具體分析。

0x02 具體分析

每次看到半佛老師發送的神秘代碼都是這樣的格式:【這段文本表示神秘代碼的音譯】

是以,我們首要的問題就是如何擷取這個神秘代碼呢?

我通過簡單的抓包,搜尋關鍵詞:代碼,找到疑似B站的Api。

關于如何搶到半佛仙人的支付寶紅包方法?✔0x01 前言0x02 具體分析0x03 代碼部分

輕按兩下打開這個連結,如下圖,找到神秘代碼的位置

關于如何搶到半佛仙人的支付寶紅包方法?✔0x01 前言0x02 具體分析0x03 代碼部分

确定該接口為擷取Bilibili動态消息的Api無誤。

于是,這個接口為:

https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/space_history?host_uid=半佛仙人的UID&offset_dynamic_id=0&need_top=1

(中間的半佛仙人的UID可以替換成任意B站賬号的UID)

以上接口都有了,傳回的資料格式是json。

那麼最後的問題就是,如何把半佛老師的發的神秘代碼轉換為數字呢?

畢竟大家都是從老婆手裡拿零花錢的人(🐶)

是以一頓操作猛如虎,結果非常amazing啊,找到了一個現成庫

pypinyin

(其實就是面向搜尋引擎程式設計,霧)

是以最後胡亂操作一下,就有了以下代碼。

0x03 代碼部分

import requests
import re,json
from pypinyin import lazy_pinyin, Style
# Needs Module: requests , pypinyin
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
    'Accept-Encoding':'utf-8'
}
# Author:ITJoker
# Blog:https://blog.itjoker.cn
# Time:2020/06/26 00點37分
dict_ = {}
dict_['lin'] = '0'
dict_['ling'] = '0'
dict_['don'] = '0'
dict_['dong'] = '0'
dict_['nin'] = '1'
dict_['ning'] = '1'
dict_['yi'] = '1'
dict_['yao'] = '1'
dict_['ai'] = '2'
dict_['er'] = '2'
dict_['san'] = '3'
dict_['sang'] = '3'
dict_['shan'] = '3'
dict_['shang'] = '3'
dict_['si'] = '4'
dict_['shi'] = '4'
dict_['wu'] = '5'
dict_['liu'] = '6'
dict_['qi'] = '7'
dict_['ba'] = '8'
dict_['fa'] = '8'
dict_['jiu'] = '9'
dict_['qiu'] = '9'

def removeNum(data):
    pattern = r'[a-zA-Z]'
    return ''.join(re.findall(pattern,data))

def getPinyin(data):
    style  =  Style.TONE3
    return lazy_pinyin(data,style=style)

def pinyinToNum(data):
    pinyin_ =getPinyin(data)
    result = ''
    for item in pinyin_:
        if removeNum(item) in dict_:
            result += dict_[removeNum(item)]
    if len(result) == 8:
        return (u'結果:{0}'.format(result))
    else:
        print(u'根據情況請添加相應的字典')
        return (u'中文:{0}\n結果:{1}'.format(data,result))

def getDynamic(host_uid):
    url = 'https://api.vc.bilibili.com/dynamic_svr/v1/dynamic_svr/space_history?host_uid={0}&offset_dynamic_id=0&need_top=1'.format(host_uid)
    return requests.get(url,headers=headers).json()

def getLotteryCode(data):
    pattern = r'【(.*?)】'
    return ''.join(re.findall(pattern,data))

uid = 37663924 #半佛仙人B站Uid
lottery_code_raw = ''
if __name__ == "__main__":
    raw_data = getDynamic(uid)
    response = json.loads(raw_data['data']['cards'][0]['card'])['item']
    if response['uid'] == uid:
        lottery_code_raw = getLotteryCode(response['content'].replace('\r',''))
        if lottery_code_raw != '':
            count = 0 
            lottery_Code_list = list(filter(None, lottery_code_raw.split(' '))) 
            for lottery_code in lottery_Code_list:
                print(u'第{0}個\n{1}'.format(count+1,pinyinToNum(lottery_code)))
                count += 1           

複制