当前位置: 首页 > news >正文

哔哩哔哩自动批量删除抽奖动态解析篇(二)

通过前文我们已经获得账户下转发的动态列表,这一节我们要做的就是根据前一节获得的动态列表数据判断抽奖动态是否已开奖。

一、获取抽奖动态开奖状态信息

首先我们按F12健进入网页源代码,然后点开一条抽奖动态的按钮链接,找到API接口。流程请看下图
在这里插入图片描述
点击生成的iframe本质也是一个网页页面,不习惯的朋友也可以通过这个链接单独打开一个页面:抽奖页面,
https://www.bilibili.com/h5/lottery/result?business_type=1&business_id=975949657865715728&isWeb=1,然后对页面元素进行分析。这里的business_id就是每条动态的索引值,只要是使用官方抽奖工具的动态,可以随意替换该值进入对应的页面。

二、获取数据API接口

通过上面的操作,我们找到抽奖动态的数据信息是通过一个https://api.vc.bilibili.com/lottery_svr/v1/lottery_svr/lottery_notice接口返回数据,这接口仅传输数据,无法在网页直接打开,我们找到该接口参考前一小节里复制脚本生成python代码的操作到Convert curl commands to Python, JavaScript and more网站生成对应的python代码,运行脚本输出结果:
在这里插入图片描述

1、代码分析

从复制生成的代码中,cookie和header我们忽略,需要我们关注的是params里的参数

params = {'business_id': '975793999666216981','business_type': '1','csrf': '21de42957e8840dd09d8bdb2c08c3c2a','web_location': '333.1330',
}
  • business_id是我们获取不同抽奖动态开奖状态的索引,我们通过变动该值获取不同动态状态
  • csrf每隔一段时间会变化,我怀疑是一串验证码,每隔一段时间生成新的,带有旧的验证码的请求会被抛弃,因为下文删除动态需要cookie认证,届时获取的参数也有csrf值,我们此处先不做处理。
  • bussiness_type和web_location是一些基本参数,不会变化,不用理睬

2、思路分析

通过上面的代码,我们发现主要修改bussiness_id我们就能获取不同抽奖动态的开奖状态,其中如果是官方抽奖工具动态,返回的数据会有lottery_time这个值,该值是我们判断是否开奖的重要依据,非官方抽奖工具或者普通转发的动态,将不包含该值,因此,代码思路如下

  1. 更改bussiness_id获取不同抽奖动态数据
  2. 判断服务器返回数据是否含有lottery_time这个值,若有为官方抽奖动态,若无,为第三方工具抽奖动态或为普通转发动态
  3. 使用datatime模块对lottery_time时间戳进行格式化
  4. 使用now函数获取当前时间
  5. 比较开奖时间和当前时间,如果已开奖,返回false,未开奖返回True

由于我们前文获取的动态列表包含非官方抽奖工具的动态,此部分动态没有lottery_time判断是否开奖,因此我们默认此类动态返回True。

3、代码实现

def isAlive(orig_id_str):params = {'business_id': orig_id_str,'business_type': '1','csrf': crsf,'web_location': '333.1330',}res = requests.get('https://api.vc.bilibili.com/lottery_svr/v1/lottery_svr/lottery_notice',params=params,cookies=cookies,headers=headers,).json()sleep_time = random.randint(1, 4)#随机生成1-4秒延迟,避免过快访问接口而被封杀time.sleep(sleep_time)data = res['data']timestamp =data.get('lottery_time')if timestamp:lefttime = datetime.datetime.fromtimestamp(timestamp)#格式化时间戳now = datetime.datetime.now()#获取当前时间lefts = lefttime - now#时间戳是一段int值,其实我们也可以获取现在的时间戳,两个数值相减效率可能更快,但是我想看具体开奖时间,所以用了格式化方式return lefts > datetime.timedelta(0)#比较时间差是否大于0return True#非官方抽奖工具动态默认返回True,避免删除

我们编写了一个isAlive函数,以便后续复用,传入的参数是原动态索引值,也就是我们前文获得的对象列表中的orig_id_str,到这一步我们判断官方抽奖动态是否开奖的步骤就完成了,下一步就是我们要做删除动态的操作了。

哔哩哔哩自动批量删除抽奖动态——使用篇
哔哩哔哩自动批量删除抽奖动态解析篇(一)
哔哩哔哩自动批量删除抽奖动态解析篇(二)
哔哩哔哩自动批量删除抽奖动态解析篇(三)
哔哩哔哩自动批量删除抽奖动态解析篇(四)


http://www.mrgr.cn/news/33456.html

相关文章:

  • .NET 9中的record类型:不可变数据结构的介绍与应用场景分析
  • conda创建 、查看、 激活、删除 python 虚拟环境
  • 解锁微前端的优秀库
  • <项目代码>YOLOv8 草莓成熟识别<目标检测>
  • R语言机器学习与临床预测模型77--机器学习预测常用R语言包
  • 浅谈C++之内存管理
  • 移动登录页:让用户开启一段美好的旅程吧。
  • Spring Cloud Alibaba-(2)Nacos【服务注册与发现、配置管理】
  • 如何在Jupyter Notebook中将TensorFlow和Keras降级到2.8.0版本:详细指南
  • Vivado的.v文件被误分类到Non-module Files中[filemgmt 20-2001] Source scanning failed
  • Linux,uboot,kernel启动流程,S5PV210芯片的启动流程,DRAM控制器初始化流程
  • 【Vue】自定义指令 - 点击当前区域外
  • SSM+vue音乐播放器管理系统
  • 数值计算 --- 平方根倒数快速算法(0x5f3759df,这是什么鬼!!!)
  • 拥有一个你说了算的人生—空间
  • 机器学习——Boosting
  • 【C++】二叉搜索树的底层以及实现
  • Day05 日期类OJ题目
  • 使用Go语言的互斥锁(Mutex)解决并发问题
  • Linux-gcc/g++
  • HTB-GreenHorn 靶机笔记
  • 校园美食发现:Spring Boot技术的美食社交平台
  • Zotero(7.0.5)+123云盘同步空间+Z-library=无限存储文献pdf/epub电子书等资料
  • 【Linux】【Hadoop】大数据基础实验一
  • 华为HarmonyOS灵活高效的消息推送服务(Push Kit) - 4 获取Push Token
  • Ubuntu24.04 安装ssh开启22端口及允许root用户远程登录