欢迎光临散文网 会员登陆 & 注册

『B站API学习』获取UP主的实时总播放量

2020-06-11 04:01 作者:ZHY2020  | 我要投稿

最近几天,倒腾测试4K视频,涉及到下载B站视频,捎带学习了下网站的一些api接口的使用,可以用来获取一些有用的数据,其中包括下载视频。(嘿嘿……)

咳咳,上面这个用到的稍微有点复杂,现在先不涉及,这篇先从一个比较简单的讲起。

这个是我的B站主页的信息条,其中除去粉丝关注点赞数会实时更新,其余都是每天12:00更新一次,包括UP的“创作中心”后台数据。

但是单个视频的播放量是在实时变动的,那么是不是把UP主所有视频的播放量都加起来就是实时的总播放量呢?

要获取UP的所有视频的播放量数据,就涉及到这篇文章使用的api接口。

我们每次访问一个网页,浏览器背后都会网页中的一些指令向不同的api接口获取数据,再呈现在我们看到的页面上。

浏览器开发者选项中的网络监视器,会记录浏览器在该页面上所产生的所有连接请求,其中包括各种图片元素,还有api接口的请求。仔细翻找就会发现个人主页上的元素都有对应的接口调用(包括粉丝关注数,频道信息,收藏夹信息,关注的TAG,置顶视频等等)

B站的接口地址是这样的:https://space.bilibili.com/ajax/member/getSubmitVideos 以及这样的:https://api.bilibili.com/x/web-interface/view

正常访问时,浏览器会对这些接口发起GET请求。GET请求需要参数以及请求标头。请求标头包含的是浏览器类型以及cookie等信息,这里先不涉及。

在我们自己人工或者编程获取数据是更需要的是其中的参数。参数说白了就是告诉服务器“我要获取那个UP的数据”

这次用到的获取UP主所有视频的接口是https://space.bilibili.com/ajax/member/getSubmitVideos

它需要这几个值:

mid:UP的UID

pagesize:需要接口回复多少个视频的数据,上限100(缺省值20)

page:在上面pagesize分页下的第多少页(缺省值1)

order:子串“pubdate”字面意思是按投稿顺序排列,其他可选参数未知(缺省“pubdate”)

我们手动调用只要在浏览器地址栏中输入:https://space.bilibili.com/ajax/member/getSubmitVideos?mid=36046577&;pagesize=100&page=1&order=pubdate

得到的是一串json格式的文件,用浏览器的开发者模式可以方便地按层级查看

这里使用我的UID,我的视频不足100所以pagesize的作用看不出。“vlist”就是本次获取的视频信息。每一条都包含该视频的标题、简介、播放数、av号、评论数、弹幕数……

并且回复中的pages还告诉我在当前100个一页的下共几页。

理解到这里,通过编程来获取总播放量的值的思路就清楚了:

先定pagesize为100向接口请求,获取每页100个视频,共有多少页。

知道了总页数,使用循环访问接口每个循环获取100个视频数据,提取播放量数据存入数组。

最后将数组里的数值加和,即可得到结果。

接口调用函数(python3)

样例代码使用了类来封装视频的各种数据

使用request模块发起get,json模块解析回复的json文本使其以dict呈现。

完整代码:https://github.com/Daniel2022/bilibili_own_tools 中的getplaynum.py

执行效果:

UID为哔哩哔哩番剧,播放数百亿级

当然,这个方法有一定局限,它只能获取UP当前可被访问的视频的播放总数,删除的被锁的不能计入,而官方的统计是所有的历史播放。于是会发现获取到的值会比空间上显示的值还小。

最后再提一下:以上这个接口为旧接口,它不能获取bv号。现在在正常访问UP主页时,浏览器不会请求这个接口,而是:https://api.bilibili.com/x/space/arc/search

参数样例:https://api.bilibili.com/x/space/arc/search?mid=36046577&pn=1&ps=25&jsonp=jsonp (ps同上面的pagesize,pn就是page,回复响应的内容大同小异)

github还放了两个一起写的小玩具。具体功能是什么,看看就知道了

By ZHY

『B站API学习』获取UP主的实时总播放量的评论 (共 条)

分享到微博请遵守国家法律