MENU

TwitterでAPIから画像付きツイートをする方法

  • URLをコピーしました!

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 v1Twitter API v2
画像付きTweet
画像 アップロード
Tweet API

解決方法

現時点では、API v1だけ もしくは API v2 だけを利用して対応することができません。

そのため、以下のステップで対応していく必要があります。

STEP
Twitter API v1を利用して、画像をアップロードし、Media IDを取得する
STEP
Twitter API v2を利用して、Tweetする。その際、Step1で取得した Media IDを指定する

具体的ソースコード例

以下は、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 Internet's most loved TwitterAPI Python Library

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でも画像のアップロードができるようになれば、もう少しすっきりできると思いますが、それまでの辛抱と思います。この記事が参考になれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
この記事で分かること