WEIR

推特历史数据 API 2026:按日期查历史推文,回溯到 2006 年

推特历史推文 API 怎么选:X 官方全量搜索和第三方 API 的价格对比,日期换推文 ID 的方法,能直接跑的 Python 脚本,以及 2012 年推文的真实返回结果。


发布于 · 更新于 · 阅读约 7 分钟 · Read in English

封面图:回到 2006 年的任意一天

要拿推特历史数据,就按日期范围搜索 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 万条推文的费用:

读取 1 万条历史推文
X 官方 API$50
Weir,$5 套餐约 $2.10
TwitterAPI.io约 $1.50

在 Weir 上,一次搜索扣 1 积分,每条推文再扣 1 积分,X 每次大约给 20 条。所以 1 万条推文大约要 10,500 积分。

每月 5,000 免费积分,大约够读 4,700 条推文。

TwitterAPI.io 按条算比我们便宜。 它的文档没写搜索能回溯多远,所以先用你要的最早日期试一下。

速度上,X 官方占优:

150,000X 官方 API 每 15 分钟最多可读的推文
300Weir 免费档每分钟的推文
1,200Weir 任意一次购买后每分钟的推文

有免费的推特历史数据集吗?

有几个,但要么只有推文 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 还原成推文要花积分。

参考来源

以下均为英文页面。