Python项⽬2:弹幕复读机
1. 获取弹幕
(1)因为实时弹幕是通过Ajax从服务器获取的,我们打开右击页⾯选择检查,进⼊Network,经过⼀番寻后到了msg这个请求,查看其中的关键部分,请求url地址和表单部分,url在请求头中,表单部分类似下图:
其中,roomid是房间号,csrf_token是post请求的安全验证码,还有⼀个visit_id是空值,这些都要根据⾃⼰的实际情况填写。
(2)然后我们查看响应信息:
是⼀个json字符串,经过⽐对后可以知道最新的⼀条弹幕存储在res.json()[‘data’][‘room’][-1][‘text’]中(res是requests响应体)。
python新手代码userid(3)然后我们就可以根据这些数据,使⽤requests模块获取弹幕,代码如下
如果你对python感兴趣,我这有个学习Python基地,⾥⾯有很多学习资料,感兴趣的+Q:688244617
import requests
form_data ={
'roomid':'90713',
'csrf_token':'c93526e213231f715424af182dfb0411',
'visit_id':''
}
res = requests.post("api.live.bilibili/ajax/msg",data=form_data)
text = res.json()['data']['room'][-1]['text']
2. 发送弹幕
(1)为了到发送弹幕的接⼝,我们只需要⼿动发送⼀条,在Network中就⼀眼看到了:
这次需要关注的部分除了url和post表单外,还有⼀个cookie,这个键⽤来服务器识别我们的浏览器的,如果没有的话,即使发送到服务器弹幕也不会显⽰。
(2)弹幕是保存在表单中的msg键中发送给服务器的
(3)然后根据这些数据向第⼀步获取的url发送表单,代码如下:
form_data_send ={
'color':'16777215',
'fontsize':'25',
'mode':'1',
'msg':'要发送的弹幕',
'rnd':'1539592977',
'roomid':'90713',
'csrf_token':'c93526e213231f715424af182dfb0411'
}
cookie ={
'Cookie':'l=v; finger=edc6ecda; LIVE_BUVID=AUTO7915376845749539; CURRENT_FNVAL=8; sid=9xsee80j; DedeUserID=23126221; DedeUserID__ck Md5=e597ce186461e9d8; SESSDATA=27b96e94%2C1540276589%2C664ff578; bili_jct=c93526e213231f715424af182dfb0411; fts=1537684594; UM_dis tinctid=1660524dd947fc-05bc81e71e64fb-8383268-144000-1660524dd95107; im_notify_type_23126221=0; stardustvideo=1; buvid3=AE818E5D-B2C1-44 F2-8F09-989661B9F8846688infoc; rpdid=owkkqwkwmxdoskqiokoww; bp_t_offset_23126221=174970628267807201; CURRENT_QUALITY=64; _dfcaptch a=3d138714e8941fa5ecd47cea30ef1917; Hm_lvt_8a6e55dbd2870f0f5bc9194cddf32a02=1538406126,1539591329; Hm_lpvt_8a6e55dbd2870f0f5bc9194 cddf32a02=1539593348'
}
res = requests.post('api.live.bilibili/msg/send', cookies= cookie, data=form_data_send)
这其中⼤部分数据要以⾃⼰的实际修改(在⾃⼰的浏览器上复制)
3. 封装调⽤
(1)将获取弹幕封装成⼀个⽅法,返回弹幕⽂本;
(2)将发送弹幕也封装,接收⽅法1获取的弹幕⽂本为参数;
(3)去重,在弹幕未刷新时,阻⽌多次发送同⼀条弹幕。
所以最终代码如下:
import requests
form_data ={
'roomid':'90713',
'csrf_token':'c93526e213231f715424af182dfb0411',
'visit_id':''
}
def get_message():
res = requests.post("api.live.bilibili/ajax/msg",data=form_data)
text = res.json()['data']['room'][-1]['text']
return text
def send_message(msg):
form_data_send ={
'color':'16777215',
'fontsize':'25',
'mode':'1',
'msg': msg,
'rnd':'1539592977',
'roomid':'90713',
'csrf_token':'c93526e213231f715424af182dfb0411'
}
cookie ={
'Cookie':'l=v; finger=edc6ecda; LIVE_BUVID=AUTO7915376845749539; CURRENT_FNVAL=8; sid=9xsee80j; DedeUserID=23126221; DedeUserID__ ckMd5=e597ce186461e9d8; SESSDATA=27b96e94%2C1540276589%2C664ff578; bili_jct=c93526e213231f715424af182dfb0411; fts=1537684594; UM_ distinctid=1660524dd947fc-05bc81e71e64fb-8383268-144000-1660524dd95107; im_notify_type_23126221=0; stardustvideo=1; buvid3=AE818E5D-B2C1 -44F2-8F09-989661B9F8846688infoc; rpdid=owkkqwkwmxdoskqiokoww; bp_t_offset_23126221=174970628267807201; CURRENT_QUALITY=64; _dfca ptcha=3d138714e8941fa5ecd47cea30ef1917; Hm_lvt_8a6e55dbd2870f0f5bc9194cddf32a02=1538406126,1539591329; Hm_lpvt_8a6e55dbd2870f0f5bc 9194cddf32a02=1539593348'
}
res = requests.post('api.live.bilibili/msg/send', cookies= cookie, data=form_data_send)
s =''
while True:
msg = get_message()
if s == msg:
continue
else:
print('已发送弹幕:', msg)
send_message(msg)
s = msg
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论