最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python編寫一個(gè)B站全自動(dòng)抽獎(jiǎng)的小程序

 更新時(shí)間:2022年03月16日 09:52:01   作者:Charles的皮卡丘  
本文將利用Python編寫一個(gè)B站全自動(dòng)抽獎(jiǎng)的小程序,可以實(shí)時(shí)監(jiān)控自己關(guān)注的UP主,如果關(guān)注的UP主中有人發(fā)布了抽獎(jiǎng)的動(dòng)態(tài),就自動(dòng)參與這個(gè)抽獎(jiǎng)。這樣就能不錯(cuò)過(guò)任何一個(gè)可以暴富的機(jī)會(huì)了。需要的可以參考一下

導(dǎo)語(yǔ)

應(yīng)好友邀請(qǐng),幫他寫了個(gè)小程序,功能類似于實(shí)時(shí)監(jiān)控自己關(guān)注的UP主,如果關(guān)注的UP主中有人發(fā)布了抽獎(jiǎng)的動(dòng)態(tài),就自動(dòng)參與這個(gè)抽獎(jiǎng)。這樣就能不錯(cuò)過(guò)任何一個(gè)可以暴富的機(jī)會(huì)了。寫完之后感覺(jué)這個(gè)想法還是挺有意思的,于是上來(lái)分享一波。

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

開(kāi)發(fā)工具

Python版本:3.7.8

相關(guān)模塊:

DecryptLogin模塊;

以及一些python自帶的模塊。

環(huán)境搭建

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

原理簡(jiǎn)介

我們主要用到的工具是公眾號(hào)前幾天剛發(fā)布的DecryptLogin包

首先,我們需要用它來(lái)模擬登錄B站,具體而言,需要先pip安裝一下:

pip install DecryptLogin

然后利用Client類來(lái)實(shí)現(xiàn)模擬登錄,該類可以保存當(dāng)前的登錄會(huì)話,在該會(huì)話沒(méi)過(guò)期之前再次運(yùn)行程序是不需要重復(fù)發(fā)送登錄請(qǐng)求的,可以避免因?yàn)轭l繁登錄賬號(hào)而觸發(fā)網(wǎng)站的風(fēng)控機(jī)制:

from DecryptLogin import login

client = login.Client()
bili = client.bilibili(reload_history=True)
infos_return, session = bili.login(self.username, '微信公眾號(hào): Charles的皮卡丘', 'scanqr')

接著,我們來(lái)抓包看看抓取自己的關(guān)注列表要請(qǐng)求哪個(gè)API吧,具體而言,如下圖所示:

代碼簡(jiǎn)單實(shí)現(xiàn)如下:

'''獲得關(guān)注列表'''
def getfollowings(self, session, infos_return):
    url = 'https://api.bilibili.com/x/relation/followings'
    params = {
        'vmid': infos_return['data']['mid'],
        'pn': '1',
        'ps': '20',
        'order': 'desc',
        'order_type': 'attention',
        'jsonp': 'jsonp',
    }
    response = session.get(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 = session.get(url, params=params, headers=self.headers)
    return followings_ids

類似地,我們可以獲得我們關(guān)注的UP主的當(dāng)前所有動(dòng)態(tài)的接口如下:

'''獲得UP主的動(dòng)態(tài)'''
def getupdates(self, infos_return, host_uid, session):
    url = f'https://api.vc.bilibili.com/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 = session.get(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

轉(zhuǎn)發(fā)動(dòng)態(tài)的接口如下:

'''轉(zhuǎn)發(fā)動(dòng)態(tài)'''
def forwardupdate(self, session, infos_return, dynamic_id):
    url = 'http://api.vc.bilibili.com/dynamic_repost/v1/dynamic_repost/repost'
    data = {
        'uid': infos_return['data']['mid'],
        'dynamic_id': dynamic_id,
        'content' : random.choice(self.comments),
        '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': session.cookies.get('bili_jct')
    }
    response = session.post(url, data=data, headers=self.headers)
    return response.json()

接下來(lái)要做的就是如何判斷這個(gè)動(dòng)態(tài)是不是抽獎(jiǎng)動(dòng)態(tài)了,這里我們?cè)O(shè)置利用關(guān)鍵詞作為判斷依據(jù):

# 監(jiān)控新的動(dòng)態(tài)
self.logging('開(kāi)始監(jiān)控是否有新的抽獎(jiǎng)信息發(fā)布')
while True:
    time.sleep(self.time_interval)
    self.logging('開(kāi)始檢測(cè)是否有新的抽獎(jiǎng)信息發(fā)布')
    for userid in tqdm(followings_ids):
        updates_old = followings_infos.pop(userid)
        updates_latest = self.getupdates(infos_return, userid, session)
        for dynamic_id in updates_latest.keys():
            if dynamic_id not in updates_old:
                desp = updates_latest[dynamic_id]
                if '#互動(dòng)抽取#' in desp:
                    result = self.forwardupdate(session, infos_return, dynamic_id)
                    self.logging('檢測(cè)到有新的抽獎(jiǎng)信息發(fā)布, 已經(jīng)嘗試轉(zhuǎn)發(fā), 返回的結(jié)果為{result}')
        followings_infos[userid] = updates_latest

即當(dāng)動(dòng)態(tài)中有#互動(dòng)抽取#這四個(gè)字的時(shí)候,我們就認(rèn)定這是一條抽獎(jiǎng)用的動(dòng)態(tài),并對(duì)其進(jìn)行轉(zhuǎn)發(fā)。至此,我們的小程序就完成啦,它可以實(shí)時(shí)監(jiān)控我們關(guān)注的UP主是否有發(fā)布新的抽獎(jiǎng)信息,如果有,則第一時(shí)間參與這個(gè)抽獎(jiǎng)。我們需要做的就是多關(guān)注一些經(jīng)常發(fā)布抽獎(jiǎng)信息的UP主就行了,接下來(lái)能不能暴富就看運(yùn)氣了。

最終代碼的使用方式如下:

usage: bilibililottery.py [-h] [--username USERNAME]
                          [--time_interval TIME_INTERVAL]

B站監(jiān)控關(guān)注的UP主并自動(dòng)轉(zhuǎn)發(fā)抽獎(jiǎng)

optional arguments:
  -h, --help            show this help message and exit
  --username USERNAME   用于存儲(chǔ)歷史cookies的唯一標(biāo)識(shí)ID
  --time_interval TIME_INTERVAL
                        查詢UP主的動(dòng)態(tài)的間隔時(shí)間

到此這篇關(guān)于基于Python編寫一個(gè)B站全自動(dòng)抽獎(jiǎng)的小程序的文章就介紹到這了,更多相關(guān)Python自動(dòng)抽獎(jiǎng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中賦值的含義及說(shuō)明

    Python中賦值的含義及說(shuō)明

    這篇文章主要介紹了Python中賦值的含義及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 只需要100行Python代碼就可以實(shí)現(xiàn)的貪吃蛇小游戲

    只需要100行Python代碼就可以實(shí)現(xiàn)的貪吃蛇小游戲

    貪吃蛇小游戲相信80、90后小時(shí)候肯定都玩過(guò),那么你知道如果通過(guò)Python來(lái)實(shí)現(xiàn)嗎?今天就來(lái)教大家,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • 用python爬取中國(guó)大學(xué)排名網(wǎng)站排名信息

    用python爬取中國(guó)大學(xué)排名網(wǎng)站排名信息

    大家好,本篇文章主要講的是用python爬取中國(guó)大學(xué)排名網(wǎng)站排名信息,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Python 使用requests模塊發(fā)送GET和POST請(qǐng)求的實(shí)現(xiàn)代碼

    Python 使用requests模塊發(fā)送GET和POST請(qǐng)求的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Python 使用requests模塊發(fā)送GET和POST請(qǐng)求的實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2016-09-09
  • Python2及Python3如何實(shí)現(xiàn)兼容切換

    Python2及Python3如何實(shí)現(xiàn)兼容切換

    這篇文章主要介紹了Python2及Python3如何實(shí)現(xiàn)兼容切換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • python學(xué)習(xí)之panda數(shù)據(jù)分析核心支持庫(kù)

    python學(xué)習(xí)之panda數(shù)據(jù)分析核心支持庫(kù)

    這篇文章主要給大家介紹了關(guān)于python學(xué)習(xí)之panda數(shù)據(jù)分析核心支持庫(kù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Python猴子補(bǔ)丁Monkey Patch用法實(shí)例解析

    Python猴子補(bǔ)丁Monkey Patch用法實(shí)例解析

    這篇文章主要介紹了Python猴子補(bǔ)丁Monkey Patch用法實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python實(shí)現(xiàn)視頻剪輯的示例詳解

    Python實(shí)現(xiàn)視頻剪輯的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何Python實(shí)現(xiàn)視頻剪輯的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • python3 tkinter實(shí)現(xiàn)添加圖片和文本

    python3 tkinter實(shí)現(xiàn)添加圖片和文本

    這篇文章主要為大家詳細(xì)介紹了python3 tkinter實(shí)現(xiàn)添加圖片和文本,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Python流程控制 while循環(huán)實(shí)現(xiàn)解析

    Python流程控制 while循環(huán)實(shí)現(xiàn)解析

    這篇文章主要介紹了Python流程控制 while循環(huán)實(shí)現(xiàn)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09

最新評(píng)論

新乡县| 嘉峪关市| 尼木县| 监利县| 上林县| 平南县| 仁布县| 察隅县| 丽江市| 桓仁| 三原县| 德阳市| 郎溪县| 万荣县| 灵山县| 闽清县| 陇南市| 吴川市| 大同县| 平舆县| 工布江达县| 白城市| 昆明市| 汉沽区| 万宁市| 微博| 遂溪县| 师宗县| 贺兰县| 车险| 太保市| 海门市| 闽清县| 鹿邑县| 察隅县| 兴安县| 定安县| 东莞市| 大姚县| 巫山县| 开阳县|