欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)B站UP主自動(dòng)監(jiān)控功能詳解

 更新時(shí)間:2022年03月10日 09:39:26   作者:Charles的皮卡丘  
眾所周知,B站有很多有趣的UP主,可以教大家一些"實(shí)用"的知識(shí),但是他們一般都沒有固定的更新時(shí)間。因此,本文將用Python編寫一個(gè)腳本,自動(dòng)監(jiān)控UP是否更新了視頻,感興趣的可以了解一下

眾所周知,B站有很多有趣的UP主,可以教大家一些"實(shí)用"的知識(shí):

但是他們一般都沒有固定的更新時(shí)間,那么如何才能第一時(shí)間知道自己又有新的飯點(diǎn)可以看的下飯素材呢?當(dāng)然是用python來(lái)寫個(gè)腳本自動(dòng)監(jiān)控UP是否更新了視頻,并自動(dòng)下載啦~

廢話不多說(shuō),讓我們愉快地開始吧~

開發(fā)工具

Python版本:3.7.8

相關(guān)模塊:

DecryptLogin模塊;

videofetch模塊;

以及一些python自帶的模塊。

環(huán)境搭建

安裝Python并添加到環(huán)境變量,pip安裝需要的相關(guān)模塊即可。

原理簡(jiǎn)介

1.確定小目標(biāo)

首先,確定一下我們想實(shí)現(xiàn)的腳本的功能:給定一些UP主的ID,我們自動(dòng)關(guān)注這些UP主,并開始監(jiān)控這些UP主是否有更新視頻,如果有則微信進(jìn)行通知并自動(dòng)下載這些視頻。

2.模擬登錄

既然要實(shí)現(xiàn)自動(dòng)關(guān)注功能當(dāng)然還是要先實(shí)現(xiàn)B站的模擬登錄啦,這里我們還是借助公眾號(hào)之前開源的DecryptLogin包,先安裝一下:

# 請(qǐng)確保自己使用的是最新版本的DecryptLogin
pip install DecryptLogin --upgrade

然后簡(jiǎn)單寫幾行代碼就ok啦:

from DecryptLogin import login

lg = login.Login()
infos_return, session = lg.bilibili(mode='scanqr')

3.自動(dòng)關(guān)注

我們先來(lái)抓包看看關(guān)注UP主時(shí)需要請(qǐng)求的接口吧,簡(jiǎn)單調(diào)試之后發(fā)現(xiàn)以下這個(gè)鏈接不管從名字還有從需要攜帶的參數(shù)看都很可疑:

于是,我們可以先寫個(gè)腳本測(cè)試一下我們的想法,可以看到請(qǐng)求這個(gè)接口需要攜帶的參數(shù)如下:

經(jīng)過(guò)測(cè)試,必須要攜帶的參數(shù)是這些:

fid: 想要關(guān)注的UP主的ID;

act: 固定值, 為1;

re_src: 固定值, 為11;

jsonp: 固定值, 為jsonp;

csrf: 從登錄的cookies中可以拿到。

代碼實(shí)現(xiàn)如下:

'''關(guān)注某個(gè)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', '')

測(cè)試之后登錄客戶端看發(fā)現(xiàn)確實(shí)可以成功關(guān)注對(duì)應(yīng)的UP主,于是這部分內(nèi)容也順利地完成啦~

4.實(shí)時(shí)監(jiān)控

實(shí)時(shí)監(jiān)控其實(shí)也很簡(jiǎn)單,只需要先把目標(biāo)UP主當(dāng)前首頁(yè)的作品信息獲取到,然后每隔一段時(shí)間對(duì)比一次,看看有沒有新的作品出現(xiàn)就行啦。

具體而言,我們需要先獲取到UP主當(dāng)前首頁(yè)的作品信息:

'''獲得UP主首頁(yè)所有視頻信息'''
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

然后每隔一段時(shí)間對(duì)比一下就行:

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)

最后把對(duì)比結(jié)果打印出來(lái),有更新則進(jìn)行微信消息推送即可

for up_id in self.up_ids:
    if len(ups_recorder[up_id]['updated_vids']) > 0:
        msg = f'你關(guān)注的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'你關(guān)注的UP主{ups_recorder[up_id]["username"]}暫時(shí)沒有更新...'
        self.logging(msg)

大功告成啦,完整源代碼詳見相關(guān)文件~

效果展示

運(yùn)行方式如下:

usage: bilibiliupmonitor.py [-h] [--ids IDS] [--key KEY]

B站UP主監(jiān)控

optional arguments:
  -h, --help  show this help message and exit
  --ids IDS   監(jiān)控的UP主ID, 例如"406756145,406756146"
  --key KEY   Server醬的Key

例如:

python bilibiliupmonitor.py -ids 406756145

效果如下:視頻鏈接

到此這篇關(guān)于Python實(shí)現(xiàn)B站UP主自動(dòng)監(jiān)控功能詳解的文章就介紹到這了,更多相關(guān)PythonB站監(jiān)控內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論