【Python】Twitter API v2を使ってツイートする

2022-05-30python,twitter

Twitterは外部プログラムから利用可能なAPIが公開されており、ツイートの内容やユーサーの情報を取得することが可能です。ツイートすることも可能です。
Python用Twitter APIライブラリTweepyを使い、PythonでTwitter API v2による投稿を行う方法のメモです。

はじめに

2021/11/15よりTwitterの主要APIはv2となりました。今でのAPI v1.1は引き続き使えますが、Elevated Accessと呼ばれる、より高度なアクセスレベルが必要となり、今後はAPI v2の使用が推奨されます。
API v2はEssential Accessと呼ばれる、より低位のアクセスレベルでも使用可能です。

Essential Accessでは、1つのアプリケーションのみ開発でき、月50万ツイートまで取得可能です。

前準備

PythonでTwitter APIを使用するライブラリはいくつかありますが、今回はTweepyを使います。

Tweepyのインストール

Tweepyをインストールするにはpipを使用します。API v2を使って投稿するためには、Tweepyのversion 4.3.0以降が必要です。(22年5月17日現在の最新版は4.9.0)

pip install tweepy

権限の変更

Twitter APIを使ってツイートするためには、アプリケーションの権限を変更する必要があります。
まず、Developer Portalに入り、User authentication settingsを開きます。

user authentication settings

次にApp permissionsを変更します。初期設定ではReadとなっていますが、これをRead and writeにします。

app permissions

最後にAccess TokenとAccess Token SecretをRegenerateします。Regenerateする前に、権限がきちんとRead and writeになっているか確認しましょう。

authentication tokens

ツイートする

API v1.1

参考までにAPI v1.1での投稿方法を示します。API v1.1ではAPIオブジェクトを使います。

import tweepy

consumer_key = 'your_api_key'
consumer_secret = 'your_api_secret'
access_token = 'your_access_token'
access_toke_secret = 'your_access_token_secret'

auth = tweepy.OAuth1UserHandler(
    consumer_key, consumer_secret, access_token, access_token_secret
)
api = tweepy.API(auth)
api.update_status(status = "API v1.1のテスト")

投稿するのはAPI.update_status()メソッドです。引数statusにツイートする内容を設定します。

API v2

API v2ではClientオブジェクトを使います。

import tweepy

consumer_key = 'your_api_key'
consumer_secret = 'your_api_secret'
access_token = 'your_access_token'
access_toke_secret = 'your_access_token_secret'

client = tweepy.Client(
    consumer_key = consumer_key,
    consumer_secret = consumer_secret,
    access_token = access_token,
    access_token_secret = access_token_secret
)
client.create_tweet(text = "API v2のテスト")

投稿するのはClient.create_tweet()メソッドです。引数textにツイートする内容を設定します。こちらのほうがメソッド名もわかりやすいですね。

なお、同じ投稿は続けてできないように、v1.1, v2ともにAPIによって制限されています。同じ投稿をするには、少なくとも12時間程度空けておく必要があるようです。

テストのため、連投をする必要がある場合、同じ投稿とならないように乱数や時刻などをツイート内容に付加しておくのが良いです。

リツイートする

API v1.1

API v1.1ではAPI.retweet()メソッドを使います。引数idにリツイートするツイートのIDを指定します。IDは数字でも文字列でも構いません。

import tweepy

consumer_key = 'your_api_key'
consumer_secret = 'your_api_secret'
access_token = 'your_access_token'
access_toke_secret = 'your_access_token_secret'

id = 'tweet_id'

auth = tweepy.OAuth1UserHandler(
    consumer_key, consumer_secret, access_token, access_token_secret
)
api = tweepy.API(auth)
api.retweet(id = id)

API v2

API v2ではClient.retweet()メソッドを使います。引数tweet_idにリツイートするツイートのIDを指定します。IDは数字でも文字列でも構いません。

import tweepy

consumer_key = 'your_api_key'
consumer_secret = 'your_api_secret'
access_token = 'your_access_token'
access_toke_secret = 'your_access_token_secret'

id = 'tweet_id'

client = tweepy.Client(
    consumer_key = consumer_key,
    consumer_secret = consumer_secret,
    access_token = access_token,
    access_token_secret = access_token_secret
)
client.retweet(tweet_id = id)

引用リツイートする

引用リツイートにはv1.1, v2ともに専用のAPIが存在しません。通常のツイート用のAPIを使用します。
ツイートする本文にhttps://twitter.com/{ユーザー名}/status/{ツイートのID}を含めるだけです。

API v2では以下のようになります。

import tweepy

consumer_key = 'your_api_key'
consumer_secret = 'your_api_secret'
access_token = 'your_access_token'
access_toke_secret = 'your_access_token_secret'

id = 'tweet_id'
tweet_uri = 'https://twitter.com/user_name/status/' + id

client = tweepy.Client(
    consumer_key = consumer_key,
    consumer_secret = consumer_secret,
    access_token = access_token,
    access_token_secret = access_token_secret
)
client.create_tweet(text = "引用リツイートのテスト\n" + tweet_uri)

まとめ

Python用のTwitter APIライブラリであるTweepyを使って、Pythonでツイートする方法を紹介しました。使い方は難しくありませんが、ツイートするためにはDeveloper Portalにて権限の変更が必要なことに注意が必要です。

python,tweepy,twitter

Posted by izadori