見出し画像

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も使ってやってください。(親目線)

いいなと思ったら応援しよう!