文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python实现B站UP主自动监控功能详解

2024-04-02 19:55

关注

众所周知,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站监控内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯