问答
怎么用 API 拿到 YouTube 视频的标签和简介?
简短回答
YouTube 视频详情接口在 hashtags 字段返回作者设置的标签,在 text 字段返回完整简介,每个视频 $0.004。要研究一个领域,先搜索:一页搜索结果加上前 20 个视频的详情,共 $0.084。
YouTube 不向观众显示视频标签,所以能把标签翻出来的浏览器插件才那么受欢迎。假如你在策划家用意式咖啡的选题,想看看播放量最高的 20 个视频都用了哪些标签、简介怎么写,用插件就得点 20 次、抄一大堆。写个循环调两个接口,几秒钟就完事。
标签和简介在哪
YouTube 视频详情传链接或 ID,返回:
hashtags:作者给视频设置的标签(YouTube 叫 keywords)。写在简介里的 # 话题仍然算简介正文的一部分。text:完整简介,包括链接、章节和赞助口播信息。title、published_at、metrics.views、metrics.likes、metrics.comments,以及频道名称和 handle。- 加
view=full时还有ext.genre(分类)、ext.duration_ms和ext.is_paid_promotion。
统计一个领域的标签
import os, requests
from collections import Counter
API = "https://api.okdata.online/v1"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
def get(path, **params):
body = requests.get(f"{API}/{path}", headers=H, params=params, timeout=60).json()
if body["code"] != "ok":
raise RuntimeError(f"{body['code']}: {body['message']}")
return body["data"]
hits = get("youtube/videos/search", query="home espresso", sort="most_viewed")["items"][:20]
tags = Counter()
for v in hits:
video = get("youtube/videos/get", id=v["id"], fields="title,hashtags")["item"]
tags.update(t.lower() for t in (video["hashtags"] or []))
for tag, n in tags.most_common(25):
print(f"{n:>2} {tag}")
费用
| 任务 | 调用次数 | 费用 |
|---|---|---|
| 一个视频的标签 | 1 | $0.004 |
| 一个主题的前 20 个视频 | 1 次搜索 + 20 | {{cost:youtube.videos.search1+youtube.videos.get20}} |
| 5 个主题,每个 20 个视频 | 5 + 100 | {{cost:youtube.videos.search5+youtube.videos.get100}} |
搜索结果里没有标签,真正起作用的是详情这一次调用。
心里要有数的地方
- 不少热门视频根本没设标签,
hashtags返回空或 null。YouTube 官方也说标签在推荐里作用不大,把它当成了解作者思路的线索,别当成排名公式。 - 简介往往更有参考价值:前两行、章节时间点和链接都在
text里。 - 不返回频道订阅数。
- 视频被删除或设为私享时返回
not_found,不扣费。
其他办法
- 官方 Data API。
videos.list带part=snippet就有tags和简介,一次最多 50 个视频,只花 1 个配额单位。有 Google key、视频清单也现成的话,这条路更省钱。 - 标签查看插件。 用眼睛看一两个视频,足够了。
- 解析网页源码。 YouTube 一改页面结构就失效,这类爬虫经常坏就是这个原因。
跨 YouTube 和其他平台做选题研究,可以看内容研究方案。
更新于