はじめに
今回の記事では、X(Twitter)のAPIを使用して開発を行う際に生じた、「Invalid Request」というエラーの対処方法を紹介します。
X(Twitter)APIを使用して、動画の投稿を試していた際に、以下のようなエラーが返されることがありました。
"errors": [
{
"parameters": {
"media.media_ids": [
"180481985800000000000"
]
},
"message": "Your media IDs are invalid."
}
],
"title": "Invalid Request",
"detail": "One or more parameters to your request was invalid.",
"type": "https://api.twitter.com/2/problems/invalid-request"
このエラーのメッセージを見るところ、アップロードしたメディアのIDが無効であることを示しているようです。
このエラーはメディアに関するエラーのようですが、画像の投稿においては特に発生せず、動画の投稿を行うときに発生しました。
フォーラム等でも同様のエラーについて議論されていましたが、直接的な解決方法が提示されていなかったためかなり嵌ったエラーになります。
問題の原因
この問題の原因として、スクリプトの実装方法の問題ではなく、動画ファイルそのものがエラーに関係していることが判明しました。
動画のエンコード方式が適切ではない
いくつか動画ファイルを試すうちに、成功する動画ファイルと失敗する動画ファイルがあることがわかりました。
iPhoneで撮影した動画は成功し、Web上からダウンロードした動画は失敗しており、ファイルの詳細を調べてみると同じmp4であってもエンコード方式などが異なることが分かりました。
成功したエンコード方式
Complete name : C:\IMG_6453.mp4
Format : MPEG-4
Format profile : QuickTime
Codec ID : qt 0000.00 (qt )
File size : 6.58 MiB
Overall bit rate mode : Variable
Overall bit rate : 10.5 Mb/s
Frame rate : 29.970 FPS
Writing library : Apple QuickTime
com.apple.quicktime.make : Apple
com.apple.quicktime.model : iPhone 11
失敗した動画のエンコード方式
Complete name : C:\video_5.mp4
Format : MPEG-4
Format profile : Base Media
Codec ID : isom (isom/iso2/avc1/mp41)
File size : 3.92 MiB
Duration : 44 s 513 ms
Overall bit rate : 738 kb/s
Frame rate : 29.970 FPS
Writing application : Lavf58.29.100
特にFormat ProfileやCodec IDが異なることが分かります。
解決方法
上記の問題を解決するために、動画ファイルを成功したエンコーディング方式で再エンコードすることで解決しました。
具体的には、FFmpegを使用してQuickTime形式で再エンコードすることで問題を解決できます。以下にその方法を示します。
コマンドプロンプトでのFFmpegの使用方法(Windows)
STEP1. FFmpegのインストール
まず、FFmpegがインストールします。FFmpegをインストールしていない場合、以下の手順に従ってインストールしてください。
- FFmpegの公式サイトにアクセス
- 「Windows」セクションから適切なバージョンをダウンロード
- ダウンロードしたZIPファイルを解凍し、適当な場所に保存(例:
C:\ffmpeg
) - 解凍したフォルダ内の
bin
フォルダにあるffmpeg.exe
のパスをシステムの環境変数に追加
STEP2. 環境変数の設定方法
- スタートメニューを開き、「環境変数」と入力し、「システム環境変数の編集」を選択
- 「環境変数」ボタンをクリック
- 「システム環境変数」セクションで「Path」を選択し、「編集」をクリック
- 「新規」ボタンをクリックし、FFmpegの
bin
フォルダのパス(例:C:\ffmpeg\bin
)を追加 - 「OK」をクリックして設定を保存
STEP3. FFmpegコマンドの使用方法
FFmpegが正しくインストールされ、パスが設定されていれば、コマンドプロンプトからFFmpegコマンドを実行できます。以下に、動画を再エンコードするためのFFmpegコマンドの例を示します。
- コマンドプロンプトを開きます。
- 以下のコマンドを入力し、
input_file
とoutput_file
を実際のファイルパスに置き換えて実行します。
ffmpeg -i input_file.mp4 -c:v libx264 -pix_fmt yuv420p -c:a aac -strict experimental -b:a 192k -movflags +faststart -f mp4 output_file.mp4
input_file.mp4とoutput_file.mp4は個人のファイルに置き換えてください。
これで、動画ファイルがQuickTime形式に再エンコードされ、エンコードされた動画を利用することでアップロードに成功しました。
動画の秒数が140秒を超えている場合
上記の方法で再エンコーディングすることにより動画のX(Twitter)への投稿に安定して成功するようになりましたが、たまに同様のエラーが発生することがありました。
よくよく見てみるとその際再エンコーディングした動画の秒数が140秒を超えており、X(Twitter)には140秒以上の動画の投稿はできないため、その際にも同様のエラーが発生するようです。
まとめ
X(Twitter)APIでのメディアIDが無効とされるエラーは、主に動画ファイルのエンコード方式によって引き起こされ、再エンコーディングにより解決できることが分かりました。
少しでも参考になれば幸いです。