跳转至

API 模块与任务指南

这份文档先回答“为了完成任务应该调用什么”,再链接到逐字段接口参考。 所有调用均通过 ThreadsClient 的异步子客户端完成。

参数来源约定

  • 用户输入:正文、搜索词、主题、位置、投票等业务输入。
  • 受保护账号配置:token、密码、2FA seed;不得出现在源码或日志。
  • 持久设备身份device_iduuidLoginDevice;同一账号长期复用。
  • 前置响应:必须从上一步真实响应提取,例如图片上传返回的 upload_id
  • 运行时生成:会话 ID、上传 ID、追踪 ID;按接口说明生成或交给 SDK。
  • 分页响应:上一页 next_cursor 只能用于同一接口、同一查询的下一页。

任务入口

任务 模块 状态 第一调用
校验已保存的完整账号状态 (verify_session) 登录与当前账号 available AccountAuthClient.get_current_user
账密登录并取得 IGT:2 (login) 登录与当前账号 experimental AuthClient.login
安全编辑当前账号资料 (edit_profile) 资料与主页帖子 available AccountAuthClient.get_current_user
发布文本帖 (create_text_post) 帖子发布与删除 available PostsClient.create_text_post
发布单图帖 (create_image_post) 帖子发布与删除 available PostsClient.upload_image
发布视频帖 (create_video_post) 帖子发布与删除 unavailable 无可用接口
分页采集主页帖子 (collect_profile_threads) 资料与主页帖子 available ProfileClient.list_profile_threads

以下内容按业务模块展开。每个模块先列接口,再列需要多个接口协作的任务。

登录与当前账号

登录、校验会话并读取当前账号身份。

Python 入口:client.auth(仅登录)/ account.auth(登录后)

本模块接口

接口 什么时候调用 状态
账号登录
AuthClient.login
没有可用 IGT:2,并且需要通过账密建立新会话时。 experimental
读取当前账号
AccountAuthClient.get_current_user
校验 AccountState 会话、取得当前 uid,或在资料编辑前读取完整原值时。 available

本模块任务

校验已保存的完整账号状态 verify_session

  • 状态:available
  • 目标:确认 AccountState 对应的真实账号,并取得后续调用使用的资料字段。
  • 前置条件:已从使用者存储恢复完整 AccountState。;每个账号状态携带自己的可选 Proxy;不要让多账号共享可变状态对象。
步骤 调用接口 目的 输入与参数来源 响应与下一步
1 AccountAuthClient.get_current_user
threads.auth.v1.AuthService/GetCurrentUser
调用 get_current_user(edit=False) 校验会话。 先通过 client.account(state) 创建账号客户端,再传 edit=False。 核对 pk、username;任务结束后保存 account.state。

账密登录并取得 IGT:2 login

  • 状态:experimental
  • 目标:通过 CAA/Bloks 登录生成会话并即时核对账号身份。
  • 前置条件:准备账号、密码和可选 TOTP seed;Proxy 可省略。;生产容器已经固定加载仓库版本化 keybox.xml;SDK 用户不传 keybox。;登录成功后由使用者持久化返回的 AccountState。
步骤 调用接口 目的 输入与参数来源 响应与下一步
1 AuthClient.login
threads.auth.v1.AuthService/Login
提交账号、密码、可选 2FA seed 和可选账号代理;Go server 生成首次登录设备。 代理可省略;传递 Proxy(host, port, protocol, username, password)。username/password 成对可选,省略时用于 IP 白名单代理;协议支持 HTTP、HTTPS、SOCKS5、SOCKS5H。配置字符串只能先通过 Proxy.from_url() 转成强类型对象。不要把密码、2FA seed 或代理凭据写入日志。 核对 success、account_state、verified_user.username 和 assurance;把 account_state 保存到使用者自己的存储。
步骤间参数传递
  • LoginResponse.account_stateThreadsClient.account(state):后续独立任务从使用者存储加载完整状态;SDK 不负责持久化。
当前缺失能力
  • 软件环境尚不能证明 session 可长期稳定;stable_for_automation 必须保持 false,直到硬件证明和存活观测通过。

资料与主页帖子

读取用户资料、保存当前账号资料并分页采集主页帖子。

Python 入口:account.profile

本模块接口

接口 什么时候调用 状态
读取指定用户资料
ProfileClient.get_user_info
已知用户 ID,需要读取公开资料和账号统计时。 available
分页读取主页帖子
ProfileClient.list_profile_threads
采集指定账号主页帖子、验证发帖或验证删除结果时。 available
保存当前账号资料
ProfileClient.edit_profile
修改用户名、显示名、简介、隐私状态或外部链接时。 available

本模块任务

安全编辑当前账号资料 edit_profile

  • 状态:available
  • 目标:修改指定资料字段,同时避免整表回传接口清空未携带的原值。
  • 前置条件:已从使用者存储恢复完整 AccountState。
步骤 调用接口 目的 输入与参数来源 响应与下一步
1 AccountAuthClient.get_current_user
threads.auth.v1.AuthService/GetCurrentUser
先调用 get_current_user(edit=True) 读取完整当前资料。 edit=True。 保存 username、full_name、biography、is_private、external_url 和 bio_links。
2 ProfileClient.edit_profile
threads.profile.v1.ProfileService/EditProfile
只替换目标字段,其余字段使用上一步原值并整表提交。 username/first_name/biography/is_private 必须完整回传;设备身份由 AccountState 内部提供。 核对返回资料,再调用 get_current_user(edit=True) 验证保存结果。
步骤间参数传递
  • CurrentUser.username/full_name/biography/is_private/external_urlEditProfileRequest 对应字段:未修改字段必须回填原值,不能省略。
当前缺失能力
  • 头像和封面需要独立上传端点,当前契约未实现。
  • location 不是 EditProfile 端点字段。

分页采集主页帖子 collect_profile_threads

  • 状态:available
  • 目标:读取指定账号主页帖子,并使用游标持续翻页。
  • 前置条件:已从使用者存储恢复完整 AccountState。;准备目标 user_id。
步骤 调用接口 目的 输入与参数来源 响应与下一步
1 ProfileClient.list_profile_threads
threads.profile.v1.ProfileService/ListProfileThreads
首次调用不传 max_id,读取 threads 强类型结果。 user_id 为目标账号;exclude_reposts 按采集需求设置。 消费 threads[].items[].post,并读取 next_cursor。
2 ProfileClient.list_profile_threads
threads.profile.v1.ProfileService/ListProfileThreads
next_cursor 非空时继续请求下一页。 将上一页 next_cursor 传入下一次 max_id。 next_cursor 为空时结束;raw_json 只用于未建模字段排错。
步骤间参数传递
  • ProfileThreadsPage.next_cursorListProfileThreadsRequest.max_id:分页游标来自上一次真实响应。

帖子发布与删除

检查文本、发布文本帖、上传图片、发布单图帖和删除帖子。

Python 入口:account.posts

本模块接口

接口 什么时候调用 状态
检查冒犯文本
PostsClient.check_offensive_text
发帖前希望执行上游文本风险检查时;当前真实上游返回 404。 known-upstream-error
创建文本帖
PostsClient.create_text_post
发布不带图片或视频的 Threads 文本帖子时;传 reply_id 时同一接口用于发布回复(评论)。 available
上传图片
PostsClient.upload_image
创建单图帖前上传 WebP 图片二进制时。 available
创建单图帖
PostsClient.create_image_post
UploadImage 成功后,把已上传图片发布为单图帖子时。 available
删除帖子
PostsClient.delete_post
删除当前账号已有帖子或清理测试帖子时。 available
点赞帖子
PostsClient.like_media
对指定帖子点赞时。 available
取消点赞
PostsClient.unlike_media
撤销此前对某帖的点赞时。 available

本模块任务

发布文本帖 create_text_post

  • 状态:available
  • 目标:使用当前账号和持久设备身份创建纯文本帖子。
  • 前置条件:已从登录响应或使用者存储取得完整 AccountState。;写操作已获得明确授权。
步骤 调用接口 目的 输入与参数来源 响应与下一步
1 PostsClient.create_text_post
threads.posts.v1.PostsService/CreateTextPost
用 ThreadsClient.account(state).posts 提交 caption 和可选发帖功能字段。 AccountState 自动提供 uid、完整设备、Session、代理与 App 版本;纯文本帖不需要先上传媒体。 核对 Media 的作者、caption、code 和 permalink,并把 account.state 的刷新结果写回使用者存储。
2 ProfileClient.list_profile_threads
threads.profile.v1.ProfileService/ListProfileThreads
重新读取账号主页确认帖子真实出现。 user_id 使用 AccountState.uid。 在 threads[].items[].post 中找到新帖子。
步骤间参数传递
  • LoginResponse.account_state 或使用者存储CreateTextPostRequest.account_state:每个独立任务显式传入完整状态;响应状态覆盖保存后供下一任务使用。

发布单图帖 create_image_post

  • 状态:available
  • 目标:先上传 WebP 图片,再用上传结果创建单图帖子。
  • 前置条件:已从登录响应或使用者存储取得完整 AccountState。;准备 WebP 图片字节及真实宽高。;写操作已获得明确授权。
步骤 调用接口 目的 输入与参数来源 响应与下一步
1 PostsClient.upload_image
threads.posts.v1.PostsService/UploadImage
上传图片二进制及真实宽高。 image_data 为 WebP bytes;original_width/original_height 来自图片元数据。 要求 status=ok,并保存响应 upload_id。
2 PostsClient.create_image_post
threads.posts.v1.PostsService/CreateImagePost
使用上传响应创建单图帖。 upload_id 必须使用 UploadImageResult.upload_id;宽高与上传步骤保持一致。 核对 media_type=1、caption、image_versions2 和帖子作者。
3 ProfileClient.list_profile_threads
threads.profile.v1.ProfileService/ListProfileThreads
重新读取账号主页确认图片帖真实出现。 user_id 使用发帖 uid。 在 threads[].items[].post 中找到新帖子和图片字段。
步骤间参数传递
  • UploadImageResult.upload_idCreateImagePostRequest.upload_id:图片上传返回值必须原样传给创建接口。
  • UploadImageRequest.original_width/original_heightCreateImagePostRequest.original_width/original_height:创建接口使用与上传图片一致的真实尺寸。

发布视频帖 create_video_post

  • 状态:unavailable
  • 目标:上传视频并创建视频帖子。
  • 前置条件:无

当前没有可执行调用步骤。

当前缺失能力
  • 当前 Proto、Go SDK 和 Python 门面均没有视频上传 RPC。
  • 当前没有视频 configure RPC、视频转码状态查询或封面上传工作流。
  • 在完成真实抓包、契约和黑盒测试前,禁止复用 UploadImage/CreateImagePost 伪装视频发布。

回复采集

分页读取指定账号的回复列表。

Python 入口:account.replies

本模块接口

接口 什么时候调用 状态
分页读取账号回复
RepliesClient.list_profile_replies
采集指定账号发布的回复时。 available
## 搜索与主题校验

关键词搜索以及发帖主题标签校验。

Python 入口:account.search

本模块接口

接口 什么时候调用 状态
关键词搜索
SearchClient.keyword_search
按关键词查找 Threads 账号或内容时。 available
校验发帖主题
SearchClient.validate_tag
发帖前需要确认主题标签是否有效或敏感时。 available
## 推荐用户

分页读取 Threads 推荐账号。

Python 入口:account.feed

本模块接口

接口 什么时候调用 状态
读取推荐用户
FeedClient.list_recommended_users
需要获取 Threads 推荐账号或继续推荐流分页时。 available
## 关系状态

读取与目标账号之间的关注、拉黑和静音状态。

Python 入口:account.friendships

本模块接口

接口 什么时候调用 状态
读取关系状态
FriendshipsClient.get_friendship_status
需要确认当前账号是否关注、被关注、拉黑或静音目标账号时。 available
关注用户
FriendshipsClient.follow_user
关注目标账号时。 available
取消关注
FriendshipsClient.unfollow_user
取消对目标账号的关注时。 available