关于 threads
threads 是通过 curl 和 jq 操作 Threads API 的技能,涵盖发布文本、图片、视频和轮播帖子、查看近期帖子,以及凭据管理与发布限制。
主要功能
- 01使用 curl 和 jq 调用 Threads API
- 02发布文本和媒体帖子
- 03创建轮播帖子
- 04列出近期帖子
- 05凭据与发布规则说明
适用场景
- 01向 Threads 账号发布已确认的帖子
- 02分享图片、视频或轮播内容
- 03查看近期帖子并获取永久链接
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ acedatacloud/ skills --skill threads安装后在 Claude Code 中输入/threads确认已加载。
详细介绍
使用 curl + jq 调用 Threads API(graph.threads.net)。连接器会注入一个凭据:$THREADS_ACCESS_TOKEN(长期有效的 Threads 访问令牌,具有 threads_basic + threads_content_publish 权限范围)。切勿回显该令牌。
解析一次调用者的 Threads 用户 ID(每次发布都需要):
ME=$(curl -sS "https://graph.threads.net/v1.0/me?fields=id,username&access_token=$THREADS_ACCESS_TOKEN")
TID=$(echo "$ME" | jq -r .id)
echo "$ME" # {"id":"<THREADS_USER_ID>","username":"..."}
错误以 JSON 格式返回,包含 error.message / error.code — 原样显示。
401 / OAuthException → 令牌已过期或缺少权限范围;重新连接 Threads 连接器。
发布帖子(两步:创建容器 → 发布)
先与用户确认文本(帖子会以其真实账号发布)。 文本不得超过 500 个字符(表情符号按 UTF-8 字节计数)。
步骤 1 — 创建媒体容器。纯文本(先检查是否超过 500 字节限制):
TEXT="Shipping one API for AI images → posters, cards, mockups. https://platform.acedata.cloud #AI #API"
[ "$(printf %s "$TEXT" | wc -c)" -le 500 ] || { echo "text exceeds Threads 500-byte limit — shorten it"; }
CID=$(curl -sS -X POST "https://graph.threads.net/v1.0/$TID/threads" \
--data-urlencode "media_type=TEXT" \
--data-urlencode "text=$TEXT" \
-d "access_token=$THREADS_ACCESS_TOKEN" | jq -r .id)
echo "container=$CID"
图片帖子 — 添加 media_type=IMAGE + 公开的 image_url(Threads 会在服务器端抓取该 URL,因此图片必须托管在公开服务器上);视频使用 media_type=VIDEO + video_url:
CID=$(curl -sS -X POST "https://graph.threads.net/v1.0/$TID/threads" \
--data-urlencode "media_type=IMAGE" \
-d "image_url=https://cdn.acedata.cloud/xxxx.jpg" \
--data-urlencode "text=caption here" \
-d "access_token=$THREADS_ACCESS_TOKEN" | jq -r .id)
步骤 2 — 发布容器。文本帖子会立即发布;对于 IMAGE / VIDEO / 轮播容器,必须先等待 ≥30 秒,让 Threads 抓取并处理上传内容 — 过早发布会失败或不返回 ID:
sleep 30 # REQUIRED for IMAGE / VIDEO / carousel; skip for TEXT-only posts
curl -sS -X POST "https://graph.threads.net/v1.0/$TID/threads_publish" \
-d "creation_id=$CID" -d "access_token=$THREADS_ACCESS_TOKEN" | jq .
# → {"id":"<THREADS_MEDIA_ID>"}
如果 threads_publish 未返回 ID,说明容器尚未准备就绪 — 轮询
GET /v1.0/<CID>?fields=status&access_token=$THREADS_ACCESS_TOKEN,直到
status=FINISHED,然后重试发布。
获取已发布帖子的公开 URL,并提供给用户:
curl -sS "https://graph.threads.net/v1.0/<THREADS_MEDIA_ID>?fields=id,permalink&access_token=$THREADS_ACCESS_TOKEN" | jq -r .permalink
轮播(2–20 项)
为每个子项创建容器,并设置 is_carousel_item=true;然后创建一个 media_type=CAROUSEL 容器,并设置 children=<ID1>,<ID2>,...;最后发布轮播 ID。链接:
添加 link_attachment=<URL>(纯文本帖子,最多 5 个链接)。主题标签:topic_tag=<TAG>。
列出我的近期帖子
curl -sS "https://graph.threads.net/v1.0/$TID/threads?fields=id,text,permalink,timestamp&limit=20&access_token=$THREADS_ACCESS_TOKEN" | jq '.data'
注意事项
- 500 个字符限制;表情符号按其 UTF-8 字节长度计数。
- 媒体必须使用公开 URL — Threads 会在服务器端抓取
image_url/video_url; 本地文件无法使用。请先上传到公开主机 / cdn.acedata.cloud。 - 发布媒体容器前等待约 30 秒(文本帖子会立即发布);如果
threads_publish未返回 ID,轮询GET /<container-id>?fields=status。 - **速率限制:**每个个人资料每 24 小时最多发布 250 条帖子(轮播计为 1 条)。
- Threads 令牌与 Facebook / Instagram 令牌不同 — 它们来自
graph.threads.net上的 Threads OAuth 流程,而不是graph.facebook.com。
记录输出
成功发布并获取实时永久链接后,调用内置的
publish_artifact 工具一次,让用户能在 My Outputs 中跟踪该内容:
publish_artifact(kind="message", channel="threads", title="<title>", url="<the REAL permalink>", status="delivered")
使用实际返回的 URL — 切勿伪造。每个已发布项目只调用一次,
且仅在确认交付后调用;如果发布失败,则跳过(或使用 status="failed")。
参见 _shared/artifacts.md。