B 站直播预约抽奖协议—Python

一、抓包

1.1 直播预约包

直播预约链接

POST 请求  https://api.bilibili.com/x/dynamic/feed/reserve/click?csrf=46378a87cb7283a133e9c32b9c09bee7

原始表单数据 {“reserve_id”:4073369,”cur_btn_status”:1,”dynamic_id_str”:”976127207527153680″,”reserve_total”:25439,”spmid”:””}

{
“cur_btn_status”: 1,
“dynamic_id_str”:”976127207527153680″,
“reserve_id”: 4073369,
“reserve_total”: 25439,
“spmid”: “”
}

cur_btn_status——1:预约  2:取消预约

dynamic_id_str——直播预约的链接后面的 id

reserve_id——直播间 id

reserve_total——已预约人数

响应结果示例

 

 1.2 直播 reserve_id、reserve_total 获取包

只需要 GET 直播预约的链接即可在响应中找到

本文使用的是 https://www.bilibili.com/opus/976127207527153680

 

 

响应中还有直播的时间,标题

reserve_total——reserve_total

rid——reserve_id

二、批量获取动态抽奖的思路

 

三、Python 代码实现

2.1reserve_id、reserve_total 获取

 

def get_bilibili_opus(cookie,articalid):L
    url = 'https://www.bilibili.com/opus/{articalid}'
    headers = {
        'Host': 'www.bilibili.com',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
        'Accept-Encoding': 'gzip, deflate, br',
        'Referer': 'https://www.bilibili.com/',
        'Connection': 'keep-alive',
        'Cookie': cookie  # cookie
    }
    response = requests.get(url, headers=headers)
    if response.status_code == 200:
        return response.text  # 返回HTML内容
    else:
        return "获取失败"

 

2.2 直播预约

 

def post_url(uid, url, data=None, headers=None, cookie_string=None):
    try:
        if cookie_string:
            headers['Cookie'] = cookie_string
        session = requests.Session()
        response = session.post(url, data=data, headers=headers)
        print(f'状态码: {response.status_code}')
        if response.status_code == 200:
            try:
                if 'gzip' in response.headers.get('Content-Encoding', ''):
                    response_data = gzip.decompress(response.content).decode('utf-8')
                else:
                    response_data = response.text
                print("参与成功")
                try:
                    json_data = json.loads(response_data)
                    print("响应数据:", json_data)
                except json.JSONDecodeError:
                    pass
            except Exception as e:
                print("处理响应数据时出错:", e)
        else:
            print(f'请求失败,状态码:{response.status_code}')
            print("响应内容:", response.text)
    except Exception as e:
        print("请求过程中发生错误:", e)
 
data = {
    "card_type": "reserve",
    "reserve_id": result['rid'],
    "dynamic_id_str": article_id,
    "cur_btn_status": 1,
    "reserve_total": result['reserve_total']
}
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0',
    'Accept': 'application/json, text/plain, */*',
    'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    'Accept-Encoding': 'gzip, deflate, br, zstd',
    'Content-Type': 'application/json',
    'Referer': 'https://www.bilibili.com/',
    'Origin': 'https://www.bilibili.com',
    'Connection': 'keep-alive',
}
post_url(uid, f'https://api.bilibili.com//x/dynamic/feed/reserve/click?csrf={bili_jct}',
         json.dumps(data), headers, cookie_string)
获取资源前请仔细阅读一下声明:

重要提示

如有解压密码: 看下载页、看下载页、看下载页。
源码工具资源类具有可复制性: 建议具有一定思考和动手能力的用户购买。
请谨慎考虑: 小白用户和缺乏思考动手能力者不建议赞助。
虚拟商品购买须知: 虚拟类商品,一经打赏赞助,不支持退款。请谅解,谢谢合作!
声明: 本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。