本帖最后由 厄斐琉斯 于 2020-7-31 23:19 编辑

特别鸣谢:感谢Hatsune_miku前辈在github上开源的部分源码

声明:任何人不得将其用于任何商业目的,否则后果自负!

前言:之前在论坛上看到过一篇获取B站弹幕的帖子,作者只是给出了成品和部分关键的源码,但是没有讲解,源码也没有注释,我在网上搜了一下找到了B站官方提供的弹幕接口api:'https://comment.bilibili.com/' + cid + '.xml',然后通过分析api返回的各项数据以及结合CSDN、github、吾爱上各位前辈零零星星的讲解把这个过程复现了一下。

一、获取cid值

1.1、什么是cid值?

cid值是B站每个视频特有的编号,一个av或者BV号下允许含有多个子视频,但是一个cid号只对应一个视频1.2、如何获取cid值?

在B站视频网站界面按下ctrl+u查看页面源代码,按下ctrl+F搜索,输入cid进行查找即可,页面中可能含有多个cid值,需要根据文字内容找到对应视频的cid值

1.3、示例

我选取了s8总决赛ig对战FNC第三局的视频进行示范,BV号14b411w7La,av号35199206,通过ctrl+u加上ctrl+F搜索cid查找可得cid值为61697318,如图

go2gl0az.jpg (24.96 KB, 下载次数: 1)

2020-7-31 22:54 上传

二、访问接口获得相应数据接口

api为'https://comment.bilibili.com/' + cid + '.xml',假设cid使用上面获得的值,则网址为https://comment.bilibili.com/61697318.xml,访问网址可以看到下图

3h50glli.jpg (234.38 KB, 下载次数: 1)

2020-7-31 22:55 上传

这只有弹幕文字内容,同样地,按下ctrl+u加上ctrl+F,随便搜索一条文字信息,例如“我们是冠军!”,可以找到下图的内容

qkj3tlcq.jpg (29.51 KB, 下载次数: 1)

2020-7-31 22:56 上传

这条信息我们是冠军!!!!!的内容是什么意思呢?

首先,弹幕文字内容为我们是冠军!!!!!,然后p="1925.92700,1,25,16777215,1589174749,0,1885b1b1,32522934504390661"里的这一堆参数,第一个为弹幕出现距离视频开始的秒数,第二个是弹幕的模式,第三个是弹幕的字号,第四个是弹幕的颜色,第五个是弹幕发送的unix时间戳,可通过https://tool.chinaz.com/Tools/unixtime.aspx该网站转换成年月日时分秒的格式,第六个是弹幕池,第七个是发送弹幕者的hash_uid,第八个是弹幕发送者的历史弹幕记录这里面我们要的是第七个:弹幕发送者的hash_uid

三、hash_uid转uid

3.1、什么是hash_uid和uid?

uid是B站每个用户的ID编号,独一无二,访问https://space.bilibili.com/{uid}即可看到该用户的个人主页,而hash_uid是uid的哈希值

3.2、hash_uid如何转成uid?

哈希值没有逆向直接解的方法,只能使用查表的方法,因为uid值目前都是8位或9位纯数字(8位为主),所以可以写一个大循环遍历查找

3.3、uid转hash_uid的算法教程

C语言版:https://blog.csdn.net/gongmin856/article/details/77101397

python版:https://www.jianshu.com/p/6e54a562fc5c

3.4、实例

例如我们需要计算1885b1b1的uid原值,可以写一个大循环for(i=0;i<100000000;i++)的形式找,找到的结果为xxxxxxxx(涉及个人信息,这里不便公布)然后访问https://space.bilibili.com/xxxxxxxx即可看到个人主页

四、用途

有的时候看B站的视频会看到一些引战、尬黑的弹幕,之前想举报不知道对方是谁,通过这种方法可以查到对方uid然后举报给B站后台。论坛上有前辈开玩笑地说可以顺着屏幕找对方对线hhhhhhh,不过讲道理一般而言也没人会这么干,除非自己发的视频被别人发了恶意弹幕

五、hashuid转uid的python源码

本源码为Hatsune_miku前辈在Github上开源,任何人转载需声明版权

[Python] 纯文本查看 复制代码CRCPOLYNOMIAL = 0xEDB88320

crctable = [0 for x in range(256)]

def create_table():

for i in range(256):

crcreg = i

for _ in range(8):

if (crcreg & 1) != 0:

crcreg = CRCPOLYNOMIAL ^ (crcreg >> 1)

else:

crcreg = crcreg >> 1

crctable[i] = crcreg

def crc32(string):

crcstart = 0xFFFFFFFF

for i in range(len(str(string))):

index = (crcstart ^ ord(str(string)[i])) & 255

crcstart = (crcstart >> 8) ^ crctable[index]

return crcstart

def crc32_last_index(string):

crcstart = 0xFFFFFFFF

for i in range(len(str(string))):

index = (crcstart ^ ord(str(string)[i])) & 255

crcstart = (crcstart >> 8) ^ crctable[index]

return index

def get_crc_index(t):

for i in range(256):

if crctable[i] >> 24 == t:

return i

return -1

def deep_check(i, index):

string = ""

tc=0x00

hashcode = crc32(i)

tc = hashcode & 0xff ^ index[2]

if not (tc <= 57 and tc >= 48):

return [0]

string += str(tc - 48)

hashcode = crctable[index[2]] ^ (hashcode >>8)

tc = hashcode & 0xff ^ index[1]

if not (tc <= 57 and tc >= 48):

return [0]

string += str(tc - 48)

hashcode = crctable[index[1]] ^ (hashcode >> 8)

tc = hashcode & 0xff ^ index[0]

if not (tc <= 57 and tc >= 48):

return [0]

string += str(tc - 48)

hashcode = crctable[index[0]] ^ (hashcode >> 8)

return [1, string][/size]

[size=4]

[/size]

[size=4]def getuid(string):

create_table()

index = [0 for x in range(4)]

i = 0

ht = int(f"0x{string}", 16) ^ 0xffffffff

for i in range(3,-1,-1):

index[3-i] = get_crc_index(ht >> (i*8))

snum = crctable[index[3-i]]

ht ^= snum >> ((3-i)*8)

for i in range(100000000):

lastindex = crc32_last_index(i)

if lastindex == index[3]:

deepCheckData = deep_check(i, index)

if deepCheckData[0]:

break

if i == 100000000:

return -1

return f"{i}{deepCheckData[1]}"

六、hashuid转uid的exe成品

我根据Hatsune_miku前辈的python算法用C语言做出了exe,效率更快

hashuid_to_uid.zip

(10.99 KB, 下载次数: 55)

2020-7-31 23:08 上传

点击文件名下载附件

hashuid_to_uid的exe成品

下载积分: 吾爱币 -1 CB

七、改进版完整成品

上述所用方法单个视频最多只能获得1500条弹幕,要想获取完整弹幕及其发送者信息需要网页分析获得,我之前做过一个exe程序可以获得完整版弹幕(亲测上万条弹幕运行正常),有空发上来,敬请期待

php弹幕反检测,【原理讲解附源码】找到B站弹幕的发送者相关推荐

  1. JAVA计算机毕业设计弹幕视频网站计算机(附源码、数据库)

    JAVA计算机毕业设计弹幕视频网站计算机(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe ...

  2. CVPR21最佳检测:不再是方方正正的目标检测输出(附源码)

    计算机视觉研究院专栏 作者:Edison_G 有些目标往往具有任意方向的分布.因此,检测器需要更多的参数来编码方向信息,这往往是高度冗余和低效的... 公众号ID|ComputerVisionGzq ...

  3. Unity 关于仿崩坏3部分Bloom(部分泛光)效果实现原理(附源码)

    之前写每个物体的材质球控制屏幕bloom效果,由于性能问题,换了另外一种实现方式 部分泛光的功能,这个是之前写的,不过性能不行,如果简单的游戏还可以,如果大场景的话就不行了 原理分析 我这边就研究崩坏 ...

  4. 仅使用OpenCV实现活体检测!(附源码)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 我们先来看一个网络留言 △ 来自虾米妈咪 小朋友用妈妈的一寸照片通 ...

  5. IoU优化——在Anchor-Free中提升目标检测精度(附源码)

    计算机视觉研究院专栏 作者:Edison_G 目前的anchor-free目标检测器非常简单和有效,但缺乏精确的标签分配方法,这限制了它们与经典的基于Anchor的模型竞争的潜力 公众号ID|Comp ...

  6. Handler原理讲解及源码分析

    不用多说先上一张图 一,发送消息 首先我们每次会创建一个Handler会调用源码 如果looper对象为空的话会执行Looper.prepare()将一个新的Looper放入ThreadLocal中. ...

  7. CVPR:IoU优化——在Anchor-Free中提升目标检测精度(附源码)

    计算机视觉研究院专栏 作者:Edison_G 目前的anchor-free目标检测器非常简单和有效,但缺乏精确的标签分配方法,这限制了它们与经典的基于Anchor的模型竞争的潜力 公众号ID|Comp ...

  8. chainer-人体姿态检测-openpose【附源码】

    文章目录 前言 一.模型构建 1.引入深度学习库库 2.模型构建 3.人体姿态检测 4.效果展示 总结 前言   首先对输入图像进行人体姿态检测  本次使用国外已有模型,本人没有做过训练,因为此人脸检 ...

  9. 【附源码】计算机毕业设计java兴发农家乐服务管理系统设计与实现

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

最新文章

  1. 机器学习算法------2.11 模型的保存和加载(joblib.dump()、joblib.load())
  2. python编程100例画图-Python练习实例56 | 画图,学用circle画圆形
  3. 红黑树的原理_红黑树插入算法实现原理分析
  4. lucene.NET详细使用与优化详解
  5. 序列化的高阶认识-简单认识一下 Java 原生序列化
  6. oracle更换rac节点,Oracle-rac 更改VIP地址—2节点的
  7. java与jsp的关系_浅谈servlet与jsp的关系
  8. 学生管理系统(Java实现)
  9. as常用固定搭配_常用的有以下固定搭配
  10. 电影院订票选座小程序 电影小程序毕业设计 毕业论文 开题报告和效果图
  11. 牛客网软通动力软件测试机试_软件测试员工作经验分享?
  12. Linux下装Matlab2014
  13. 游泳池 (Standard IO)
  14. 微服务化小团队:让 GitLab、Jenkins 与 Sonar 碰撞出火花
  15. 全面认识当前市面99%的大数据技术框架(附:各大厂大数据技术应用文章)
  16. vue——echarts更换主题
  17. java(jsp技术)
  18. Inventor API学习
  19. 2020nyist第四场个人赛
  20. 2015-4-20分享的pdf

热门文章

  1. bzoj2115 线性基 异或
  2. ingress 七层负载均衡器
  3. 上帝给我们大龄程序员的出路,就在这!(附:现状分析)
  4. Java学习笔记之 Lambda表达式
  5. qt中文乱码原因分析及解决方案
  6. 沐风:可怕的想什么就来什么
  7. QueryPerformanceCounter实现Windows微秒级延时
  8. html2canvas微信头像没绘制,解决使用canvas生成含有微信头像的邀请海
  9. Kafka produce flush 引起的性能分析
  10. 如何扩大计算机的硬盘空间,Win7系统怎么扩大C盘空间 Win7电脑扩大硬盘C盘空间方法介绍...