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

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

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

首先我们按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.xdnf.cn/news/147467.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode 1041. 困于环中的机器人

1.题目基本信息 1.1.题目描述 在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。注意: 北方向 是y轴的正方向。 南方向 是y轴的负方向。 东方向 是x轴的正方向。 西方向 是x轴的负方向。 机器人可以接受下列三条指令之一: “G”&…

基于springboot在线学籍管理系统

基于springboot在线学籍管理系统 摘 要 对在线学籍管理的流程进行科学整理、归纳和功能的精简,通过软件工程的研究方法,结合当下流行的互联网技术,最终设计并实现了一个简单、易操作的在线学籍管理系统。内容包括系统的设计思路、系统模块和…

从零开始一个git操作实例,图文并茂

徒弟不懂git怎么用, 于是写了篇文章, 把本地git操作从头写了一遍, 自己去看吧! 0、基本概念 •Git是一个免费、开源的、分布式版本控制系统 •它使用一个特殊的叫做仓库的数据库来记录文件的变化 •仓库中的每个文件都有一个…

【网络】TCP协议的简单使用

目录 echo_service server 单进程单线程 多进程 多线程 线程池 client echo_service_code echo_service 还是跟之前UDP一样,我们先通过实际的代码来实现一些小功能,简单的来使用TCP协议进行简单的通信,话不多说,我们先实现…

Redis面试真题总结(四)

文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ 文章收录在网站:http://hardyfish.top/ AOF 持久化? AOF(Append Only File&#x…

Selenium4.0实现自动搜索功能

01.Selenium4.0实现搜索功能 1.安装Selenium及查看Selenium版本 pip install selenium pip show seleniumfrom selenium import webdriver from chromedriver_py import binary_path import time from selenium.webdriver.common.by import By from selenium.webdriver.commo…

智能农业系统——土壤养分运移转化

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案,帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、AI知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&#x…

鸿蒙OpenHarmony【轻量系统内核扩展组件(C++支持)】子系统开发

C支持 基本概念 C作为目前使用最广泛的编程语言之一,支持类、封装、重载等特性,是在C语言基础上开发的一种面向对象的编程语言。 运行机制 C代码的识别主要由编译器支持,系统主要对全局对象进行构造函数调用,进行初始化操作。…

H264-NAL

目录 错误日志NAL简介参考资料 错误日志 拉流时存在如下日志,会因为拉流失败导致之后的任务也停止 missing picture in access unit with size 16384 Invalid NAL unit size Error splitting the input into NAL units. 之后只要设置抓取异常后,重新拉流&#xff…

zabbix email 告警

配置媒介、触发器动作(动作、操作) 为用户 定义媒体,比如电子邮件地址 动作 - 条件

手机在网状态查询接口如何用PHP进行调用?

一、什么是手机在网状态查询接口? 手机在网状态查询接口,即输入手机号码查询手机号在网状态,返回有正常使用、停机、在网但不可用、不在网(销号/未启用/异常)、预销户等多种状态。 二、手机在网状态查询适用哪些场景…

数据结构(7.3_4)——红黑树的定义和性质

红黑树和平衡排序二叉树的查插删时间 平衡二叉树的适用场景&#xff1a;适用以查为主、很少插入/删除vd场景 红黑树&#xff1a;适用于频繁插入、删除的场景&#xff0c;实用性更强 红黑树的考点 红黑树的定义&#xff1a; 红黑树的二叉排序树&#xff1a;左子树结点值<…

EvilScience靶机详解

主机发现 arp-scan -l 得到靶机ip 192.168.229.152 端口扫描 nmap -sV -A -T4 192.168.1.20 这段代码使用 nmap 命令来扫描目标主机 192.168.1.20&#xff0c;并执行以下操作&#xff1a;-sV&#xff1a;探测开放的端口&#xff0c;以确定服务/版本信息。-A&#xff1a;启…

【软件工程】可行性研究

一、目的 二、任务 三、步骤 四、结果&#xff1a;可行性研究报告 例题 选择题

Java基础-零拷贝

文章目录 什么是零拷贝&#xff1f;传统IO执行过程零拷贝的意义零拷贝的主要实现方式实际应用场景零拷贝的优势零拷贝的局限性 Java 中的零拷贝实现FileChannel.transferTo()FileChannel.transferFrom() 相关知识点解释什么是DMA内核空间和用户空间什么是用户态、内核态什么是上…

前端——实现时钟 附带小例子

创建日期对象 toLocaleDateString() 获取日期 console.log(date.toLocaleDateString()) toLocaleTimeString() 获取时间 console.log(date.toLocaleTimeString()) toLocaleString() 获取日期和时间 console.log(date.toLocaleString()) date.getDay() 获取星期几 周日为…

计算机毕业设计选题推荐-基于python+Django的全屋家具定制服务平台

精彩专栏推荐订阅&#xff1a;在下方主页&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f496;&#x1f525;作者主页&#xff1a;计算机毕设木哥&#x1f525; &#x1f496; 文章目录 一、全屋家具定制…

H264参考帧列表管理

P/SP/B帧的参考帧列表的初始化 参考H.264标准文档的8.2.4.2章节&#xff0c;暂不研究场编码。在初始化P/SP帧或B帧的参考帧列表过程中&#xff0c;DPB中至少要存在一个有效的、即被标记为“用于短期或长期参考”的参考帧。 P/SP Slice 参考帧列表初始化 P/SP Slice参考帧列表…

《算法岗面试宝典》正式发布

大家好&#xff0c;历时半年完善&#xff0c;《算法岗面试宝典》 终于可以跟大家见面了。 最近 ChatGPT 爆火&#xff0c;推动了技术圈对大模型算法场景落地的热情&#xff0c;就业市场招聘人数越来越多&#xff0c;算法岗一跃成为竞争难度第一的岗位。 岗位方向 从细分方向…

汽车总线之----CAN总线

Introduction 早期的车辆网络是点对点的模式&#xff0c;臃肿繁杂且效率低下 现在是以总线的模式&#xff0c;很明显线路简洁清爽了很多。 高速CAN可以支持1M/s的速率&#xff0c;低速CAN可以支持125k/s的速率 CAN节点的内部结构图(Structure of CAN-Bus and electronic C…