menu 易姐的博客
验证视频属性字段,实锤B站视频限流
166075 浏览 | 2020-11-01 | 阅读时间: 约 4 分钟 | 分类: B站api研究笔记 | 标签: B站,视频限流,视频,哔哩哔哩
请注意,本文编写于 236 天前,最后修改于 38 天前,其中某些信息可能已经过时。

事实

  B站可以通过人工操作,或AI自动操作,实现指定视频的限流。

方式多种多样,大致有以下6种:

  • 禁止搜索
  • 禁止动态(无法被推送消息)
  • 禁止排行
  • 禁止天马(视频不会上推荐列表)
  • 禁止游客观看(没有登录看不见)
  • 禁止外链(禁止有Referer且非B站域名)

事件起因

  早在2020年初,我就开始做“哔哩哔哩-API收集整理”的项目,就是逆向分析B站的各种api,研究视频信息接口当然放在第一位。
  在分析web端视频基本信息api(api.bilibili.com/x/web-interface/view)时发现了一个奇怪的字段attribute,是串乍一看意义不明的数字,通过chrome的F12工具发现除了判断是否为互动视频外没有被任何js调用,而判断互动视频仅取这串数字的二进制29bit。
  验证大量视频后发现少部分视频该字段中的值有变化,包括但不限于“兄贵”“军事”“性”等题材,“10代英特尔装win7教程”这样的影响商业利益的内容,在UP主“观视频工作室”的视频“BV1ta4y1i7Bu”中也存在该值的变化,为什么会限流原因不言而喻,因为该视频评论了B站的宣传片“后浪”
  我分析该值可能与一些视频的特殊性有关系,我猜测可能是视频被盯上了,或是传闻已久的“限流”机制。
  2020-10-11日在猜测的同时我找到了18年左右B站泄露的后台源码进行逆向分析,功夫不负有心人,终于在源码中发现了attribute字段的相关的代码,现已整合进“视频基本信息”文档。
  在稍后再看历史记录列表等引用视频信息的接口中也存在这一字段。

后台代码内容:
位于/app/admin/main/videoup/model/archive/archive_state.go中的52行
分别是各个视频属性信息的标志,按照二进制进行位编码,生成10进制的attribute字段值
由此得出与视频的特殊性的确关系

验证分析

分析视频av2的数据:
该视频被打上了多个限制标志

确实无法被搜索到:

包含评价后浪的“睡前消息111期”被打上了禁止排行禁止动态禁止推荐的标志:
当时那一期节目确实没给我推荐,排行榜上也找不到(同系列节目每期都会上榜)

同一UP主的同系列视频“睡前消息112期”正常:

后来研究发现21bit比较特殊,分为3种情况,限制游客限制跳转以及不做任何限制,这几种情况前端不可见

程序大量验证

验证原理:
  通过输入UID批量读取指定UP主的全部视频,再逐一进行查询,具有限流标志的视频显示该标志,否则显示“稿件正常”。
  当时在学校利用仅有的休息时间用手机急忙写出来的。(笑😂

注:以下程序已失效,仅作为展示使用

'''
B站UP主稿件限流批量检测器
--by SocialSisterYi
ver 1.1
2020-10-27 ~ 2020-10-28
'''
import requests
import time

#限流标志位列表
attrbit_list={
0:'禁止排行',
1:'禁止动态',
4:'禁止搜索',
6:'禁止推荐',
12:'私单恰饭',
21:'限制游客'}

#up主视频avid列表
uparc_list=[]

#显示视频信息
def print_video_info(indata):
    print('avid:      av'+str(indata['aid'])+ \
          '\nbvid:      '+indata['bvid']+ \
          '\n标题:      '+indata['title']+ \
          '\n子分区名:  '+indata['tname']+ \
          '\n播放量:    '+str(indata['stat']['view'])+ \
          '\nUP主:      '+indata['owner']['name']+ \
          '\n发布时间:  '+time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(indata['pubdate'])))

#获取视频信息
def get_video_info(avid):
    url=f'https://api.bilibili.com/x/web-interface/view?aid={str(avid)}'
    resp=requests.get(url)
    return resp.json()['data']

#显示限流标志位
def print_attrbit(attrbit):
    nobit=True
    for i in attrbit_list.keys():
        if attrbit&(1<<i):
            print('\033[1;31;40m'+attrbit_list[i],end='\033[0;37;40m ')
            nobit=False
        if i==21:
            if nobit:
                print('\033[1;32;40m稿件正常\033[0;37;40m')
            else:
                print()

print('UP主视频限流批量检测器  --by SocialSisterYi')
up_uid=int(input('输入up主uid:'))
total_page=1
page=1
#获取up主所有稿件avid
while page<=total_page:
    url=f'https://api.bilibili.com/x/space/arc/search?mid={str(up_uid)}&pn={str(page)}&ps=50'
    resp=requests.get(url)
    arclist=resp.json()
    if page==1:
        total_video=arclist['data']['page']['count']
        total_page=total_video//50+1
        print(f'up主稿件总数为:{str(total_video)}\n正在获取up主所有视频avid')
    for i in range(len(arclist['data']['list']['vlist'])):
        uparc_list.append(arclist['data']['list']['vlist'][i]['aid'])
    print(f'进度:{page}/{total_page}')
    page+=1
print('获取完毕!开始查询\n\033[1;33;40m-----------------------------\033[0;37;40m')
#查询视频情况
for avid in uparc_list:
    videoinfo=get_video_info(avid)
    print_video_info(videoinfo)
    print_attrbit(videoinfo['attribute'])
    print('\033[1;33;40m-----------------------------\033[0;37;40m')
    time.sleep(0.1)
print('ALL DONE!')

部分运行结果如下:

沃玛难逃一劫

囧仙竟然也有

草!CMD动画,那没事了 一定是声音和画面的锅,屑站不喜欢的某些题材

蜂鸣器音乐?这也行
不禁让人想起那次B站客服的回答“稿件里钢琴曲的声音过于涩情”

团团竟然也逃不过,大水冲了龙王庙

  在测试了不少我关注的UP主的几千个视频后,见到了很多想不到为啥会被限流的视频,作为B站的5年的老用户&UP主,看着运行记录,我的心情久久不能平复..........
  我突然想起睿智的一句话“我们可能会倒闭,但绝对不会变质”,呵呵呵😊

事件结果

  由于消息公开后太多人在各个群里讨论、我在2020-10-27晚在B站动态发表了程序的运行截图、以及biliob的大量爬取数据,在2020-10-28下午,B站官方紧急删除了web端视频基本信息接口的attribute字段,但历史记录稍后再看列表接口中的值没有被删除。

2020-10-28中午动态被删除(河蟹🦀):

删除之前的接口返回数据:

删除之后的接口返回数据:

2020-10-29日凌晨,历史记录稍后再看列表接口中的值被删除

历史记录列表接口中无attribute

2020-10-30具体时间未知,下午时发现app端的视频信息grpc接口attribute字段已经恒为0

grpc接口的数据也被删除:

这次官方行动之快,是我们大家万万没有想到的!

分析总结

  这次官方行动迅速充分表明了我们已经触及到了平台的要害,更能进一步证明平台限流的真实性。至此视频限流标志在前端重新变为黑箱状态。可见“限流”这一机制与功能对于商业活动与平台”自保”的重要性,与之相对的可能还有“引流”,总之B站后台对天马的操作自由度非常高,并且对正常的搜索和排行榜也能做手脚
  我们这样广大视频创作爱好者(小UP),被官方限流最多少了些粉丝与成名的机会;而那些全职UP主正在陷入一种“内卷”,创作内容的展示机会可以被平台根据需求随意管控,而不单纯与创作质量正相关,平台的潜规则就是商业活动盈利致胜的法宝!

2020-11-01
社会易姐QwQ

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

发表评论

email
web

captcha
请输入验证码

全部评论 (共 9 条评论)

    2021-05-18 21:41
    太强了 评论留念
    OJPK
    2021-04-02 13:24
    前来观光😂
    南小濡
    2021-02-09 11:55
    B站限流确确实实是存在,早在3年前我还上大学的时候就尝试做UP,但是新人你懂的,我就去淘宝找了增加数据和粉丝(开激励恰饭)的行为。然后毕业那段时间忙着论文啥的就一直没更。结果就是某天晚上我突然发现1000+粉丝就剩200+了。毕业之后又零散做了几期视频,连100+播放量都到不了。那会直播也是偶尔才播,但是每次都有500+人气,现在能破50就不错了....大佬加友链吗?可邮箱联系我,顺便问下关于你在github上关于B站API的问题~
      2021-02-12 20:20
      @南小濡当然可以加一下
    2020-12-31 18:27
    awa
    --阳光咕--
    2020-12-31 17:38
    易姐NB!
    kinomoto
    2020-12-30 18:20
    ?,技术佬
    Jeanna
    2020-12-30 13:00
    支持易姐!
    Bryan不可思议
    2020-11-01 18:16
    支持易姐!