问答
怎么用 API 拿到某个 TikTok 话题标签下的视频?
简短回答
接口目录里没有话题页,所以用 TikTok 视频搜索(/v1/tiktok/videos/search)把标签当关键词搜,只保留 hashtags 列表里含这个标签的视频。每页约 30 条,$0.002;拿 300 条要 10 次调用,共 $0.02。
一家咖啡连锁在海外发起了 #matchamonday 活动,想看看大家用这个标签发了什么:谁参与了,哪些视频点赞高,文案里说了些什么。在 TikTok 上点开话题页往下刷就行。用 API 的话,这里没法直接取那个页面,能做的是搜标签再过滤。对大多数活动复盘来说,这样拿到的正好是最重要的那批,也就是 TikTok 排在前面的视频。
具体做法
- 用 TikTok 视频搜索搜标签文字,按普通词来写:
matchamonday或matcha monday。 - 每条视频都带
hashtags列表。转成小写后比对,只留下列表里有这个标签的。 - 用
page.next_cursor往下翻,翻到基本找不到新的匹配就停。 - 想先看头部内容,用
sort=most_liked。
import os, requests
URL = "https://api.okdata.online/v1/tiktok/videos/search"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
TAG = "matchamonday"
found, cursor = {}, None
for _ in range(10): # 最多 10 页,约 300 条
params = {"query": TAG, "sort": "most_liked", **({"cursor": cursor} if cursor else {})}
body = requests.get(URL, headers=H, params=params, timeout=60).json()
if body["code"] != "ok":
raise RuntimeError(f"{body['code']}: {body['message']}")
for v in body["data"]["items"]:
if TAG in [h.lower() for h in (v["hashtags"] or [])]:
found[v["id"]] = (v["author"]["username"], v["metrics"]["likes"], v["url"])
if not body["page"]["has_more"]:
break
cursor = body["page"]["next_cursor"]
print(len(found), "条视频带有", "#" + TAG)
费用
| 深度 | 调用次数 | 费用 |
|---|---|---|
| 第一页 | 1 | $0.002 |
| 约 300 条 | 10 | $0.02 |
| 1,000 条 | 34 | $0.068 |
每翻一页都计费,包括被过滤掉的视频。标签越独特,浪费越少;#fyp 这种泛标签,一页里大部分都会被丢掉。
这个办法的短板
- 拿到的是搜索结果,按相关度或点赞排序。和话题页有大量重合,但不是同一份列表,更不是带过这个标签的全部视频。
- 话题页上显示的总播放量,这里拿不到。
- 没有时间筛选,想看最新发布的,自己按
published_at排序。 - 体量很大、持续很久的标签,你看到的是头部,长尾部分覆盖不到。
什么时候换别的办法
- TikTok Research API:可以按话题名加日期区间查询,免费,但只对通过审核的非营利学术研究者开放。
- TikTok Creative Center:面向广告主,按地区展示正在上升的标签,不用写代码。
- TikTokApi 的话题功能:确实有,不过它的 issue 区里不少人反映经常拿不到结果。
想按周观察哪些话题在涨、哪些在退,可以看趋势研究方案。
更新于