问答
微博热搜榜有接口吗?怎么用代码获取?
简短回答
有。微博热搜接口(/v1/weibo/trends/list)返回当前整张榜单,约 50 条,每条带排名、话题、热度和搜索链接,每次调用 $0.002。不需要微博账号、Cookie,也不用过开放平台审核,榜单里的推广位已经去掉。
微博没有对外公开、带文档的热搜接口。大多数人要么解析热搜网页,要么调一个没有文档的内部 JSON 地址,字段说改就改。在 okdata 上,热搜榜就是一次 GET 请求:拿到的是此刻榜上的话题、排名,以及微博页面上显示的热度值。做舆情日报、开选题会、给大模型喂当天热点,都够用。
用哪个接口
微博热搜不需要任何参数,每一行有四个字段:
| 字段 | 含义 |
|---|---|
rank |
在榜单上的位置,1 是第一 |
name |
话题文字,不带 # 号 |
heat |
微博显示的热度值,页面上没显示时为 null |
url |
这个话题的微博搜索链接 |
推广位在返回之前已经过滤掉了,所以排名可能会在广告原来的位置跳过一个数,这是正常的。
价格
| 频率 | 调用次数 | 费用 |
|---|---|---|
| 查一次 | 1 | $0.002 |
| 一天里每小时一次 | 24 | $0.048 |
| 连续 30 天每小时一次 | 720 | $1.44 |
整张榜只有一页,调一次就是完整榜单。没有月费套餐,调用失败不扣费。
Python 示例
import os, requests
r = requests.get(
"https://api.okdata.online/v1/weibo/trends/list",
headers={"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"},
timeout=30,
).json()
if r["code"] != "ok":
raise SystemExit(f"{r['code']}: {r['message']}")
for row in r["data"]["items"][:10]:
print(row["rank"], row["name"], row["heat"])
如果结果是给模型读的,加上 fields=rank,name,heat,返回内容能短一大截。
这个接口管不到的
- 只有此刻的榜单,没有日期参数。想要昨天的榜,只能昨天自己存下来。
- 文娱榜、同城榜、要闻榜没有单独的接口。
- 想看网友在某个热搜话题下说了什么,拿话题词去微博搜索里搜,每页 $0.002。
其他办法
- 一天只看两三次的话,直接打开微博热搜页面看就好,免费,也比写代码快。
- GitHub 上有不少定时抓热搜的开源项目。愿意自己维护、能接受微博改版后偶尔要修一修,用它们很合适。
- 如果需要和微博本身签正式协议,走微博开放平台,那边的接口需要开发者账号并通过审核。
想把微博和抖音、B 站、小红书的榜单放在一起看,参考趋势研究方案;在 Claude 这类智能体里直接调用同一个接口,见 MCP 页。
更新于