推特历史数据 API 2026:按日期查历史推文,回溯到 2006 年
推特历史推文 API 怎么选:X 官方全量搜索和第三方 API 的价格对比,日期换推文 ID 的方法,能直接跑的 Python 脚本,以及 2012 年推文的真实返回结果。
Tarun Khatri
发布于 · 更新于 · 阅读约 7 分钟 · Read in English
要拿推特历史数据,就按日期范围搜索 X 的全量存档,用 X 官方 API 或更便宜的第三方 API 都行。
这篇写给需要旧推文的研究者和开发者。你会看到每条路线的价格、把日期换成推文 ID 的技巧,以及一个能按天遍历任意时段的脚本。文中的 Weir 是我们做的 API,读我们的观点时请记住这一点。
下面这条命令取回一个账号在 2012 年某一天的推文:
curl --request POST \
--url https://api.weirapp.io/v1/x/search \
--header "Authorization: Bearer $WEIR_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"fromUsers":["MarsCuriosity"],"since":"2012-08-06T00:00:00Z","until":"2012-08-07T00:00:00Z","limit":3}'
推特历史数据去哪里拿?
先想清楚三件事:要谁的推文,要多少,必须遵守谁的条款。截至 2026 年 10 月:
| 路线 | 能查到 | 每千条推文 | 适合 |
|---|---|---|---|
| X 官方全量搜索 | 2006 年 3 月 | $5 | 官方数据、大批量 |
| Weir 搜索 | 2006 年 3 月 | $0.105 到 $0.21 | 便宜读取、AI 智能体 |
| TwitterAPI.io | 未说明 | $0.15 | 最低价、能发推 |
| 你自己的 X 存档 | 你的第一条推文 | 免费 | 只限自己的账号 |
| 研究数据集 | 固定时段 | 免费,只有 ID | 复现旧研究 |
只要自己的推文,先申请 X 的数据存档,步骤见批量下载推特推文。
X 官方的推特历史推文 API 怎么用?
X 官方的路线是 GET /2/tweets/search/all,也就是全量存档搜索。X 的文档写明,它向按量计费和 Enterprise 客户开放。
X 文档列出的规则,截至 2026 年 10 月:
- 能查多早:公开推文回溯到 2006 年 3 月。最近搜索只覆盖过去 7 天。
- 每页多少:每次请求最多 500 条,用
next_token翻下一页。 - 多快:每个应用每秒 1 次请求,每 15 分钟最多 300 次。
- 多少钱:每读一条推文 $0.005,每月最多读 300 万条。
- 怎么定窗口:日期放在
start_time和end_time,推文 ID 放在since_id和until_id。开始和结束各只能选一种写法。
X 的价格页还列了全量计数接口,每次请求 $0.010。先数一数有多少条,再决定要不要付钱去读。
第 1 步:把日期换成推文 ID
2010 年 11 月 4 日以后的每条推文,ID 里都藏着它的发布时间。
推特的 Snowflake 代码把“距那天的毫秒数”放在 ID 的高位。把时间戳左移 22 位,就得到那一刻最小的 ID:
from datetime import datetime
X_EPOCH_MS = 1288834974657 # X 的 ID 纪元:2010 年 11 月 4 日
def date_to_id(when):
ms = int(datetime.fromisoformat(when).timestamp() * 1000)
return str((ms - X_EPOCH_MS) << 22)
print(date_to_id("2012-08-06T05:30:00Z")) # 232347770680246272
print(date_to_id("2012-08-06T05:40:00Z")) # 232350287262646272
反过来算,用我们的推文 ID 转日期工具,在浏览器里就能看到发布时间。
2010 年 11 月以前的推文 ID 很小,里面没有时间。查那几年,用 since 和 until 按整天查。
第 2 步:搜索一个日期窗口
Weir 的搜索接受 sinceId 和 untilId 作为窗口边界,两端都不包含。
我们用上面两个 ID,搜了好奇号火星车的账号在着陆那一晚的推文:
{
"fromUsers": ["MarsCuriosity"],
"sinceId": "232347770680246272",
"untilId": "232350287262646272",
"limit": 3
}
2026 年 10 月 26 日我们又跑了一次,返回 3 条推文,扣了 4 积分。最新的一条,删减后如下:
{
"id": "232348380431544320",
"text": "I'm safely on the surface of Mars. GALE CRATER I AM IN YOU!!! #MSL",
"createdAt": "2012-08-06T05:32:25.000Z",
"likeCount": 10095,
"retweetCount": 44889,
"viewCount": null
}
这条推文的意思是“我已安全降落火星表面”。计数为 null 表示 X 没有提供,不是零。我们取到的 2012 年推文都没有浏览量。
第 3 步:一天一天地遍历一长段时间
一长段时间,就是很多个小窗口,每个窗口翻到底。脚本中途崩了,你只损失一天,不用从头再来。
import os, requests
API = "https://api.weirapp.io/v1/x/search"
HEADERS = {"Authorization": f"Bearer {os.environ['WEIR_API_KEY']}"}
def window(body, max_pages=50):
for _ in range(max_pages):
r = requests.post(API, headers=HEADERS, json=body, timeout=60)
r.raise_for_status() # 402(积分用完)或 429(太快)时停止
page = r.json()
yield from page["data"]
body["cursor"] = page["meta"]["nextCursor"]
if not body["cursor"]:
return
然后循环你要的每一天:
from datetime import date, timedelta
day = date(2012, 8, 1)
while day < date(2012, 9, 1):
nxt = day + timedelta(days=1)
body = {"fromUsers": ["MarsCuriosity"], "limit": 20,
"since": f"{day}T00:00:00Z", "until": f"{nxt}T00:00:00Z"}
for post in window(body):
print(post["createdAt"], post["id"], post["text"][:60])
day = nxt
把 fromUsers 换成 query,收集的就是一个话题,而不是一个账号。能加哪些筛选条件,见推特高级搜索语法大全。
每个窗口最后会多一次空调用,扣 1 积分,这是正常的。
不写代码,让 AI 智能体帮你查
把 Weir 接进 Claude、Cherry Studio 或 Trae 之后,直接用中文提问就行,接法见推特 MCP 服务器。粘贴这段:
用 Weir 的 search_x 工具,查 @MarsCuriosity 在 2012-08-06 05:30 到 05:40(UTC)之间发的推文,limit 设为 3。按时间列出发布时间、点赞数和原文,并把原文翻译成中文。
智能体会调用一次搜索,拿到的就是上面那 3 条推文,花 4 积分。
推特历史数据要花多少钱?
截至 2026 年 10 月,每条路线读取 1 万条推文的费用:
在 Weir 上,一次搜索扣 1 积分,每条推文再扣 1 积分,X 每次大约给 20 条。所以 1 万条推文大约要 10,500 积分。
每月 5,000 免费积分,大约够读 4,700 条推文。
TwitterAPI.io 按条算比我们便宜。 它的文档没写搜索能回溯多远,所以先用你要的最早日期试一下。
速度上,X 官方占优:
有免费的推特历史数据集吗?
有几个,但要么只有推文 ID,要么不对外开放,而且都到不了今天:
- 2006 到 2009 年:西班牙奥维耶多大学的数据集列出约 15 亿条推文的 ID,按 CC BY 4.0 免费使用。它 2020 年检查时,85.5% 的推文还在线。
- 2012 到 2022 年:沃顿商学院的 1% 抽样在 2022 年 11 月停止,原因是流式 API 的变化。只有沃顿和安纳伯格的研究人员能用。
- 2006 到 2017 年:美国国会图书馆保存了这些年公开推文的文字,但处于封存期。
要把 ID 还原成推文,用 GET /v1/x/posts 一次查 100 个。已删除的推文会出现在 meta.notFound 里,不计费。
用 ID 重建数据集的完整做法,见推特学术研究数据(英文)。
查不到怎么办?
- ID 窗口漏掉了 2006 到 2010 年的推文:早期 ID 不带时间,那几年请按日期查。
- 翻到第二页返回
400:说明请求体变了。cursor 只对生成它的那个请求有效。
什么时候不适合用 Weir
- 你需要 X 自己的条款或合同:用 X 的全量搜索。
- 你这周就要几百万条推文:X 每页 500 条,比我们的 20 条快得多。
- 你只看每条的价格:TwitterAPI.io 标价每千条 $0.15,还能发推和推送实时数据流。
Weir 只读公开数据,不能发推。X 的服务条款禁止未经 X 书面许可的抓取,请自行确认适用于你的规定,本文不构成法律建议。
常见问题
有没有推特历史数据 API?
有。X 的全量搜索 GET /2/tweets/search/all 能返回 2006 年 3 月以来的公开推文,向按量计费和 Enterprise 账号开放,每条 $0.005。Weir 这类第三方搜索 API 也能查到同样的年份,价格更低。
推特历史推文最早能查到什么时候?
X 的文档说是 2006 年 3 月。2026 年 10 月 21 日,我们自己的搜索返回了第 20 号推文“just setting up my twttr”,发于 2006 年 3 月 21 日。已删除的推文和受保护账号的推文永远查不到。
推特历史数据多少钱?
截至 2026 年 10 月,X 官方 API 每条 $0.005,1 万条就是 $50。同样 1 万条,在 Weir 最小的套餐上约 $2.10,TwitterAPI.io 标价约 $1.50。
能免费获取推特历史推文吗?
部分可以。X 官方 API 读推文没有免费档。Weir 每月 5,000 免费积分,大约够读 4,700 条推文。推文 ID 数据集是免费的,但把 ID 还原成推文要花积分。
参考来源
以下均为英文页面。
- X API 搜索介绍(2026 年 10 月 26 日核对):https://docs.x.com/x-api/posts/search/introduction
- X API 全量搜索快速入门(2026 年 10 月 26 日核对):https://docs.x.com/x-api/posts/search/quickstart/full-archive-search
- X API 全量搜索接口参考(2026 年 10 月 21 日核对):https://docs.x.com/x-api/posts/full-archive-search
- X API 速率限制(2026 年 10 月 26 日核对):https://docs.x.com/x-api/fundamentals/rate-limits
- X API 按量计费价格(2026 年 10 月 26 日核对):https://docs.x.com/x-api/getting-started/pricing
- 推特 Snowflake ID 代码(2026 年 10 月 21 日核对):https://github.com/twitter-archive/snowflake/blob/snowflake-2010/src/main/scala/com/twitter/service/snowflake/IdWorker.scala
- 奥维耶多大学 2006 到 2009 年推文 ID 数据集(2026 年 10 月 21 日核对):https://portalinvestigacion.uniovi.es/documentos/668fc44db9e7c03b01bd94cd
- 沃顿商学院推文数据库(2026 年 10 月 21 日核对):https://research-it.wharton.upenn.edu/data/tweet-database/
- 美国国会图书馆推特存档说明(2017 年 12 月 26 日):https://blogs.loc.gov/loc/2017/12/update-on-the-twitter-archive-at-the-library-of-congress-2/
- X 服务条款,2026 年 10 月 9 日生效(2026 年 10 月 22 日核对):https://x.com/en/tos
- TwitterAPI.io 价格(2026 年 10 月 26 日核对):https://twitterapi.io/pricing
- TwitterAPI.io 高级搜索接口(2026 年 10 月 21 日核对):https://docs.twitterapi.io/api-reference/endpoint/tweet_advanced_search
- TwitterAPI.io 发推接口(2026 年 10 月 21 日核对):https://docs.twitterapi.io/api-reference/endpoint/create_tweet_v2
- TwitterAPI.io 实时流规则(2026 年 10 月 21 日核对):https://docs.twitterapi.io/api-reference/endpoint/add_webhook_rule
- Weir 计费与速率限制:https://docs.weirapp.io/billing 和 https://docs.weirapp.io/errors
- 我们用 Weir 对 @MarsCuriosity 做的搜索,2026 年 10 月 21 日和 26 日