问答
知道 BV 号,怎么拿到播放、投币和弹幕数?
简短回答
用 B站视频详情接口,传 BV 号(或视频链接),加上 view=full。一次调用返回播放、点赞、评论、分享、收藏,ext 里还有投币、弹幕数、aid、cid、时长和分区,每次 $0.002。200 个 BV 号一共 $0.40。
投放结案报告发过来,里面是 200 个 BV 号和对应的播放量。验收之前,你想自己核一遍真实数据,顺便看看投币。在 B 站,投币比点赞更能说明观众是真喜欢。每个 BV 号调一次接口,这些数就全有了。
用哪个接口
B站视频详情传 id(BV 号,比如 BV1xx411c7mD)或者 url(完整的 bilibili.com/video/... 链接),二选一。加上 view=full 后,各项数据在这些字段里:
| 想要的数 | 字段 |
|---|---|
| 播放 | metrics.views |
| 点赞 | metrics.likes |
| 投币 | ext.coins |
| 收藏 | metrics.favorites |
| 分享 | metrics.shares |
| 评论 | metrics.comments |
| 弹幕数 | ext.danmaku |
| aid(以前的 AV 号) | ext.aid |
| cid(第一个分 P 的) | ext.cid |
| 时长(秒) | ext.duration_s |
| 分区 | ext.section |
标题、简介、封面、发布时间、UP 主昵称和 mid 也会一起返回。
费用
| 规模 | 调用次数 | 费用 |
|---|---|---|
| 一个视频 | 1 | $0.002 |
| 一份 200 个视频的结案报告 | 200 | $0.40 |
| 1,000 个视频 | 1,000 | $2.00 |
视频已删除或设为私密时返回 not_found,这种调用不收费。
批量查询脚本
把 BV 号一行一个放进 bvids.txt:
import csv, os, requests
URL = "https://api.okdata.online/v1/bilibili/videos/get"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
bvids = [line.strip() for line in open("bvids.txt") if line.strip()]
with open("stats.csv", "w", newline="", encoding="utf-8-sig") as f:
w = csv.writer(f)
w.writerow(["bvid", "播放", "点赞", "投币", "收藏", "弹幕", "抓取时间"])
for bv in bvids:
body = requests.get(URL, headers=H, params={"id": bv, "view": "full"}, timeout=60).json()
if body["code"] != "ok":
w.writerow([bv, body["code"]])
continue
v = body["data"]["item"]
w.writerow([bv, v["metrics"]["views"], v["metrics"]["likes"], v["ext"]["coins"],
v["metrics"]["favorites"], v["ext"]["danmaku"], body["meta"]["fetched_at"]])
几点提醒
- 拿到的是抓取那一刻的快照。把
meta.fetched_at一起存下来,热门视频一天之内播放翻倍很常见。 - 多 P 视频共用一个 BV 号,数据是整个视频的合计,
ext.cid是第一个分 P 的。 - 完播率、流量来源、观众年龄这些只有 UP 主自己能看,任何公开接口都拿不到。
- 如果你只是想把 BV 号换成 AV 号,用不着调接口。BV 与 AV 的互转算法是公开的,bilibili-API-collect 里有说明,本地几行代码就能算,不花钱。
别的办法
只有五个视频的话,打开页面抄一下就行。如果是你自己投的单,让 UP 主导出创作中心的数据,比任何公开数据都全。愿意自己维护代码的话,开源库 bilibili-api 也能免费读到这些公开数据。想把一次性的核查变成持续跟踪,可以看竞品监测方案。
更新于