0x01 前言
每次打開b站發現半佛老師發的神秘代碼都早已被搶完,于是氣不過,看了一下半佛老師以往發的動态,尋求規律。emmmm,我看用腳本去擷取神秘代碼應該可行。
是以接着看下面具體分析。
0x02 具體分析
每次看到半佛老師發送的神秘代碼都是這樣的格式:【這段文本表示神秘代碼的音譯】
是以,我們首要的問題就是如何擷取這個神秘代碼呢?
我通過簡單的抓包,搜尋關鍵詞:代碼,找到疑似B站的Api。
輕按兩下打開這個連結,如下圖,找到神秘代碼的位置
确定該接口為擷取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
複制