问答

怎么用 API 拿到某个 TikTok 话题标签下的视频?

简短回答

接口目录里没有话题页,所以用 TikTok 视频搜索(/v1/tiktok/videos/search)把标签当关键词搜,只保留 hashtags 列表里含这个标签的视频。每页约 30 条,$0.002;拿 300 条要 10 次调用,共 $0.02。

一家咖啡连锁在海外发起了 #matchamonday 活动,想看看大家用这个标签发了什么:谁参与了,哪些视频点赞高,文案里说了些什么。在 TikTok 上点开话题页往下刷就行。用 API 的话,这里没法直接取那个页面,能做的是搜标签再过滤。对大多数活动复盘来说,这样拿到的正好是最重要的那批,也就是 TikTok 排在前面的视频。

具体做法

  1. 用 TikTok 视频搜索搜标签文字,按普通词来写:matchamonday 或 matcha monday。
  2. 每条视频都带 hashtags 列表。转成小写后比对,只留下列表里有这个标签的。
  3. 用 page.next_cursor 往下翻,翻到基本找不到新的匹配就停。
  4. 想先看头部内容,用 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 区里不少人反映经常拿不到结果。

想按周观察哪些话题在涨、哪些在退,可以看趋势研究方案。

更新于