Python实现B站UP主自动监控功能详解
众所周知,B站有很多有趣的UP主,可以教大家一些"实用"的知识:
但是他们一般都没有固定的更新时间,那么如何才能第一时间知道自己又有新的饭点可以看的下饭素材呢?当然是用python来写个脚本自动监控UP是否更新了视频,并自动下载啦~
废话不多说,让我们愉快地开始吧~
开发工具
Python版本:3.7.8
相关模块:
DecryptLogin模块;
videofetch模块;
以及一些python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
原理简介
1.确定小目标
首先,确定一下我们想实现的脚本的功能:给定一些UP主的ID,我们自动关注这些UP主,并开始监控这些UP主是否有更新视频,如果有则微信进行通知并自动下载这些视频。
2.模拟登录
既然要实现自动关注功能当然还是要先实现B站的模拟登录啦,这里我们还是借助公众号之前开源的DecryptLogin包,先安装一下:
# 请确保自己使用的是最新版本的DecryptLogin pip install DecryptLogin --upgrade
然后简单写几行代码就ok啦:
from DecryptLogin import login lg = login.Login() infos_return, session = lg.bilibili(mode='scanqr')
3.自动关注
我们先来抓包看看关注UP主时需要请求的接口吧,简单调试之后发现以下这个链接不管从名字还有从需要携带的参数看都很可疑:
于是,我们可以先写个脚本测试一下我们的想法,可以看到请求这个接口需要携带的参数如下:
经过测试,必须要携带的参数是这些:
fid: 想要关注的UP主的ID;
act: 固定值, 为1;
re_src: 固定值, 为11;
jsonp: 固定值, 为jsonp;
csrf: 从登录的cookies中可以拿到。
代码实现如下:
'''关注某个UP主''' def follow(self, up_id): url = 'https://api.bilibili.com/x/relation/modify' data = { 'fid': up_id, 'act': 1, 're_src': 11, 'jsonp': 'jsonp', 'csrf': self.session.cookies.get_dict(domain='.bilibili.com').get('bili_jct', ''), } headers = { 'Host': 'api.bilibili.com', 'Origin': 'https://space.bilibili.com', 'Referer': f'https://space.bilibili.com/{up_id}/', } response = self.session.post(url, data=data, headers=headers) response_json = response.json() return response_json['code'], response_json.get('message', '')
测试之后登录客户端看发现确实可以成功关注对应的UP主,于是这部分内容也顺利地完成啦~
4.实时监控
实时监控其实也很简单,只需要先把目标UP主当前首页的作品信息获取到,然后每隔一段时间对比一次,看看有没有新的作品出现就行啦。
具体而言,我们需要先获取到UP主当前首页的作品信息:
'''获得UP主首页所有视频信息''' def getupvids(self, up_id): up_vids, aids = [], [] headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'} params = {'keyword': '', 'mid': up_id, 'ps': 30, 'tid': 0, 'pn': 1, 'order': 'pubdate'} response = self.session.get('https://api.bilibili.com/x/space/arc/search', headers=headers, params=params) response_json = response.json() for item in response_json['data']['list']['vlist']: aids.append(item['aid']) for aid in aids: params = {'aid': aid} response = self.session.get('https://api.bilibili.com/x/web-interface/view', headers=headers, params=params) response_json = response.json() up_vids.append('https://www.bilibili.com/video/' + response_json['data']['bvid']) return up_vids
然后每隔一段时间对比一下就行:
for up_id in self.up_ids: self.logging(f'正在检查UP主{ups_recorder[up_id]["username"]}是否更新了视频...') vids = self.getupvids(up_id) ups_recorder[up_id]['updated_vids'] = [] for vid in vids: if vid in ups_recorder[up_id]['vids']: continue ups_recorder[up_id]['updated_vids'].append(vid) ups_recorder[up_id]['vids'].append(vid)
最后把对比结果打印出来,有更新则进行微信消息推送即可
for up_id in self.up_ids: if len(ups_recorder[up_id]['updated_vids']) > 0: msg = f'你关注的UP主{ups_recorder[up_id]["username"]}更新啦...' self.pushwechat(msg) self.logging(msg) for vid in ups_recorder[up_id]['updated_vids']: os.system(f'videodl -i {vid} -s {ups_recorder[up_id]["username"]}') else: msg = f'你关注的UP主{ups_recorder[up_id]["username"]}暂时没有更新...' self.logging(msg)
大功告成啦,完整源代码详见相关文件~
效果展示
运行方式如下:
usage: bilibiliupmonitor.py [-h] [--ids IDS] [--key KEY] B站UP主监控 optional arguments: -h, --help show this help message and exit --ids IDS 监控的UP主ID, 例如"406756145,406756146" --key KEY Server酱的Key
例如:
python bilibiliupmonitor.py -ids 406756145
效果如下:视频链接
到此这篇关于Python实现B站UP主自动监控功能详解的文章就介绍到这了,更多相关PythonB站监控内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
django 将自带的数据库sqlite3改成mysql实例
这篇文章主要介绍了django 将自带的数据库sqlite3改成mysql实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-07-07Python新手学习过程记录之基础环境:环境变量、版本区分、虚拟环境
刚开始接触Python开发语言,可能就会遇到一些棘手的问题,比如电脑上不知不觉已经安装了多个python版本,python3.8/3.10/3.11,甚至一些软件中也集成有python解释器;那么我编写的python代码,到底是使用哪个解释器在执行?我通过pip包管理工具安装的依赖包到底在那个地方2024-05-05Python中使用matplotlib绘制mqtt数据实时图像功能
这篇文章主要介绍了Python中使用matplotlib绘制mqtt数据实时图像,本代码中publish是一个死循环,数据一直往外发送,详细代码跟随小编一起通过本文学习下吧2021-09-09python库pycryptodom加密技术探索(公钥加密私钥加密)
这篇文章主要为大家介绍了python库pycryptodom加密技术探索(公钥加密私钥加密),有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2024-01-01
最新评论