
Twitter API v2にて画像付きツイートができない件
お久しぶりです。
一応プロセカAPIはひと通り終わって、今はTwitterボットを作っています。
そこでハマってしまったことをご紹介します。
画像付きツイートができない!!!!!
v2で画像ツイートしたいときはAPI叩く
curl -X POST https://api.twitter.com/2/tweets -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-type: application/json" -d '{"text": "Tweeting with media!", "media": {"media_ids": ["1455952740635586573"]}}'
JSONパラメーター
{"text": "Tweeting with media!",
"media": {"media_ids": ["1455952740635586573"]}}
画像ツイートではテキストのほかに'media_ids'ってのが必要になってくるんです。
普通であれば画像をアップロードするエンドポイントがあるのですが…
Twitter v2ドキュメントを見るとわかります。
メディアアップロードのエンドポイントが無いんです。
正確に言えばまだ実装予定
解決方法
図のような構成になります。
アップロードするために
v2はなかったのでv1.1のエンドポイントを使用することにしました。

アップロードする時メソッドをPOSTにしてmedia_dataに画像をbase64エンコードしたものにしました。
curl -X POST https://upload.twitter.com/1.1/media/upload.json -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-type: application/json" -d '{"media_data": "data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="}'
*このエンコードされた画像は1x1pxの黒い点です。おそらく画面についたゴミみたいな画像です。
このコードのレスポンスにmedia_id_stringという項目があると思うのでそれがmedia_idです。
そして、なるべくv2を使いたいのでv2で画像ツイートします。
curl -X POST https://api.twitter.com/2/tweets -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-type: application/json" -d '{"text": "Tweeting with media!", "media": {"media_ids": ["<コールバックされたmedia_id_stringの値を記述>"]}}'
まとめ
いかがだったでしょうか?
意外と調べても出てこなかったので一筆しました。
v2は新しいですがそれ故の不完全な部分も多々あります。
是非ともv1.1も使ってやってください。(親目線)