基于Python编写⼀个B站全⾃动抽奖的⼩程序
⽬录
导语
开发⼯具
环境搭建
原理简介
导语
应好友邀请,帮他写了个⼩程序,功能类似于实时监控⾃⼰关注的UP主,如果关注的UP主中有⼈发布了抽奖的动态,就⾃动参与这个抽奖。这样就能不错过任何⼀个可以暴富的机会了。写完之后感觉这个想法还是挺有意思的,于是上来分享⼀波。
废话不多说,让我们愉快地开始吧~
开发⼯具
Python版本:3.7.8
相关模块:
DecryptLogin模块;
以及⼀些python⾃带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
原理简介
我们主要⽤到的⼯具是前⼏天刚发布的DecryptLogin包
⾸先,我们需要⽤它来模拟登录B站,具体⽽⾔,需要先pip安装⼀下:
pip install DecryptLogin
然后利⽤Client类来实现模拟登录,该类可以保存当前的登录会话,在该会话没过期之前再次运⾏程序是不需要重复发送登录请求的,可以避免因为频繁登
录账号⽽触发⽹站的风控机制:
from DecryptLogin import login
client = login.Client()
bili = client.bilibili(reload_history=True)
infos_return, session = bili.login(self.username, ': Charles的⽪卡丘', 'scanqr')
接着,我们来抓包看看抓取⾃⼰的关注列表要请求哪个API吧,具体⽽⾔,如下图所⽰:
代码简单实现如下:
'''获得关注列表'''
def getfollowings(self, session, infos_return):
url = 'api.bilibili/x/relation/followings'
params = {
'vmid': infos_return['data']['mid'],
'pn': '1',
'ps': '20',
'order': 'desc',
'order_type': 'attention',
'jsonp': 'jsonp',
}
response = (url, params=params, headers=self.headers)
total = response.json()['data']['total']
followings_ids, page = [], 1
while True:
for item in response.json()['data']['list']:
followings_ids.append(item['mid'])
if len(followings_ids) >= total: break
page += 1
params['pn'] = str(page)
response = (url, params=params, headers=self.headers)
return followings_ids
类似地,我们可以获得我们关注的UP主的当前所有动态的接⼝如下:
'''获得UP主的动态'''
def getupdates(self, infos_return, host_uid, session):
url = f'api.vc.bilibili/dynamic_svr/v1/dynamic_svr/space_history?visitor_uid={infos_return[
"data"]["mid"]}&host_uid={host_uid}&offset_dynamic_id=0&need_top=1&platform=web' response = (url, headers=self.headers)
response_json, updates = response.json(), {}
for card in response_json['data']['cards']:
dynamic_id = card['desc']['dynamic_id']
desp = re.findall(r'"description":"(.*?)"', card['card'])[0]
updates[dynamic_id] = desp
return updates
转发动态的接⼝如下:
'''转发动态'''
def forwardupdate(self, session, infos_return, dynamic_id):
url = 'api.vc.bilibili/dynamic_repost/v1/dynamic_repost/repost'
data = {
'uid': infos_return['data']['mid'],
'dynamic_id': dynamic_id,
'content' : random.choice(selfments),
'ctrl': '[{"data":"5581898","location":2,"length":4,"type":1},{"data":"10462362","location":7,"length":5,"type":1},{"data":"1577804","location":13,"length":4,"type":1}]',
'csrf_token': ('bili_jct')
}
python新手代码useridresponse = session.post(url, data=data, headers=self.headers)
return response.json()
接下来要做的就是如何判断这个动态是不是抽奖动态了,这⾥我们设置利⽤关键词作为判断依据:
# 监控新的动态
self.logging('开始监控是否有新的抽奖信息发布')
while True:
time.sleep(self.time_interval)
self.logging('开始检测是否有新的抽奖信息发布')
for userid in tqdm(followings_ids):
updates_old = followings_infos.pop(userid)
updates_latest = updates(infos_return, userid, session)
for dynamic_id in updates_latest.keys():
if dynamic_id not in updates_old:
desp = updates_latest[dynamic_id]
if '#互动抽取#' in desp:
result = self.forwardupdate(session, infos_return, dynamic_id)
self.logging('检测到有新的抽奖信息发布, 已经尝试转发, 返回的结果为{result}')
followings_infos[userid] = updates_latest
即当动态中有#互动抽取#这四个字的时候,我们就认定这是⼀条抽奖⽤的动态,并对其进⾏转发。⾄此,我们的⼩程序就完成啦,它可以实时监控我们关注的UP主是否有发布新的抽奖信息,如果有,则第⼀时间参与这个抽奖。我们需要做的就是多关注⼀些经常发布抽奖信息的UP主就⾏了,接下来能不能暴富就看运⽓了。
最终代码的使⽤⽅式如下:
usage: bilibililottery.py [-h] [--username USERNAME]
[--time_interval TIME_INTERVAL]
B站监控关注的UP主并⾃动转发抽奖
optional arguments:
-h, --help show this help message and exit
--username USERNAME ⽤于存储历史cookies的唯⼀标识ID
--time_interval TIME_INTERVAL
查询UP主的动态的间隔时间
到此这篇关于基于Python编写⼀个B站全⾃动抽奖的⼩程序的⽂章就介绍到这了,更多相关Python⾃动抽奖内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论