跳转至

模块与任务

本页由 docs/llms-metadata.jsonworkflows 段自动生成, 发布门禁会校验其中每个 RPC 真实存在且可调用。 逐 RPC 的字段契约见接口参考

模块划分

模块 门面 RPC 数 覆盖
AndroidApi x.android.AndroidClient 1 login
MediaApi account.media 1 upload
PostsApi account.posts 8 create, delete, like, quote, reply, retweet, unlike, unretweet
TimelineApi account.timeline 2 home, user_tweets
UsersApi account.users 4 me, profile_analytics, profile_modules, by_rest_id

任务编排

首次接入一个账号 first_login

目标:用账号密码(可选 2FA)完成 Android 冷启动登录,产出可长期复用的完整状态。

前置条件: - 已启动 Go server 并可连通 - 持有自有测试/业务账号的用户名、密码,账号开启 2FA 时还需当前验证码

调用 目的 输入与来源 响应与下一步
1 x.android.AndroidClient.login
AndroidApi/Login
执行跨端点登录状态机并即时验证会话归属。 username / password 来自调用方;totp 为当前 2FA 码,账号无 2FA 时省略;version 与 proxy 可选。 返回完整 AndroidAccountState。★必须持久化★——其中含设备身份,后续调用复用。

步骤间参数传递

  • LoginResponse.state调用方持久化存储:状态含明文 token 与 secret,必须加密存储;后续每个 RPC 都从这里取。

注意

同一账号不要并发登录,也不要在每次操作前重新登录——保存的状态可长期复用。 成功判据不是 HTTP 2xx,而是会话中的 user_id/screen_name 与登录账号一致且服务端已 whoami 复核。

发布纯文字推文 post_text

目标:用已保存的状态发一条文字推文,并在需要时删除。

前置条件: - 已持有登录产出的完整 AccountState

调用 目的 输入与来源 响应与下一步
1 account.posts.create
PostsApi/CreatePost
发布文字推文。 state 来自持久化存储;text 为正文;media_ids 留空。 响应 tweet.tweet_id 非空即成功;同时保存刷新后的 state。
2 account.posts.delete
PostsApi/DeletePost
按 id 删除刚发布的推文(可选)。 tweet_id 使用上一步响应的 tweet.tweet_id。 无异常即删除成功;该操作幂等。

步骤间参数传递

  • CreatePostResponse.tweet.tweet_idDeletePostRequest.tweet_id:删帖必须用发帖响应返回的 id。

注意

CreatePost 非幂等:超时后先查证是否已发出再决定重试,盲目重试会产生重复推文。

发布带图推文 post_with_media

目标:先上传媒体拿到 media_id,再用它发布带图推文。

前置条件: - 已持有完整 AccountState - 准备好图片字节与其 MIME 类型

调用 目的 输入与来源 响应与下一步
1 account.media.upload
MediaApi/UploadMedia 🔷
分段上传媒体(INIT→APPEND→FINALIZE 在单个 RPC 内完成)。 data 为图片二进制;mime_type 如 image/jpeg。 响应 media_id 非空即成功。media_id 有有效期,应尽快使用。
2 account.posts.create
PostsApi/CreatePost
发布引用该媒体的推文。 media_ids 传上一步的 media_id;text 为正文。 响应 tweet.tweet_id 非空即成功。

步骤间参数传递

  • UploadMediaResponse.media_idCreatePostRequest.media_ids:上传返回值原样放入 media_ids 列表;跨账号不可复用。

注意

两步都非幂等,且 media_id 有有效期——上传后应立即发帖,不要缓存待用。

互动(点赞 / 转发及其撤销) engage

目标:对目标推文点赞、转发,或撤销这些操作。

前置条件: - 已持有完整 AccountState - 已知目标推文 id

调用 目的 输入与来源 响应与下一步
1 account.posts.like
PostsApi/Like 🔷
点赞目标推文(撤销用 Unlike)。 tweet_id 为目标推文 id。 无异常即成功;幂等,重复点赞不叠加。
2 account.posts.retweet
PostsApi/Retweet 🔷
转发目标推文。 tweet_id 为目标推文 id。 无异常即成功;幂等。
3 account.posts.unretweet
PostsApi/Unretweet 🔷
撤销转发。 ★tweet_id 必须是原始推文 id,不是转发产生的那条推文的 id★。 无异常即成功;传错 id 会静默失败。

步骤间参数传递

  • 原始推文 idUnretweetRequest.tweet_id:撤销转发用的是被转发的原推文 id,这一点最容易传错。

注意

四个互动操作都幂等,但都会在目标推文上留下对方可见的痕迹。

读取资料与时间线 read_profile_and_timeline

目标:读取自身或指定用户的资料,以及主页/用户推文时间线。

前置条件: - 已持有完整 AccountState

调用 目的 输入与来源 响应与下一步
1 account.users.me
UsersApi/Me 🔷
读取当前登录账号自身资料,同时可用于确认会话有效。 只需 state。 user 非空且 rest_id 与当前会话一致。
2 account.users.by_rest_id
UsersApi/UserByRestID 🔷
按数字 id 读取指定用户资料。 ★rest_id 是数字用户 id,不是 @screen_name★。可先由 Me 或其它读取接口获得。 user 非空。
3 account.timeline.home
TimelineApi/HomeTimeline 🔷
读取主页时间线。 只需 state。 raw_json 为可解析的非空 JSON,由调用方自行解析。

步骤间参数传递

  • UserResponse.user.rest_idUserByRestIDRequest.rest_id / UserTweetsRequest.rest_id:数字 id 在读取类接口之间传递,不要用 screen_name 代替。

注意

时间线与资料模块以 raw_json 原样返回,结构随上游变动——请做容错解析,不要硬编码路径。

🔷 标记的 RPC 已实现但未经真机验收,状态口径见接口验证状态