问答

有没有一个接口能拿到微博、B站、抖音、小红书的热榜?

简短回答

有。okdata 用一个 API key 提供四个热榜,每一行的结构都一样(排名、名称、热度、链接):微博热搜、B站热门、抖音热搜和小红书热点话题。四个榜各抓一次共 $0.026,每小时抓一次、抓 30 天共 $18.72。

品牌的新媒体团队想在每天早上九点看到一屏东西:微博、B 站、抖音、小红书上正在热什么,并排放着,小编午饭前就能决定要不要追某个热点。四个平台各有各的榜单、各有各的页面格式,反爬的脾气也各不相同。用 okdata 的话,同一个 key 调四次,每一行返回的结构都一样。

四个榜单

榜单 接口 每次返回 价格
微博热搜 weibo.trends.list 约 50 条 $0.002
B站热门 bilibili.trends.list 约 50 条 $0.002
抖音热搜 douyin.trends.list 约 50 条 $0.002
小红书热点话题 xiaohongshu.trends.list 约 20 条 $0.02

每一行都有 rank、name、heat 和 url。四个接口都不需要传参数。

按频率算费用

频率 费用
四个榜各抓一次 {{cost:weibo.trends.list1+bilibili.trends.list1+douyin.trends.list1+xiaohongshu.trends.list1}}
每天三次,抓 30 天 {{cost:weibo.trends.list90+bilibili.trends.list90+douyin.trends.list90+xiaohongshu.trends.list90}}
每小时一次,抓 30 天 {{cost:weibo.trends.list720+bilibili.trends.list720+douyin.trends.list720+xiaohongshu.trends.list720}}

在意预算的话,对照上面的价格,单价高的榜少抓几次。小红书的热点话题本来就比微博热搜变得慢,一天抓几次足够。

用 Python 合并

import os, requests

API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
BOARDS = {
    "微博": "/v1/weibo/trends/list",
    "B站": "/v1/bilibili/trends/list",
    "抖音": "/v1/douyin/trends/list",
    "小红书": "/v1/xiaohongshu/trends/list",
}

rows = []
for platform, path in BOARDS.items():
    body = requests.get(API + path, headers=H, timeout=60).json()
    if body["code"] != "ok":
        print(platform, body["code"], body["message"])  # 一个榜挂了,不影响其他三个
        continue
    rows += [{"platform": platform, **r} for r in body["data"]["items"][:10]]

for r in rows:
    print(f"{r['platform']}  第{r['rank']}名  {r['name']}  热度={r['heat']}")

不想写代码的话,把 MCP 服务接进 AI 助手,直接说一句帮我总结今天四个平台的热榜,它会自己调这四个接口。

几个平台之间的差别

  • heat 在各平台含义不同。B 站是视频播放量,微博和抖音是平台自己算的热度值。跨平台比较时看排名,别直接比热度。
  • 微博热搜返回时已经去掉了推广位。小红书的榜是平台推荐给创作者的话题,更像选题日历,跟新闻热点不是一回事。
  • B 站热门是视频榜,name 是视频标题,不是话题词。
  • 没有历史榜单接口。想统计某个话题在榜上待了多久,就把每次的快照存下来。

免费的替代方案

开源聚合项目 DailyHotApi 和 RSSHub 覆盖这几个榜,还有知乎、百度、头条、快手等更多来源(这些都不在本接口目录里),自己部署、自己维护就不花钱。团队想要几十个来源、并且有人负责盯着爬虫的话,它们更合适。从一个热点顺藤摸瓜找到背后的帖子和评论,可以看趋势研究方案。

更新于