基于Python编写一个B站全自动抽奖的小程序

本文将利用Python编写一个B站全自动抽奖的小程序,可以实时监控自己关注的UP主,如果关注的UP主中有人发布了抽奖的动态,就自动参与这个抽奖。这样就能不错过任何一个可以暴富的机会了。需要的可以参考一下

导语

应好友邀请,帮他写了个小程序,功能类似于实时监控自己关注的UP主,如果关注的UP主中有人发布了抽奖的动态,就自动参与这个抽奖。这样就能不错过任何一个可以暴富的机会了。写完之后感觉这个想法还是挺有意思的,于是上来分享一波。

废话不多说,让我们愉快地开始吧~

开发工具

Python版本:3.7.8

相关模块:

DecryptLogin模块;

以及一些python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

原理简介

我们主要用到的工具是公众号前几天刚发布的DecryptLogin包

首先,我们需要用它来模拟登录B站,具体而言,需要先pip安装一下:

1

pip install DecryptLogin

然后利用Client类来实现模拟登录,该类可以保存当前的登录会话,在该会话没过期之前再次运行程序是不需要重复发送登录请求的,可以避免因为频繁登录账号而触发网站的风控机制:

1

2

3

4

5

from DecryptLogin import login

client = login.Client()

bili = client.bilibili(reload_history=True)

infos_return, session = bili.login(self.username,  'scanqr')

接着,我们来抓包看看抓取自己的关注列表要请求哪个API吧,具体而言,如下图所示:

 

代码简单实现如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

'''获得关注列表'''

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

类似地,我们可以获得我们关注的UP主的当前所有动态的接口如下:

1

2

3

4

5

6

7

8

9

10

'''获得UP主的动态'''

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

转发动态的接口如下:

1

2

3

4

5

6

7

8

9

10

11

12

'''转发动态'''

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()

接下来要做的就是如何判断这个动态是不是抽奖动态了,这里我们设置利用关键词作为判断依据:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

# 监控新的动态

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 = 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 '#互动抽取#' in desp:

                    result = self.forwardupdate(session, infos_return, dynamic_id)

                    self.logging('检测到有新的抽奖信息发布, 已经尝试转发, 返回的结果为{result}')

        followings_infos[userid] = updates_latest

即当动态中有#互动抽取#这四个字的时候,我们就认定这是一条抽奖用的动态,并对其进行转发。至此,我们的小程序就完成啦,它可以实时监控我们关注的UP主是否有发布新的抽奖信息,如果有,则第一时间参与这个抽奖。我们需要做的就是多关注一些经常发布抽奖信息的UP主就行了,接下来能不能暴富就看运气了。

最终代码的使用方式如下:

1

2

3

4

5

6

7

8

9

10

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站全自动抽奖的小程序的文章就介绍到这了。

点击拿去
50G+学习视频教程
100+Python初阶、中阶、高阶电子书籍

​​​​​​​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22748.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 桌面系统设计

文章目录 前言一、项目介绍二、界面布局三、按键图标四、桌面背景五、实现led功能总结 前言 这篇文章介绍 一个Qt 桌面系统的项目,大家可以在此基础上加以改进,实现更多的功能。 一、项目介绍 可以看到 这个桌面系统上分为两部分,左边是 三个…

C++虚函数学习

VC6新建一个单文档工程; 添加一个一般类; 生成的Shape.cpp保持不变; #include "Shape.h"#ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]__FILE__; #define new DEBUG_NEW #endif// // Construction/Destruction //Shap…

基于C/S架构工作原理序号工作步骤和理论的区别

基于C/S架构工作原理序号工作步骤和理论的区别 SSH 概念 对称加密linux 系统加密,就是加密和揭秘都是使用同一套密钥。 非对称加密有两个密钥:“私钥”和“公钥”。私钥加密后的密文,只能通过对应的公钥进行揭秘。而通过私钥推理出公钥的…

MyBatis 的架构

MyBatis 的架构 MyBatis 是一个基于 Java 的持久层框架,可以将 SQL 语句和 Java 代码进行分离,通过 XML 或注解的方式配置 SQL 语句并执行,从而实现数据访问的功能。MyBatis 的架构包括以下几个部分: SqlSessionFactory&#xff…

ElasticSearch入门教程--集群搭建和版本比较

文章目录 一、ElasticSearch 集群二、Elasticsearch的核心概念2.1、分片(Shards)2.2、副本(Replicas)2.3、路由计算2.4、倒排索引 三、Kibana简介四、Spring Data ElasticSearch 一、ElasticSearch 集群 Elasticsearch 集群有一个…

CAD2021安装教程适合新手小白【附安装包和手册】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、下载文件二、使用步骤1.安装软件前,断开电脑网络(拔掉网线、关闭WIFI)2、鼠标右击【AutoCAD2021(64bit)】压缩包选择【解…

无线电音频-BPA600蓝牙协议分析仪名词解析

1 介绍 2 Baseband基带分析 (1)Delta 是什么含义? "Delta" 有多个含义,取决于上下文。以下是常见的几种含义: 希腊字母:Delta&#x

【云原生】 一文了解Docker到底是什么?

目录 1.docker是什么? 2.为什么需要docker? 3.docker特点 4.docker架构 5.云计算中的服务包括三个层面 6.传统虚拟化架构 7.容器架构 8.docker系统架构 Docker 守护进程 Docker 客户端 Docker 仓库 Docker 对象 Images(镜像) Cont…

【网络安全】渗透测试工具——Burp Suite

渗透测试工具Burp Suite主要功能详解 前言一、 Proxy模块1.1 界面布局1.1.1 菜单栏(1) 菜单栏 Burp(2) 菜单栏 project(3) 菜单栏 Intruder(4) 菜单栏 Repeater(5&#x…

【PHP面试题44】PHP5的版本和PHP7之间有哪些区别

文章目录 一、前言二、底层调整2.1性能提升2.2 新的引擎2.3 数据类型改进2.4 错误处理改进2.5 语言特性增加 三、应用层差异3.1 兼容性3.2 类和方法改进3.3 错误处理机制3.4 性能优化3.5 新的扩展支持 四、一些语法糖示例4.1 标量类型声明示例4.2 新增了Spaceship操作符&#x…

【Spring】使用注解读取和存储Bean对象

哈喽,哈喽,大家好~ 我是你们的老朋友:保护小周ღ 谈起Java 圈子里的框架,最年长最耀眼的莫过于 Spring 框架啦,本期给大家带来的是: 将对象存储到 Spring 中、Bean 对象的命名规则、从Spring 中获取bean …

数据库基本操作--------MySQL 索引

目录 一、MySQL 索引 1.索引的概念 2.索引的作用 3.创建索引的原则依据 4.索引的分类和创建 (1)普通索引 ●直接创建索引 (2)唯一索引 (3)主键索引 ●创…