mcpField
T
tiktok

tiktok

github.com/acedatacloud营销与增长17170 次安装今天更新
代码仓库

关于 tiktok

tiktok 是通过 curl、jq 和配套脚本调用 TikTok API v2 的技能,适用于需要读取账号信息、发布视频或上传草稿的工作流。它强调发布前确认创作者选择,并跟踪操作状态。

主要功能

  1. 01读取基本账号资料
  2. 02向个人主页直接发布视频
  3. 03将视频上传至草稿收件箱
  4. 04查询发布处理状态

适用场景

  1. 01核对目标 TikTok 账号
  2. 02按创作者确认内容发布视频
  3. 03上传视频供创作者稍后完成发布

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/acedatacloud/skills --skill tiktok

安装后在 Claude Code 中输入/tiktok确认已加载。

附带文件scripts/tiktok.py

详细介绍

使用 curl + jq 调用 TikTok API v2。用户的 OAuth 持有者令牌位于 $TIKTOK_TOKEN;每次调用都需要 Authorization: Bearer $TIKTOK_TOKEN。基础 URL:https://open.tiktokapis.com/v2。

T="https://open.tiktokapis.com/v2"; AUTH="Authorization: Bearer $TIKTOK_TOKEN"

响应会将所有内容包装在 {"data":…,"error":{"code","message","log_id"}} 中。 检查 error.code,不要只看 HTTP 状态码——一些实际错误 (spam_risk_too_many_posts、spam_risk_user_banned_from_posting、 reached_active_user_cap)会以 HTTP 200 返回,但代码不是 ok。原样显示 error.message。401 / access_token_invalid = 重新连接 TikTok。

读取账号信息

# Basic profile — open_id identifies the user for every posting call
curl -sS -H "$AUTH" "$T/user/info/?fields=open_id,display_name,avatar_url" \
  | jq '.data.user'

粉丝数 / 点赞数、简介和用户的视频列表需要 Display API 权限范围(user.info.stats、user.info.profile、video.list),但此应用 未获授这些权限——不要调用 /v2/video/list/,也不要请求这些字段, 否则会因 scope_not_authorized 失败。

直接发布到创作者的个人主页

生产应用已通过 TikTok Content Posting API 审核。直接发布会在处理完成后 发布到创作者的个人主页;它不是草稿。绝不要代替创作者选择隐私级别、 互动设置或披露选项。若某个 publish_id 正在处理中,绝不要重试初始化请求。

必需步骤:

  1. 确认视频及其来源。测量视频时长并预览。托管在服务器上的视频必须使用 位于已验证 acedata.cloud 域名下、公开且不会重定向的 HTTPS URL(PULL_FROM_URL)。 创作者选定的设备本地 MP4 可以使用 FILE_UPLOAD,且文件不得超过 64 MB。

  2. 使用 python3 skills/tiktok/scripts/tiktok.py creator-info 查询所选连接。检查 creator_username 是否与创作者指定的账号一致。将当前昵称、头像、 privacy_level_options、互动限制和最长时长,以及真实的视频预览,复制到 request_action_confirmation 中,并设置 kind: "tiktok.publish"。不要虚构或预先选择隐私选项。

  3. 如果已取消,则停止。如果已确认,则严格使用卡片返回的 title、 privacy_level、disable_comment、disable_duet、disable_stitch、 brand_organic_toggle 和 brand_content_toggle。对于 AI 生成的内容, 添加 is_aigc: true;否则添加 false。对于 Ace Data Cloud 品牌推广, 创作者必须选择自有品牌推广披露选项。将这些值存储在仓库外的临时 JSON 文件中。

  4. 确认后,仅提交一次,并使用准确的所选账号:

    # Server-hosted video on the verified domain:
    python3 skills/tiktok/scripts/tiktok.py post-url "$VIDEO_URL" \
      --duration-sec "$DURATION" \
      --expected-creator-username "$CONFIRMED_CREATOR_USERNAME" \
      --values-file "$VALUES_JSON" --confirmed
    
    # Creator-selected device-local MP4:
    python3 skills/tiktok/scripts/tiktok.py post-file video.mp4 \
      --duration-sec "$DURATION" \
      --expected-creator-username "$CONFIRMED_CREATOR_USERNAME" \
      --values-file "$VALUES_JSON" --confirmed
    

    两条命令都会重新查询创作者信息,并拒绝不同的账号、不可用的隐私级别、 已禁用的互动选项或超长视频。通过此检查后,绝不要替换已确认的字段。

  5. 使用 status 轮询返回的 publish_id,直到状态为 PUBLISH_COMPLETE 或出现 终止性失败。报告实际结果。初始化请求已被接受或文件传输成功,都不代表帖子已发布。

将视频上传到用户的草稿箱

当创作者明确要求保存为草稿时使用此流程。视频会进入他们的 TikTok 收件箱 / 草稿箱;他们打开 TikTok 应用,添加说明文字、声音和隐私设置,然后发布。

必须按以下顺序操作:

  1. 确认确切的视频及其来源:创作者设备本地的文件,或托管在已验证的 acedata.cloud 域名下的 URL。预览视频。
  2. 调用 request_action_confirmation,其中 kind: "generic",提供真实的视频预览,并在摘要中说明这会将视频上传到草稿箱,而不是发布。
  3. 如果用户取消,则停止。如果用户确认,则只执行一次上传。对于设备本地文件,使用 python3 skills/tiktok/scripts/tiktok.py upload video.mp4。对于托管在服务器上的视频,使用 python3 skills/tiktok/scripts/tiktok.py upload-url "$VIDEO_URL"。
  4. 使用 python3 skills/tiktok/scripts/tiktok.py status PUBLISH_ID 轮询,直到状态为终态。轮询期间绝不要再次调用 upload。

有两种可用的来源模式。开发者门户于 2026-10-03 验证了 acedata.cloud,其子域名也在覆盖范围内。该域名上托管的视频必须使用 PULL_FROM_URL;只有创作者设备本地的文件才使用 FILE_UPLOAD。请确认确切的 URL 是公开的 HTTPS URL,且不会重定向。

FILE_UPLOAD(创作者设备本地文件)

仅对创作者从自己的设备中选择的文件使用此方式。小于 64 MB 的文件会作为单个分块上传。

SIZE=$(stat -f%z video.mp4 2>/dev/null || stat -c%s video.mp4)

INIT=$(curl -sS -X POST -H "$AUTH" -H "Content-Type: application/json" \
  -d "$(jq -n --argjson s "$SIZE" \
    '{source_info:{source:"FILE_UPLOAD", video_size:$s, chunk_size:$s, total_chunk_count:1}}')" \
  "$T/post/publish/inbox/video/init/")
echo "$INIT" | jq '{publish_id:.data.publish_id, error:.error.code}'

UPLOAD_URL=$(echo "$INIT" | jq -r '.data.upload_url')
curl -sS -X PUT "$UPLOAD_URL" \
  -H "Content-Type: video/mp4" \
  -H "Content-Length: $SIZE" \
  -H "Content-Range: bytes 0-$((SIZE-1))/$SIZE" \
  --data-binary @video.mp4 -o /dev/null -w '%{http_code}\n'

整个文件上传完成时,PUT 会返回 201(中间分块返回 206)。upload_url 会在 1 小时后过期。

PULL_FROM_URL(仅限来自已验证域名的 URL)
python3 skills/tiktok/scripts/tiktok.py upload-url "$VIDEO_URL"

该辅助工具要求 URL 是来自已验证 acedata.cloud 域名的公开 HTTPS URL,视频类型为 video/mp4,且不会重定向。域名验证覆盖其下级子域名。

轮询状态

curl -sS -X POST -H "$AUTH" -H "Content-Type: application/json" \
  -d "$(jq -n --arg id "$PUBLISH_ID" '{publish_id:$id}')" \
  "$T/post/publish/status/fetch/" | jq '.data | {status, fail_reason}'

PROCESSING_UPLOAD / PROCESSING_DOWNLOAD → SEND_TO_USER_INBOX = 完成,视频正在创作者的 TikTok 收件箱中等待处理。告知他们打开 TikTok 应用完成发布,并说明处理需要几分钟。

对于 auth_removed、spam_risk_text、spam_risk 或 spam_risk_user_banned_from_posting,不要重试——这些都是终态。internal 可以重试。

注意事项

  • 在确认卡片中绝不要预先选择 privacy_level。辅助工具会在执行唯一一次 Direct Post 调用前,根据最新的 privacy_level_options 检查创作者的选择。品牌内容不能设置为 SELF_ONLY。
  • 使用旧版 Sandbox 应用建立的连接必须重新连接到 Production 应用。如果 TikTok 返回 unaudited_client_can_only_post_to_private_accounts,请停止并让创作者重新连接;不要重试同一条帖子,也不要更改其隐私设置。
  • 每个用户令牌的速率限制:creator_info/query 为 20 次/分钟,video/init/ 为 6 次/分钟,status/fetch/ 为 30 次/分钟。TikTok 还将每位创作者的发帖量限制在每天约 15 条,所有应用共享此限制——其他应用也可能耗尽额度。
  • 在此流程中,SEND_TO_USER_INBOX 表示成功,并非中间状态。不要等待 PUBLISH_COMPLETE——只有用户在应用中发布后才会出现该状态。

评论

支持 Markdown