← 返回博客
技术进阶2026-10-27·Digital Footprint Health Team

用 X API 写删除脚本:令牌、权限范围与刷新,一次讲清

X API删除脚本令牌鉴权数据隐私本机处理

想批量删掉几年前的旧推文,很多人第一反应是去搜"删除脚本",然后卡在第一步:怎么让脚本登录上你的 X 账号。官方 API 的鉴权看着吓人,其实就三件事:令牌从哪来、令牌能用多久、它能删什么。把这三件事弄明白,后面的删除逻辑反而是最简单的部分。

一、官方 API 能删什么,不能删什么

先说清楚限制,免得白忙活。X 的 API 对删除有硬性门槛:免费层(Free)基本拿不到删除权限,调删除接口会直接返回 403。要删推文,通常得用 Pro 或更高层级,并且走用户上下文授权。API 只能删你自己账号下的推文,不能删别人的,也不能删转推里别人写的内容。

还有一条老限制经常被忽略:通过 API 一次最多处理你最近 3200 条推文范围内的内容。更早的历史,得先下载完整归档,再针对归档里的推文 ID 逐条操作。换句话说,归档和 API 是两套配合使用的工具:归档负责把老数据捞出来,API 负责按 ID 精准删除,不是二选一。

这里有个实际影响:如果你账号有上万条推文,想清掉 2015 年的内容,光靠 API 翻页是翻不到的,必须先有归档。很多人以为写了脚本就能一把梭,结果卡在根本读不到那么老的数据,就是这个原因。

二、三种令牌,别拿错

鉴权的核心是"令牌"(token)。不同场景用不同的令牌,拿错了一定返回 401。

令牌类型怎么来能删推文吗适合谁
应用令牌(App-only Bearer)开发者后台直接生成不能只读分析、查数据
用户令牌(User Context,OAuth 1.0a)用户授权后换取能删自己推文
OAuth 2.0 用户上下文授权码流程换取能(需对应 scope)新应用、网页端

如果你只是想删自己的旧推文,用"用户令牌"那条路最稳。应用令牌看着简单,但它只有应用的身份,没有你的身份,调删除接口会直接被拒。要区分也很简单:应用令牌通常以固定前缀开头且只跟在应用配置里;用户令牌是用户授权后换来的,和具体账号绑定。

三、权限范围(scope)怎么填才不会 401

OAuth 2.0 授权时要声明 scope。删推文需要 tweet.read 和 tweet.write,少一个都不行。很多人踩坑是把 read 写成了 readonly,或者漏了 write,结果授权成功了但一调删除就报错。这种错误特别烦:授权弹窗明明点了同意,代码却告诉你没权限。

一个实用的做法:授权完成后,把返回的权限范围打印出来核对一遍,确认同时包含读和写,再开始写删除逻辑。这一步只要 30 秒,能省下后面一小时的排查。如果返回里只有 read 没有 write,回去重新走授权流程,别在代码里瞎改。

四、令牌会过期,刷新比重新申请更省事

用户令牌不是永久的。OAuth 1.0a 的令牌相对长效,能撑很久;但 OAuth 2.0 的 access token 通常几小时就过期,需要靠 refresh token 换新。把刷新逻辑写进脚本,比每次手动去后台重新授权要省心得多。

但要注意两点。第一,refresh token 本身也要安全保存,它和 access token 一样敏感。第二,有些配置下刷新一次后旧 token 立即失效。所以脚本里建议先换到新 token、验证能用,再写回本地存储,避免刷新到一半崩了、新旧都没有的尴尬。

五、一个最小可运行示例

下面是一段思路(伪代码),重点看结构而不是某行语法。真实接口名和参数以官方文档为准。

  • 用本地存好的 refresh token 换 access token;
  • 读归档或数据库里的目标推文 ID 列表;
  • 在每小时限速内逐条调用删除接口;
  • 成功的记下来,失败的退避重试;
  • 全部跑完输出一份删除报告。

限速是新手最容易翻车的地方。官方对每个接口有独立配额,删推文和读推文分开算。下面这张表是常见档位,具体数字以你账号层级为准:

操作大致限速超限后果
读单条推文每 15 分钟数百次返回 429,需等待
删除推文每 15 分钟数十次返回 429,需退避
批量读时间线更低频容易被限流

建议每删一条之后 sleep 一小段,或者按返回头里的剩余配额动态调整速度,别一口气并发打满。并发越高不代表越快,反而更容易被限流导致整体更慢。

六、把密钥留在自己机器上

最后也是最重要的一点:令牌、refresh token、API key 全都只存在你本地,不要写进会公开分享的脚本,更不要提交到公开仓库。一个常见失误是把含密钥的脚本推到了 GitHub,几小时内就被机器人扫走滥用,账号直接被封。

如果你不想自己折腾整套鉴权,也可以用本机运行的工具:上传 X 数据归档,在本地解析并标记要删的推文,再决定要不要走 API 删除。密钥始终不离开你的电脑,整体风险低很多。哪怕最后一步才用 API,前面的解析和筛选都在本地完成,敏感数据从不上传。

七、常见报错与应对

即便鉴权都正确,删推文时仍可能撞上几个固定报错。401 表示令牌失效或 scope 不对,先换令牌、再核对 scope。403 通常是层级不够,免费层调删除必现,得升级到 Pro 或更高。429 是触发限速,按返回头的剩余配额退避几秒再继续,别硬扛。把这三种报错和处理方式写进脚本日志,跑完一眼就能看出卡在哪。

还有一个容易被忽略的点:删除接口偶尔会返回成功但推文还在。遇到这种情况,别立刻重试同一条,先单独查一下这条推文的状态,确认是真删了还是接口抖动。给脚本加一个删后核对的小步骤,比盲目重试更稳,也能避免同一条被反复打、把限速打满。

关于 digital-footprint-health.shop:这是一个在本机运行的隐私体检工具,解析你的 X 归档生成风险清单,支持按条删除风险推文,全程数据不出本机。你可以在 首页 了解工作原理,或到 博客 看更多数据安全实践。

常见问题

免费 X 账号能用 API 删推文吗?

基本不能。删除接口需要 Pro 及以上层级的权限,免费层通常只能做只读操作,调删除会返回 403。

应用令牌为什么删不了我的推文?

应用令牌只有"应用身份",没有"你的身份"。删推文必须走用户上下文授权拿到的用户令牌。

为什么授权成功了还是 401?

多半是 scope 漏了 tweet.write,或者 read/write 拼写和官方不一致。授权后打印 scope 核对即可。

令牌过期了必须手动重新授权吗?

OAuth 2.0 可以用 refresh token 自动换新;把刷新逻辑写进脚本就能免手动。OAuth 1.0a 的令牌相对长效。

脚本里的密钥怎么存才安全?

只放本地文件、不进版本库、不写进会分享的代码片段;用完的日志里也别打印明文令牌。

检查你自己的 X/Twitter 数字足迹

免费本机扫描,你的归档永不离开电脑。

免费开始体检

相关阅读

发布于 2026-10-27,最后更新于 2026-10-27。