メインコンテンツへスキップ
このガイドでは、チャンクアップロードワークフローを使用して動画や大容量メディアファイルをアップロードする方法を説明します。 動画または大容量メディアをアップロードする場合は、次の手順を実行する必要があります。
  1. INIT — アップロードを初期化して media_id を取得する
  2. APPEND — ファイルの各チャンクをアップロードする
  3. FINALIZE — アップロードを完了する
  4. STATUS — (必要に応じて) 処理が完了するまで待機する
完全な Python サンプルコードについては、このサンプルコードを参照してください。

ステップ1: アップロードの初期化 (INIT)

アップロードセッションを開始して media_id を取得します:
cURL
curl -X POST "https://api.x.com/2/media/upload" \
  -H "Authorization: Bearer $USER_ACCESS_TOKEN" \
  -H "Content-Type: multipart/form-data" \
  -F "command=INIT" \
  -F "media_type=video/mp4" \
  -F "total_bytes=1048576" \
  -F "media_category=amplify_video"
レスポンス:
{
  "data": {
    "id": "1880028106020515840",
    "media_key": "13_1880028106020515840",
    "expires_after_secs": 1295999
  }
}

ステップ 2: チャンクをアップロード (APPEND)

ファイルをチャンクごとにアップロードします。たとえば、3 MB のファイルを 3 つのチャンクに分割します:
cURL
curl -X POST "https://api.x.com/2/media/upload" \
  -H "Authorization: Bearer $USER_ACCESS_TOKEN" \
  -H "Content-Type: multipart/form-data" \
  -F "command=APPEND" \
  -F "media_id=1880028106020515840" \
  -F "segment_index=0" \
  -F "media=@/path/to/chunk1.mp4"
チャンクアップロードの利点:
  • 低速なネットワーク環境でもアップロードの信頼性が向上する
  • アップロードを一時停止して再開できる
  • 失敗したチャンクだけを個別に再試行できる

ステップ 3: アップロードの完了 (FINALIZE)

すべてのチャンクの送信が完了したら、アップロードを確定します:
cURL
curl -X POST "https://api.x.com/2/media/upload" \
  -H "Authorization: Bearer $USER_ACCESS_TOKEN" \
  -H "Content-Type: multipart/form-data" \
  -F "command=FINALIZE" \
  -F "media_id=1880028106020515840"
レスポンス:
{
  "data": {
    "id": "1880028106020515840",
    "media_key": "13_1880028106020515840",
    "size": 1048576,
    "expires_after_secs": 86400,
    "processing_info": {
      "state": "pending",
      "check_after_secs": 1
    }
  }
}
processing_info が返された場合は、処理が完了するのを待つためにステップ 4 に進んでください。返されない場合は、そのメディアはすぐに使用できます。

ステップ 4: ステータスを確認する (STATUS)

processing_info が返ってきた場合は、処理が完了するまでポーリングします:
cURL
curl "https://api.x.com/2/media/upload?command=STATUS&media_id=1880028106020515840" \
  -H "Authorization: Bearer $USER_ACCESS_TOKEN"
処理状態: pendingin_progresssucceeded または failed

ステップ 5: メディア付きポストを作成する

処理が完了したら、次にメディア付きポストを作成します:
cURL
curl -X POST "https://api.x.com/2/tweets" \
  -H "Authorization: Bearer $USER_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Check out this video!",
    "media": {
      "media_ids": ["1880028106020515840"]
    }
  }'

メディアカテゴリ

カテゴリ説明
tweet_imageポスト用の画像
tweet_gifポスト用のアニメーション GIF
tweet_videoポスト用の動画
amplify_videoAmplify 動画

次のステップ

ベストプラクティス

ファイルに関する制約と要件

ポストを作成

メディア付きのポスト

APIリファレンス

エンドポイントの完全なドキュメント