推特搜索 API 2026:X API 搜索推文的接口、限额和价格
推特搜索 API 只有两个接口:最近搜索查 7 天内,全量搜索回到 2006 年。按 X 官方文档讲清限额、next_token 翻页、计数接口和 2026 年价格,附真实调用。
Tarun Khatri
发布于 · 更新于 · 阅读约 7 分钟 · Read in English
推特搜索 API 就是 X(推特)的两个接口:最近搜索查过去 7 天,全量搜索能查到 2006 年。
这篇写给要按关键词、账号或日期拿推文的开发者。你会看到 X 官方的限额和价格、第一次调用怎么写,还有一条更短的路:我们做的 Weir。
用 Bearer Token 发第一次最近搜索:
curl "https://api.x.com/2/tweets/search/recent?query=from%3Agithub%20-is%3Aretweet&tweet.fields=created_at,public_metrics" \
-H "Authorization: Bearer $X_BEARER_TOKEN"
- 选接口一周内用最近搜索,更早的用全量搜索。
- 写查询用 X API v2 的运算符写法。
- 发第一次请求一条 curl 加一个 Bearer Token。
- 用 next_token 翻页直到它不再出现。
- 先计数一次请求就知道有多少条。
- 或者用 WeirJSON 字段,每条推文 1 积分。
第 1 步:选一个推特搜索 API 接口
截至 2026 年 10 月 26 日,X 的文档列出两个搜索接口:
| 对比项 | 最近搜索 | 全量搜索 |
|---|---|---|
| 路径 | GET /2/tweets/search/recent |
GET /2/tweets/search/all |
| 能查多久 | 过去 7 天 | 2006 年 3 月至今 |
| 谁能用 | 所有开发者 | 按量计费和企业版 |
| 每次返回 | 10 到 100 条 | 10 到 500 条 |
| 查询长度 | 512 个字符 | 1,024 个字符 |
| 每 15 分钟,按应用 | 450 次 | 300 次,且每秒 1 次 |
企业版的两个接口,查询都能写到 4,096 个字符。
第 2 步:用 X API 的语法写查询
查询是一串运算符,写法和 x.com 的搜索框很像,但不完全一样:
- 词和短语:
python、"open source"、(rust OR golang),用-spam排除。 - 账号和对话:
from:github、to:github、@github、list:和conversation_id:。 - 推文类型:
is:retweet、is:reply、is:quote、has:media、has:links和lang:en。 - 互动数:
min_likes:、min_reposts:和min_replies:,2026 年 5 月 4 日加入。
推文类型这一组不能单独用。X 把它们叫作“必须搭配”的运算符,所以 has:media 旁边要有一个词或 from:。
还要注意优先级。空格表示 AND,而且比 OR 先结合,所以 apple OR iphone ipad 的意思是 apple OR (iphone ipad)。
x.com 上的 min_faves: 在 API 里会被 400 拒绝,要写 min_likes:。每个 x.com 运算符在 v2 里叫什么,见推特高级搜索语法大全。
第 3 步:给两个接口各发一次请求
最近搜索的请求就在本页开头,它要的令牌怎么拿,见推特 API 申请教程。全量搜索要加上 ISO 8601 格式的日期:
curl "https://api.x.com/2/tweets/search/all?query=from%3Agithub&start_time=2020-01-01T00%3A00%3A00Z&end_time=2021-01-01T00%3A00%3A00Z&max_results=100" \
-H "Authorization: Bearer $X_BEARER_TOKEN"
我们跑了什么,没跑什么。 我们这里没有 X API 的 key。2026 年 10 月 22 日,我们不带令牌发了两个搜索请求和两个计数请求,X 每次的回答都一样:
{ "title": "Unauthorized", "type": "about:blank", "status": 401, "detail": "Unauthorized" }
所以本文里 X 的细节,都来自 X 的文档。
不加参数时,每条推文只返回 id、text 和 edit_history_tweet_ids。要更多字段,就加上 tweet.fields=created_at,public_metrics 和 expansions=author_id。
第 4 步:用 next_token 翻页
还有更多结果时,响应里会带 meta.next_token。把它作为 next_token 传回去,直到它不再出现。
X 的翻页指南还写了三点:
- 结果按时间倒序,最新的在前。
next_token不会过期,同一个令牌每次都返回同一页。- 要轮询新推文,下次把第一页的
meta.newest_id作为since_id传入。
下面的循环限制了页数,宽泛的查询也不会让账单失控:
import os, requests
URL = "https://api.x.com/2/tweets/search/recent"
HEAD = {"Authorization": f"Bearer {os.environ['X_BEARER_TOKEN']}"}
def search_recent(query, max_pages=5):
params = {"query": query, "max_results": 100, "tweet.fields": "created_at"}
for _ in range(max_pages):
r = requests.get(URL, params=params, headers=HEAD, timeout=30)
r.raise_for_status()
page = r.json()
yield from page.get("data", [])
token = page["meta"].get("next_token")
if not token:
return
params["next_token"] = token
2026 年 10 月 22 日,我们用一个模仿 X meta 字段的本地模拟服务器测了它:读完两页就停了。
每页 100 条,一页就是 $0.50。所以 max_pages=5 让一次运行最多花 $2.50。
第 5 步:先计数,再花钱读推文
计数接口告诉你一个查询能匹配多少条推文,但不返回推文本身:
GET /2/tweets/counts/recent覆盖过去 7 天,所有开发者都能用。GET /2/tweets/counts/all能回到 2006 年,限按量计费和企业版。granularity按minute、hour或day分组,默认是hour。- 全量计数每 31 天一页,同样用
next_token翻页。
curl "https://api.x.com/2/tweets/counts/recent?query=from%3Agithub&granularity=day" \
-H "Authorization: Bearer $X_BEARER_TOKEN"
每个时间段都有 start、end 和 tweet_count。X 提醒,计数可能和搜索结果对不上,因为搜索还会做额外的合规过滤。
推特搜索 API 要多少钱?
截至 2026 年 10 月,搜索每返回一条推文,X 收 $0.005。同一条推文在同一个 UTC 日里返回两次,只收一次钱。
用 X API 费用计算器算算你自己的用量。
第 6 步:用 Weir 的 POST /v1/x/search 搜推文
Weir 是我们做的只读 API,读公开的 X 和 Reddit 数据,看这一节时请记住这一点。它的搜索收 JSON 字段,不用拼运算符字符串。
字段如下:
- 账号:
fromUsers、toUsers和mentions,每个最多 10 个用户名,或者用listId。 - 词:
query、phrase、anyWords、excludeWords、hashtags和language。 - 门槛:
minLikes、minReposts和minReplies。 - 推文类型:
onlyOriginal去掉回复,onlyReplies、onlyLinks和onlyText再缩小范围。 - 时间:
since和until是精确的时间点,也可以用sinceId和untilId。 - 翻页:
sort选latest或top,limit最多 100,再加上cursor。
query 里也能直接写 x.com 的运算符,所以 min_faves: 在这里能用。
curl --request POST \
--url https://api.weirapp.io/v1/x/search \
--header "Authorization: Bearer $WEIR_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"fromUsers":["github"],"query":"-filter:nativeretweets","onlyOriginal":true,"limit":3}'
我们在 2026 年 10 月 22 日通过 Weir 的 MCP 服务器跑了它,MCP 收的字段完全一样。它返回了 GitHub 最新的 3 条推文,花了 4 积分:调用 1 积分,每条推文 1 积分。其中一条,有删减:
{
"id": "2112938664959562081",
"author": { "username": "github", "followersCount": 2724485 },
"likeCount": 518,
"bookmarkCount": 410,
"viewCount": 70748
}
把响应里的 meta.nextCursor 作为 cursor 传回去,请求体其他部分不变,直到它变成 null。在 X 上,最后一页常常还带着 cursor,所以完整翻完会多一次空的 1 积分调用。
- 转推默认会返回。 上面的
-filter:nativeretweets把它们排除了。 - 门槛是 X 自己的过滤。 需要精确门槛时,在代码里再检查一遍
likeCount。
最近搜索、全量搜索还是 Weir:该用哪个?
按任务选:
| 如果你需要 | 用 | 价格,2026 年 10 月 |
|---|---|---|
| 过去 7 天,按 X 的条款 | X 最近搜索 | 每 1,000 条 $5 |
| 更早的推文,每次 500 条 | X 全量搜索 | 每 1,000 条 $5 |
| 随时间变化的匹配数量 | X 计数接口 | 每次 $0.005 或 $0.010 |
| 任意年份,不用 X 开发者应用 | Weir 搜索 | 每 1,000 条 $0.11 到 $0.21 |
Weir 的区间从 $1,000 积分包算到 $5 积分包,已含每次调用的积分。
X API 搜索推文报错或返回空,怎么办?
- 401 Unauthorized: Bearer Token 缺失或不对,就像我们上面的测试。
- 某个运算符报 400:
min_faves:这类 x.com 写法会被拒绝,改用min_likes:。 - 全量搜索返回空页: 没设
start_time,X 只搜了最近 30 天。 - 429 Too Many Requests: 等到响应头
x-rate-limit-reset给出的 Unix 时间再试,详见推特 API 速率限制。
什么时候不适合用 Weir
- 需要和 X 签合同。 用 X 自己的搜索接口。
- 要推文数量统计或私有指标。 只有 X 的 API 能给。
- 每次请求必须返回 500 条。 Weir 每页大约 20 条。
- 只看单价。 TwitterAPI.io 标价每 1,000 条推文 $0.15,搜索也用
from:这类运算符,还能发推。
Weir 只读公开数据,不能发推,和 X、Reddit 都没有关联,也没有获得它们的授权,访问方式可能会变。你的用途是否合规,请看 X 的条款,本文不是法律建议。
常见问题
Twitter Search API 怎么用?
先拿到 Bearer Token,再向 GET /2/tweets/search/recent 发请求,把查询写进 query 参数。响应里有 next_token 就接着翻页。要查 7 天以前的推文,改用 /2/tweets/search/all,并设好 start_time。
推特搜索 API 免费吗?
不免费。X 的价格页没有免费档,截至 2026 年 10 月,搜索每返回一条推文收 $0.005。X 的更新日志说,新的按量计费账号最多能拿 $70 赠送积分。
X API 搜索推文能查多久以前的?
最近搜索只覆盖过去 7 天。按量计费和企业版账号的全量搜索能回到 2006 年 3 月,但不设 start_time 时只返回最近 30 天。
一次请求能拿多少条推文?
截至 2026 年 10 月,最近搜索每次最多 100 条,全量搜索最多 500 条。按量计费账号每个月最多读 300 万条推文。
推特搜索 API 会返回转推吗?
关键词搜索不会。X 的更新日志说,从 2026 年 5 月 4 日起,转推不再出现在关键词搜索的结果里。在 x.com 和 Weir 上,转推默认会返回,加上 -filter:nativeretweets 就能去掉。
参考来源
以下均为英文页面,2026 年 10 月 26 日核对:
- X API 搜索:https://docs.x.com/x-api/posts/search/introduction 、https://docs.x.com/x-api/posts/search-recent-posts 、https://docs.x.com/x-api/posts/search-all-posts
- X API 搜索指南:https://docs.x.com/x-api/posts/search/quickstart/full-archive-search 、https://docs.x.com/x-api/posts/search/integrate/build-a-query 、https://docs.x.com/x-api/posts/search/integrate/operators 、https://docs.x.com/x-api/posts/search/integrate/paginate
- X API 字段:https://docs.x.com/x-api/fundamentals/fields
- X API 计数:https://docs.x.com/x-api/posts/counts/introduction
- X API 价格和速率限制:https://docs.x.com/x-api/getting-started/pricing 、https://docs.x.com/x-api/fundamentals/rate-limits
- X API 更新日志,2026 年 5 月 4 日和 10 月 2 日:https://docs.x.com/changelog
- TwitterAPI.io:https://twitterapi.io/pricing 、https://docs.twitterapi.io/api-reference/endpoint/tweet_advanced_search 、https://docs.twitterapi.io/api-reference/endpoint/create_tweet_v2
- Weir:https://docs.weirapp.io/reference/x/searchX 、https://docs.weirapp.io/pagination 、https://docs.weirapp.io/billing
- 我们的调用,2026 年 10 月 22 日:X 对不带令牌请求返回的 401,以及 Weir 的 search_x 搜 @github(4 积分)