问答

微博热搜榜有接口吗?怎么用代码获取?

简短回答

有。微博热搜接口(/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 页。

更新于