instagram について
instagramは、Instagram Graph APIで画像、動画、Reels、カルーセルを公開するスキルです。アカウントの特定、メディア処理、公開、確認済みリンクの記録を扱います。
主な機能
- 01連携済みプロアカウントの特定
- 02画像と動画の公開
- 03Reelsとカルーセルの作成
- 04メディア処理状況の確認
- 05公開済みリンクの記録
活用シーン
- 01キャプション付き画像の公開
- 02処理完了後のReels公開
- 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 を参照してください。