画像をする 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


