Closed5

Twitter API v2 では画像付きツイート、というか画像(メディア)のアップロードが出来ないらしい件

amay077amay077

v1 でもやったことないけど。

他の SNS などの API を見ていると、

  1. まず画像をアップロードする API に画像 post してレスポンスの media_id みたいなものを取得する
  2. 投稿する API に、text と media_id を渡して呼び出す

って感じなんだろうな、とは思っていた。

で Twitter API では、v1 時代にが画像付き投稿を行う API があったようだが、現在それは廃止されており、また、v2 では画像をアップロードする API がないとのことで詰み?と思われた。

が、v1 API で画像をアップロードして media_id を得て、v2 API で投稿時に media_id を添える、という workaround があることを知った。

ただ、気になるのは認証の部分で、v1 では OAuth1.0 を、v2 では OAuth2.0 を使う必要があり、「え、画像投稿のためにユーザーにもう一度認証させる必要があるの?」という点がよく分からない点だ。

上記の tweepy の例では consumer_key, consumer_secret を指定しているので、開発者のアカウントで画像投稿するのでは?と思っている。
ユーザーのアカウントで 画像投稿するには??

一方で、下記の例では、v2 で取得した? OAuth の access token で画像のアップロードと投稿ができているようなので、試してみる。

amay077amay077

一方で、下記の例では、v2 で取得した? OAuth の access token で画像のアップロードと投稿ができているようなので、試してみる。

403 エラーになるなあ。

$ACCESS_TOKEN = fkel54mADSl4wl5mzmk....  ## OAuth2 で取得した access token

curl -X POST https://api.twitter.com/2/tweets -H "Authorization: Bearer $ACCESS_TOKEN" -H "Content-type: application/json" -d '{"text": "Tweeting with media!"}'

-> OK, ツイート成功。

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="}'

-> NG(403)

amay077amay077

Twitter API での画像付き投稿、
画像upはv1のみ可、OAuth1のtokenのみ可
投稿はv2のみ可、OAuth1,2どちらのtokenでも可
という結果。つまりOAuth1.0を使うしかない。なんじゃこれ。

https://github.com/PLhery/node-twitter-api-v2

amay077amay077

OAuth2.0の refresh token が access token と同じ時間で expire しちゃうのだけど誰も困ってないの? と思ってたけど、みんな OAuth2.0 に事実上移行できてないのでは説あるコアトル。

amay077amay077

ともあれ、

  1. 認証は OAuth1.0 でやる
  2. 得られた accessToken, secretToken を使い、
  3. v1 API で画像をアップロードして id を取得
  4. v2 API で画像とテキストをパラメータにして投稿

ができた。

前述の

https://github.com/PLhery/node-twitter-api-v2

を使用した。

このスクラップは2024/05/25にクローズされました