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

看到这里了,网络乞丐在线乞讨,给点赞助呗?~