go-twitter-api¶
Go 实现的 X(Twitter)客户端协议执行器,通过 gRPC 为 Python 应用提供异步调用能力。
这不是 X 官方 API
本项目封装的是 X 客户端私有协议(api.x.com / jf.x.com 上的 onboarding、GraphQL、REST 端点),
与官方公开 API v2 的契约完全不同。不要用官方文档的字段名或行为假设来调用本项目。
它做什么¶
| 层 | 职责 |
|---|---|
| Go gRPC server | 协议状态机、签名、设备证明、TLS 客户端指纹、编解码、上游错误分类 |
Python twitter_sdk |
grpc.aio 异步薄门面,强类型入参与返回 |
| 调用方(你) | 调度、持久化、重试、幂等、账号锁 |
本项目不含任务编排、数据库、重试队列或账号池。这些是调用方业务层的职责——刻意如此, 因为不同业务对幂等边界与并发策略的要求差异极大。
三条必须先理解的约定¶
1. 平台是命名空间维度,不是运行时参数¶
from twitter_sdk import x
client = x.android.AndroidClient("127.0.0.1:50051") # 正确
client = XClient(platform="android") # 本项目不存在这种写法
平台在账号生命周期内不变,因此固定在导入层:x.android / x.ios / x.web。
gRPC 侧同样按平台分 service。当前仅 Android 落地,详见接口验证状态。
2. 完整状态往返,Go 侧无状态¶
除 Login 外,每个 RPC 都接收并返回完整 AccountState(账号 + 完整设备 + Session + App 版本)。
state = await client.login(username=U, password=P, totp=CODE)
# ★ 必须持久化 state;它含设备身份
acct = client.account(state)
tweet = await acct.posts.create("hello")
save(acct.state) # 每次 RPC 后状态可能刷新,保存最新的
首次登录成功后必须保存返回的设备,后续调用禁止重新生成。 重新生成设备等同于换了一台新手机 登录,会显著提高风控命中率。
3. 成功判据看业务字段¶
HTTP 2xx、或响应里出现了某个 token 字段,都不是成功。每个 RPC 的业务成功判据写在
接口参考与 capabilities.json 里。
登录尤其严格:必须由完整响应正面确认目标账号(user_id / screen_name 与登录账号一致,
且服务端已用 whoami 复核)。
从哪开始¶
- 第一次接入 → 快速开始
- 让 AI 帮你写调用代码 → AI 直接接入
- 查某个接口怎么调 → 接口参考
- 确认某功能能不能用 → 接口验证状态
- 拿 SDK 包 → Python SDK 下载