Twitter API v2 で画像付きツイートする

画像をする bot を運用していたが Twitter API のバージョン変更の影響で画像付きツイートができなくなった。

2023/08現在、画像付きのツイートをするにはまず Twitter に画像をアップロードしてから画像のIDを指定してツイートする必要がある。画像のアップロードには API v1 を使う必要がある。

画像アップロードのサンプルコード

tewepy.API を使用することで API v1 でアップロードすることができる。

import tweepy

auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)

api_v1 = tweepy.API(auth)

api.media_upload(filename="path/to/image.png")

画像付きツイートをするサンプルコード

API v1 でアップロードしたレスポンスから media_id を取り出し、tweepy.Client で API v2 を使ってツイートすることができる。

import tweepy

api_v2 = tweepy.Clien(
    consumer_key = CONSUMER_KEY,
		consumer_secret = CONSUMER_SECRET,
		access_token = ACCESS_TOKEN,
		access_token_secret = ACCESS_TOKEN_SECRET
)

media = api.media_upload(filename="path/to/image.png")

api_v2.create_tweet(text="ツイート本文", media_ids=[media.media_id])

URL を指定して画像をアップロードするサンプルコード

上記のような方法を選んだ場合、ローカルにある画像ファイルのパスを指定する必要がある。つまり、URL を直接指定してツイートすることができない。URL を指定してツイートしたい場合は一度画像をダウンロードする必要がある。

import os
import requests

def upload(url):
    filename = os.path.basename(url)
		request = requests.get(url, stream=True)
		if request.status_code == 200:
		    with open(filename, 'wb') as image:
				    for chunk in request:
						    image.write(chunk)
				media = api_v1.media_upload(filename)
				os.remove(filename)
				return(media.media_id)
		else:
		    # do something
タイトルとURLをコピーしました