B站协议批量删除动态实现
b站登录协议请看点方蓝色字体
b站扫码登录协议
文章结尾附Python代码
一、抓包
1.1删除动态包
POST请求 https://api.bilibili.com/x/dynamic/feed/operate/remove?platform=web&csrf=3bdb2bda73e3d6f75ea991167fb39389
请求表单数据{"dyn_id_str":"967767049365356551","dyn_type":1,"rid_str":"967767049365356551"}
csrf——从登录Cookie中获取
dyn_id_str、rid_str——动态id
dyn_type——1:删除
响应结果
b站协议所有出现这样的响应都表示成功
1.2动态协议获取包
GET请求 https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?offset=&host_mid=484733984&timezone_offset=-480&platform=web&features=itemOpusStyle,listOnlyfans,opusBigCover,onlyfansVote,decorationCard,forwardListHidden,ugcDelete,onlyfansQaCard&web_location=333.999&dm_img_list=[{"x":3837,"y":2839,"z":0,"timestamp":1813,"k":110,"type":0},{"x":3053,"y":1798,"z":10,"timestamp":1915,"k":70,"type":0},{"x":2601,"y":1627,"z":49,"timestamp":2015,"k":102,"type":0},{"x":2645,"y":1677,"z":98,"timestamp":2120,"k":109,"type":0},{"x":2434,"y":1419,"z":5,"timestamp":2235,"k":109,"type":0},{"x":2809,"y":1817,"z":472,"timestamp":2338,"k":94,"type":0},{"x":2862,"y":1896,"z":654,"timestamp":2437,"k":97,"type":0},{"x":2365,"y":1365,"z":328,"timestamp":2539,"k":97,"type":0},{"x":2300,"y":1293,"z":284,"timestamp":2639,"k":112,"type":0},{"x":2543,"y":1543,"z":529,"timestamp":2827,"k":87,"type":0},{"x":2392,"y":1402,"z":371,"timestamp":2930,"k":66,"type":0},{"x":2087,"y":1147,"z":77,"timestamp":3033,"k":94,"type":0},{"x":3211,"y":2320,"z":1215,"timestamp":3136,"k":109,"type":0},{"x":2081,"y":1123,"z":1252,"timestamp":3866,"k":65,"type":0},{"x":970,"y":14,"z":365,"timestamp":3966,"k":119,"type":0},{"x":739,"y":-218,"z":137,"timestamp":4069,"k":103,"type":0},{"x":2107,"y":1149,"z":1485,"timestamp":4168,"k":71,"type":0},{"x":2200,"y":1152,"z":1503,"timestamp":4271,"k":88,"type":0},{"x":2564,"y":917,"z":1617,"timestamp":4372,"k":118,"type":0},{"x":2976,"y":1168,"z":1983,"timestamp":4474,"k":63,"type":0},{"x":2546,"y":692,"z":1553,"timestamp":4576,"k":63,"type":0},{"x":2798,"y":943,"z":1808,"timestamp":4677,"k":94,"type":0},{"x":1185,"y":-670,"z":195,"timestamp":4779,"k":60,"type":1},{"x":3068,"y":1214,"z":2075,"timestamp":4957,"k":83,"type":0},{"x":2085,"y":264,"z":809,"timestamp":5060,"k":122,"type":0},{"x":4167,"y":2963,"z":189,"timestamp":5161,"k":71,"type":0},{"x":4430,"y":3261,"z":347,"timestamp":5263,"k":126,"type":0}]&dm_img_str=V2ViR0wgMS&dm_cover_img_str=QU5HTEUgKE5WSURJQSwgTlZJRElBIEdlRm9yY2UgODgwMCBHVFggRGlyZWN0M0QxMSB2c181XzAgcHNfNV8wKSwgb3Igc2ltaWxhckdvb2dsZSBJbmMuIChOVklESU&dm_img_inter={"ds":[{"t":0,"c":"","p":[333,111,111],"s":[166,4830,2444]}],"wh":[3685,4015,55],"of":[357,714,357]}&x-bili-device-req-json={"platform":"web","device":"pc"}&x-bili-web-req-json={"spm_id":"333.999"}&w_rid=7661ecebb3082069024a0b5211a8d40b&wts=1727231810
dm_img_list
dm_img_str
dm_cover_img_str
dm_img_inter
w_rid
wts
涉及到的算法较多,请看本专栏的B站协议各参数算法加密文章
响应结果
id_str—— 删除动态所需要的id
二、Python实现
2.1动态id
def get_act_data(cookie, dm_img_list, dm_img_str, dm_cover_img_str, dm_img_inter, w_rid, wts):
url = "https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space"
# 构造请求参数
params = {
"offset": "",
"host_mid": "484733984",
"timezone_offset": "-480",
"platform": "web",
"features": "itemOpusStyle,listOnlyfans,opusBigCover,onlyfansVote,decorationCard,forwardListHidden,ugcDelete,onlyfansQaCard",
"web_location": "333.999",
"dm_img_list": dm_img_list,
"dm_img_str": dm_img_str,
"dm_cover_img_str": dm_cover_img_str,
"dm_img_inter": dm_img_inter,
"x-bili-device-req-json": '{"platform":"web","device":"pc"}',
"x-bili-web-req-json": '{"spm_id":"333.999"}',
"w_rid": w_rid,
"wts": wts
}
# 构造请求头,cookie
headers = {
"Cookie": cookie
}
# 发送GET请求
response = requests.get(url, params=params, headers=headers)
if response.status_code == 200:
return response.json()
else:
return '获取失败'
2.2删除动态
def remove(cookie, csrf, dyn_id_str, rid_str):
url = "https://api.bilibili.com/x/dynamic/feed/operate/remove"
# 请求参数
params = {
"platform": "web",
"csrf": csrf
}
# 表单数据
data = {
"dyn_id_str": dyn_id_str,
"dyn_type": 1,
"rid_str": rid_str
}
# 请求头,cookie
headers = {
"Cookie": cookie,
"Content-Type": "application/x-www-form-urlencoded"
}
# 发送POST请求
response = requests.post(url, params=params, data=data, headers=headers)
if response.status_code == 200:
return response.json()
else:
return "删除失败"