C# 获取Bilibili网站中的视频信息

需求:根据B站视频的url获取对应视频的播放量以及视频时长。

1.这种需求的第一想法当然是找api了……提供给我的url基本都是带bvid的,所以直接找到了一个根据bvid获取视频信息的接口,哈哈哈,真是天助我也,返回数据挺长的,我就不贴了
api:https://api.bilibili.com/x/web-interface/view?bvid=视频的bvid。
(B站API集合:Bilibili-API-collect)

2.然后根据返回数据找到需要的字段内容,code、message就不说了,视频时长在data下,字段为duration,单位是秒。(这里需要补充一点,不知道是不是B站的原因,页面显示的时长与接口返回一般会差个一两秒,但是对我来说不差10来分钟啥的都没啥影响),data下的stat包含了视频的很多信息,包括播放量(view)、点赞数(like)、收藏数(favorite)、分享数(share)等等,我只需要播放量,根据自己需求来呗。

3.少量数据简单测试一番后,感觉没什么问题就直接上了正式数据,大概3000多条吧,正常执行了一部分之后就完犊子了……返回code412,请求被拒绝(奇怪的是手机还能用)。联系了B站客服娘,让修改dns,试了也没好用。难不成有类似WAF里CC防护那种功能吗?调用频率过高误以为攻击,所以暂时性的对IP进行阻断?反正是我猜的,毕竟客服娘也不清楚,只是说会向技术反馈问题。

4.当天晚上再就没看,第二天接口就好用了。这次将接口调用频率改为每秒5次,尝试了1000条,顺利通过。还没开心两分钟,正式的3000多条数据,干到1550多条的时候又挂了……这次我特意记了一下被阻断的时间,大概是两个小时。阻断期间又是一顿查,在github上找到了一些人的讨论,过快请求 /x/space 导致限流,发现有人与我情况类似,但是比我精确些,1500次/10分钟,借鉴经验,当接口正常之后,我改成每次只处理1000条,每秒调用5次,果然再也没遇到过被阻断的情况。就是处理得慢了点,1000条用了5分多钟……算了,毕竟安全为主,被办又是2个小时,不值当的。

记录一下,希望能给有相同需求的小伙伴一些经验,少踩一点坑。

原文地址:https://www.cnblogs.com/LukeSteven/p/14799439.html