mcpField
I
instagram

instagram

github.com/acedatacloudマーケティング・グロース1748 回インストール1 日前に更新
リポジトリ

instagram について

instagramは、Instagram Graph APIで画像、動画、Reels、カルーセルを公開するスキルです。アカウントの特定、メディア処理、公開、確認済みリンクの記録を扱います。

主な機能

  1. 01連携済みプロアカウントの特定
  2. 02画像と動画の公開
  3. 03Reelsとカルーセルの作成
  4. 04メディア処理状況の確認
  5. 05公開済みリンクの記録

活用シーン

  1. 01キャプション付き画像の公開
  2. 02処理完了後のReels公開
  3. 03複数アイテムのカルーセル投稿

インストール

コマンドをコピーしてターミナルで実行します。

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

インストール後、Claude Code で/instagramを入力して読み込まれたか確認します。

詳細

curl + jq を使って Instagram Graph API(graph.facebook.com)を呼び出します。コネクターは $INSTAGRAM_ACCESS_TOKEN(instagram_content_publish と pages_read_engagement を持つトークン。Facebook Page トークンまたは Instagram-Login ユーザートークン)と、任意で $INSTAGRAM_IG_USER_ID を注入します。これらを決して表示しないでください。

Instagram で公開できるのは、Facebook Page にリンクされたプロフェッショナル(Business または Creator)アカウントでの画像/動画/リールのみです。テキストのみの投稿はできません。

Instagram アカウント ID を解決する

$INSTAGRAM_IG_USER_ID が設定されている場合は、それを使います。そうでなければ、トークンから取得します。まずPage トークンの経路(/me は Page)を試し、次にユーザートークンの経路(/me/accounts → リンクされた Page → IG アカウント)にフォールバックします。これにより、コネクターが受け付けるどちらのトークンタイプでも解決できます。

if [ -n "$INSTAGRAM_IG_USER_ID" ]; then
  IGID="$INSTAGRAM_IG_USER_ID"
else
  # Page access token: /me IS the Page, read its linked IG account directly
  IGID=$(curl -sS "https://graph.facebook.com/v21.0/me?fields=instagram_business_account&access_token=$INSTAGRAM_ACCESS_TOKEN" | jq -r '.instagram_business_account.id // empty')
  if [ -z "$IGID" ]; then
    # User access token: list the managed Page, then its linked IG account
    PAGE=$(curl -sS "https://graph.facebook.com/v21.0/me/accounts?access_token=$INSTAGRAM_ACCESS_TOKEN" | jq -r '.data[0].id // empty')
    IGID=$(curl -sS "https://graph.facebook.com/v21.0/$PAGE?fields=instagram_business_account&access_token=$INSTAGRAM_ACCESS_TOKEN" | jq -r '.instagram_business_account.id // empty')
  fi
fi
echo "ig_user_id=$IGID"

エラーは error.message / error.code を含む JSON です。内容をそのまま表示してください。 401 / OAuthException → トークンの有効期限切れ、または必要なスコープがありません。IGID が null → トークンがプロフェッショナル IG アカウント/Page にリンクされていません(「注意点」を参照)。必要に応じて再接続してください。

画像を 1 枚投稿する(2 ステップ:コンテナーを作成 → 公開)

まず、キャプションと画像をユーザーに確認してください。 image_url は公開 JPEG URL である必要があります(Instagram がサーバー側から cURL で取得します)。

CID=$(curl -sS -X POST "https://graph.facebook.com/v21.0/$IGID/media" \
  -d "image_url=https://cdn.acedata.cloud/xxxx.jpg" \
  --data-urlencode "caption=One endpoint → posters, cards, mockups. #AI #API" \
  -d "access_token=$INSTAGRAM_ACCESS_TOKEN" | jq -r .id)
echo "container=$CID"

curl -sS -X POST "https://graph.facebook.com/v21.0/$IGID/media_publish" \
  -d "creation_id=$CID" -d "access_token=$INSTAGRAM_ACCESS_TOKEN" | jq .
# → {"id":"<IG_MEDIA_ID>"}

ユーザーに渡すパーマリンクを取得します。

curl -sS "https://graph.facebook.com/v21.0/<IG_MEDIA_ID>?fields=permalink&access_token=$INSTAGRAM_ACCESS_TOKEN" | jq -r .permalink

リール/動画

media_type=REELS と公開 video_url を指定して作成し、公開する前にコンテナーのステータスを FINISHED になるまでポーリングします(動画の処理には時間がかかります)。

CID=$(curl -sS -X POST "https://graph.facebook.com/v21.0/$IGID/media" \
  -d "media_type=REELS" -d "video_url=https://cdn.acedata.cloud/xxxx.mp4" \
  --data-urlencode "caption=..." -d "access_token=$INSTAGRAM_ACCESS_TOKEN" | jq -r .id)

# poll until the video finishes processing (up to ~5 min) BEFORE publishing —
# publishing an IN_PROGRESS container is rejected:
for i in $(seq 1 60); do
  ST=$(curl -sS "https://graph.facebook.com/v21.0/$CID?fields=status_code&access_token=$INSTAGRAM_ACCESS_TOKEN" | jq -r .status_code)
  echo "status=$ST"; [ "$ST" = "FINISHED" ] && break
  [ "$ST" = "ERROR" ] || [ "$ST" = "EXPIRED" ] && { echo "container failed: $ST"; break; }
  sleep 5
done

curl -sS -X POST "https://graph.facebook.com/v21.0/$IGID/media_publish" \
  -d "creation_id=$CID" -d "access_token=$INSTAGRAM_ACCESS_TOKEN" | jq .

カルーセル(2~10 項目)

各子要素を is_carousel_item=true で作成し、次に children=<ID1>,<ID2>,... と caption を指定した media_type=CAROUSEL コンテナーを作成してから、カルーセル ID を公開します。

注意点

  • テキストのみの投稿はできません — Instagram では画像または動画が必要です。画像には公開 JPEG を使用してください(PNG/その他の形式は拒否されます。MPO/JPS などの拡張 JPEG も対象です)。
  • プロフェッショナルアカウントが必要です — Facebook Page にリンクされた Business/Creator IG アカウントが必要です。instagram_business_account が null の場合、そのアカウントはプロフェッショナルアカウントではないか、リンクされていません。ユーザーは IG/Page の設定で修正する必要があります。
  • メディアは、Instagram がアクセスできるサーバー上の公開 URL である必要があります。ローカルファイルは使えません。まず cdn.acedata.cloud にホストしてください。
  • レート制限: 24 時間あたり API で公開できる投稿は 100 件です(カルーセルは 1 件として数えられます)。GET /$IGID/content_publishing_limit で確認してください。
  • Page Publishing Authorization(PPA): API での公開前に PPA を完了する必要がある Page があります。PPA に言及する API エラーはそのまま表示してください。
  • API バージョン:バージョンまたは非推奨化エラーが発生した場合は、vXX.0 パスを最新に保ってください。

出力を記録する

公開に成功して有効なパーマリンクを取得した後、ユーザーが My Outputs で追跡できるよう、組み込みの publish_artifact ツールを 1 回呼び出してください。

publish_artifact(kind="image", channel="instagram", title="<title>", url="<the REAL permalink>", status="delivered")

実際に返された URL を使用してください。決して捏造しないでください。公開された項目ごとに、配信が確認された後に 1 回だけ呼び出します。公開に失敗した場合は呼び出さないでください(または status="failed" を使用してください)。 _shared/artifacts.md を参照してください。

コメント