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