微信搜一搜公开数据 API | SandBase
用一个 REST API 查询微信搜一搜的公开结果和视频。无需微信登录、无需 SDK——一个 SandBase 密钥,为 Agent 工作流而生。

微信搜一搜是中国主导级社交超级应用里的搜索框——一扇望向微信各内容面公开结果和视频的窗口。这可以映射到话题研究、内容监测和趋势发现等场景。可要用程序去拿这些数据,通常意味着逆向 App、周旋于 token,而且 App 一变你就得重写一遍采集器。
SandBase 的微信搜一搜公开数据 API 免去了这些前置成本。它通过普通的 REST 端点查询微信搜一搜的公开结果和视频——只用一个 SandBase API 密钥,不需要登录微信、也不需要 SDK。端点 API 参考是每个参数和响应信封的权威来源;下面的业务载荷字段名来自我实际跑的一次搜索调用(测试于 2026-09-27,UTC),仅作为一次观测到的结构展示——请以真实响应为准核对,因为负载会随时间变化。
这不是微信官方开放平台。 当你需要经过授权的会员操作,或需要有正式授权协议的数据时,请走微信官方渠道。当你的工作流需要用于研究和监测的公开、只读数据时,用 SandBase。想上手?获取 SandBase API 密钥,然后浏览微信搜一搜端点。
先说结论
- 两个端点:
wechat-search/v2/search做通用结果,wechat-search/v2/search-videos做视频。- 本文的 Model API 端点用
POST /v1/api/wechat-search/<path>调用——只传该端点的参数,无 SDK,一个SANDBASE_API_KEY。- 两个都接一个
keyword;结果回来时带offset、cursor、continue_flag、no_more等分页字段。- 只返回公开、只读数据。你这边无需发帖、无需平台登录、不涉及私有数据;用 SandBase API 密钥鉴权即可。
你需要哪种微信搜一搜 API?
| 你的需求 | 选择 | 原因 |
|---|---|---|
| 发帖、以会员身份操作,或使用账号授权数据 | 微信官方渠道 | 会员和账号级操作应通过微信直接进行。 |
| 按关键词查询公开搜索结果或视频 | SandBase 微信搜一搜公开数据 API | 普通 REST、一个 SandBase 密钥、结构化 JSON,面向只读工作流。 |
| 私聊或仅账号可见的数据 | 两种公开方案都不适用 | 这类数据不在本篇公开数据指南范围内。 |
微信搜一搜 API 能取到什么
目录建立在一个 v2 面上,有两个搜索端点:
- 通用搜索 —
search返回某关键词的公开结果,按类目分组,并带分页字段。 - 视频搜索 —
search-videos返回某关键词的公开视频,分页约定相同。
动手前请以每个端点的线上 API 参考为准核对参数。
SandBase 上的微信搜一搜 API 页面——带标签的概览和端点列表,每个端点都标了路径。
微信提供什么,SandBase 补什么
公开数据来自微信。SandBase 并不拥有或运营微信,它为符合条件的公开数据工作流提供一层统一的 API。每个能力都成为一个稳定端点,鉴权收敛为单个密钥,响应回来是可预测的 JSON——于是 Agent 可以沿着一条约定跑关键词搜索并翻页,而不用维护采集器。
快速上手:第一次调用
SandBase 暴露不止一个 API 面。目录里可能显示 /apis/v1/... 下的 GET 路径;本文使用每个端点 API 参考上标注的带厂商前缀的 Model API 路径。不要擅自改动 HTTP 方法或 URL——以你所选端点的参考为准。
跑一次关键词搜索:
import os
import requests
resp = requests.post(
"https://api.sandbase.ai/v1/api/wechat-search/v2/search",
headers={
"Authorization": f"Bearer {os.environ['SANDBASE_API_KEY']}",
"Content-Type": "application/json",
},
json={"keyword": "人工智能"},
)
resp.raise_for_status()
body = resp.json()
if body.get("status") != "completed":
error = body.get("error", {})
raise RuntimeError(error.get("message", "微信搜一搜请求未完成"))
# 参考保证的是信封;业务字段随端点而定,
# 用防御式读取,并以真实响应核对确切路径。
data = body["outputs"][0]["data"]
print(data.get("keyword"), "| offset:", data.get("offset"), "| more:", data.get("continue_flag"))
categories = data.get("categories", [])
print(len(categories), "个类目")
curl -X POST https://api.sandbase.ai/v1/api/wechat-search/v2/search \
-H "Authorization: Bearer $SANDBASE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"keyword": "人工智能"}'
响应使用一致的信封:一个 id、一个 status、model 名称,以及——在 completed 运行上——一个 outputs 数组,其唯一元素在 data 下承载数据。failed 或 timeout 的运行则带 error 而没有 outputs,所以读取 outputs[0].data 前先根据 status 分支判断。对于搜索,负载带 keyword、一个 results 对象、一个 categories 列表和分页字段(offset、cursor、continue_flag、no_more)。下面是我那次搜索调用的一段裁剪后的真实响应(测试于 2026-09-27,UTC)——数值会随时间变化,所以请把字段名当作观测到的,并对照真实响应核对:
{
"id": "677def62-bd58-48fb-bb31-ec694c49f80f",
"status": "completed",
"model": "wechat-search/v2/search",
"outputs": [
{
"data": {
"keyword": "人工智能",
"offset": 18,
"continue_flag": 1,
"no_more": null,
"categories": [],
"results": {}
}
}
]
}
响应结构因端点而异——请检查一次真实响应,并逐端点确定精确的字段路径。
端点 API 参考是每个参数名和响应路径的事实来源。
能力地图
| 能力簇 | 代表端点 | 典型用途 |
|---|---|---|
| 通用搜索 | wechat-search/v2/search | 跨公开面的关键词发现 |
| 视频搜索 | wechat-search/v2/search-videos | 关键词视频发现 |
分页是每端点各自的请求约定——响应返回一个 offset/cursor 和一个 continue_flag/no_more 信号;下一次请求把 offset 或 cursor 传回去。请查阅每个端点的结构。
微信搜一搜的两个端点,在 v2 面上。
在 Agent 工作流中链式调用
因为两个端点共享同一套鉴权和同一个响应信封,Agent 可以沿着一条约定跑一次搜索和一次视频搜索。一个常见的研究模式是这样:
- 搜关键词。 用一个
keyword调用wechat-search/v2/search拿到分组结果,再在continue_flag指示还有更多时用返回的offset/cursor翻页。 - 搜视频。 用同一个
keyword调用wechat-search/v2/search-videos拿公开视频,用同样方式翻页。 - 存储并做增量。 把每一页按结果 id 存下来,跨运行做 diff 以发现新增内容。
每一步都返回相同的 { id, status, model, outputs } 结构,所以你的 Agent 只需按 status 分支一次,并复用同一段读 JSON 的代码。
常见用例
微信搜一搜 API 做话题研究
用一个关键词运行 wechat-search/v2/search 梳理按类目分组的公开结果,再用 offset/continue_flag 翻页。输入:一个关键词。输出:分组结果加分页字段。端点:search。
微信搜一搜 API 做视频发现
用一个关键词运行 wechat-search/v2/search-videos 浮现某话题周边的公开视频。输入:一个关键词。输出:视频结果加分页字段。端点:search-videos。
微信搜一搜 API 做监测
按计划轮询一个关键词,跨运行 diff 结果,追踪一个话题的覆盖如何变化。输入:一个关键词。输出:你随时间比较的连续结果页。端点:search、search-videos。
为什么放在 API 层来做
你当然可以用无头浏览器指向微信搜一搜、解析 App 的负载,但这条路很脆:App 会变,token 会轮换,你维护的是采集器而不是在做产品。通过一层统一 API 来读,意味着你的代码依赖的是有名字的 JSON 字段和单个响应信封,而不是某个 App 内部实现。鉴权是一个密钥,而且因为两个端点都返回相同的 { id, status, model, outputs } 结构,重试、日志和错误处理都可以收进一个你写一次、两个都复用的辅助函数里。
正是这种一致性让工作流对 Agent 而言可组合。把一个关键词换成另一个、从 search 切到 search-videos,代码路径完全一样。实际的收益是:你的时间花在”结果对你的研究意味着什么”上,而不是花在维持一个采集器去追一个移动靶。当你需要的不止这两个读取时,在线上列表里查到合适的端点,并在接入前确认它的参数。
局限与边界
- 仅公开、只读数据。 不发帖、不关注、不涉及私有或仅账号可见的数据。
- 速率与量级。 把响应当作尽力而为的读取;作为客户端侧的韧性措施,遇到 HTTP 429 等瞬时错误时按退避策略重试。
- 参数与结构随上游面而定。 两个端点都接一个
keyword;分页用offset/cursor加一个continue_flag/no_more信号。先看一次真实响应、读一遍结构。 - 以线上参考核对端点。 可用性和字段可能变化;在依赖某个具体端点前先确认。
- 这不是微信官方合作。 SandBase 提供对公开数据的统一访问;请就你的使用场景遵守微信条款和适用规则。
常见问题
我需要微信开发者应用或登录吗?
不需要。你用自己的 SANDBASE_API_KEY 向 SandBase 鉴权。这些读取端点不需要你这边有微信账号或 OAuth。
这两个端点各接什么?
search 和 search-videos 都接一个 keyword。通用搜索把结果按类目分组;视频搜索返回视频。
分页怎么做?
响应返回一个 offset/cursor 和一个 continue_flag/no_more 信号;在 continue_flag 指示还有更多页时,下一次请求把 offset 或 cursor 传回去。请查阅每个端点的结构。
我能读私聊或仅账号可见的数据吗? 不能。这套 API 只返回公开搜索数据。私聊和账号授权内容不在范围内。
从一次搜索开始
创建一个 SandBase API 密钥,用一个关键词调用 search,在翻页或转到视频搜索之前先检查返回的结构。准备好后: