BotなどでTwitterに画像付きTweetするのに、思いのほか手こずったので、参考までに残しておきます。
画像付きツイートの問題点
2023/06/03時点では、以下のような状況となっており、画像付きでTwitterする方法が非常に分かりにくくなっています。
- Twitter APIがv1からv2に切り替わりつつあり、v1の利用が制限されている
- Twitter API v1でサポートされていた画像付きTweetするAPIが廃止されている
- Twitter API v1でしか画像のアップロードができない
- Twitter API v1では、画像を参照した形で、Tweetすることができない
- Twitter API v2では、画像をアップロードするAPIが提供されていない
- APIごとに必要な認証が異なる
| APIの種類 | Twitter API v1 | Twitter API v2 |
|---|---|---|
| 画像付きTweet | ||
| 画像 アップロード | ||
| Tweet API |
解決方法
現時点では、API v1だけ もしくは API v2 だけを利用して対応することができません。
そのため、以下のステップで対応していく必要があります。
具体的ソースコード例
以下は、Tweepyを利用したコード例です。
CONSUMER_KEYなどは、Twitter の Developer Portal で取得したKEYを指定してください。image_path と tweet_text でファイルパスやメッセージを記載すれば、その内容で、Tweetされます。
ロジックの実態としては一番最後にある media_uploadメソッドとcreate_tweetメソッドだけで、難しいものではないのですが、v1とv2が混在せざるを得ないのがちょっと気持ち悪いですが、ほかに方法がなければ仕方ないですね。
#!/usr/bin/env python
import tweepy
# Keys
CONSUMER_KEY='your consumer key'
CONSUMER_SECRET='your consumer securet'
ACCESS_TOKEN='your access token'
ACCESS_TOKEN_SECRET='your access token secret'
image_path = 'image path'
tweet_txt = 'tweet message'
# Create Twitter Instance
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
client = tweepy.Client(
consumer_key = CONSUMER_KEY,
consumer_secret = CONSUMER_SECRET,
access_token = ACCESS_TOKEN,
access_token_secret = ACCESS_TOKEN_SECRET
)
# Upload Image
media = api.media_upload(image_path)
# Tweet
client.create_tweet(text=tweet_txt, media_ids=[media.media_id])
実際に自動Tweetするまでの対応手順
Twitter API利用準備
Twitter Developer Potalに登録する
https://developer.twitter.com/en/portal/petition/essential/basic-info
から、登録を進めます。有料版をお勧めされますが、無料で使うには、Basicの下にある Sign Up Free Account から対応を進めます。どのようなユースケースでTwitterのデータやAPIを使用するのかを、250文字以上で説明する必要があります。
審査が通ればAPIが利用可能になります。

Twitter Developer Portalでの設定
Developer Portalでの登録が完了したら、次にその設定を行います。
User authentication settingsの設定
Developer PortalのProjectを選択し、User authentication settings の Editをクリックします。

User authentication settings の App permissions で、Read and write を選択して、Saveをクリックします。key/tokenの情報は、生成時点の設定と関連しているため、key/token生成後に、この設定を変更した場合には、key/tokenの再作成が必要です。

Key/Tokenの生成
Developer PortalのProjectから、Keys and tokens タブを選択します。Consumer KeysやAuthentication Tokens などを生成します。
一度しか表示されないので、その場でメモを取るようにしてください。
ここで生成されたKey/Tokenをプログラムで指定します。

Tweepyのインストール
Tweepyは、Twitter APIを簡単に利用するためのPythonライブラリです。
Tweepy インストール
Tweepyをインストールするには、以下のコマンドを実行します。必要に応じて、sudoで実行してください。
pip install tweepyプログラミング
#!/usr/bin/env python
import tweepy
# Keys
CONSUMER_KEY='Developer Portalで作成したconsumer keyをコピペ'
CONSUMER_SECRET='Developer Portalで作成したconsumer securetをコピペ'
ACCESS_TOKEN='Developer Portalで作成したAccess Tokenをコピペ'
ACCESS_TOKEN_SECRET='Developer Portalで作成したAccess Secretをコピペ'
image_path = 'image path'
tweet_txt = 'tweet message'
# Create Twitter Instance
auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)
client = tweepy.Client(
consumer_key = CONSUMER_KEY,
consumer_secret = CONSUMER_SECRET,
access_token = ACCESS_TOKEN,
access_token_secret = ACCESS_TOKEN_SECRET
)
# Upload Image
media = api.media_upload(image_path)
# Tweet
client.create_tweet(text=tweet_txt, media_ids=[media.media_id])CONSUMER_KEY・CONSUMER_SECRETは、Developer Portalで作成した Customers Key(API Key)・Customers Key Secret(API Securt)を、ACCESS_TOKEN・ACCESS_TOKEN_SECRETには、同じく作成した Access Token and Secretの情報をコピペします。
自動アカウントのラベル付け
Botなどの自動アカウントの場合には、自動アカウントと分かるようにラベル付けをし、管理者と紐づける必要があります。
管理者となるTwitterアカウントで、紐づけを行います。以下から設定できます。
アカウント設定 > アカウント >アカウント情報 > 自動化 > アカウントの自動化を設定自動生成アカウントラベルの詳細は、下記URLでご確認ください。
https://help.twitter.com/ja/using-twitter/automated-account-labels
まとめ
APIバージョンの混在・制約があり、あまりスマートな実装方法にはなりませんが、そのあたりを割り切れば・理解できれば、プログラムとしては難しいものではないと思います。
API v2でも画像のアップロードができるようになれば、もう少しすっきりできると思いますが、それまでの辛抱と思います。この記事が参考になれば幸いです。
