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