Twitter APIを使用するためのPythonライブラリはいくつもありますが、ここではツイートなどを一括取得できるTweepyを紹介します。
まず、コマンドラインで以下のようにしてインストールします。
pip install tweepy
Twitterを外部から操作する場合はアプリを登録しAPIを使う必要があります。以下の記事を参考に登録してください。
2021年度版 Twitter API利用申請の例文からAPIキーの取得まで詳しく解説 | 新宿のホームページ制作会社 ITTI(イッティ)
コンシューマーキーやコンシューマーシークレットを取得して、以下のようにすると初期化できます。
import tweepy
auth = tweepy.OAuthHandler(TWITTER_CONSUMER_KEY, TWITTER_CONSUMER_SECRET)
auth.set_access_token(user.twitter_access_token, user.twitter_secret_key)
api = tweepy.API(auth)
TWITTER_CONSUMER_KEY
, TWITTER_CONSUMER_SECRET
,user.twitter_access_token
, user.twitter_secret_key
は自分のものに変更しておいてください。Webサービスなど不特定多数のユーザーのアクセストークンを必要とする場合はDjangoでTwitterなどのOAuth 1.0認証を行う方法を見て取得してください。
api.update_status("Hello World")
のように投稿などができるようになります。他にも色々できますがそれは検索してもらうか公式ドキュメント(英語)を読んでもらうとして、この記事ではツイートやいいねを最大限取得する方法を解説します。
とりあえずコードです。
FIFTEEN_MINUTES = 15 * 60
latest_id = 1
def limit_handled(cursor):
while True:
try:
yield cursor.next()
except tweepy.error.TweepError:
print('Twitter rate limit')
time.sleep(FIFTEEN_MINUTES)
except StopIteration:
print("fetch end")
return None
def fetch_twitter_likes(api):
first = True
for status in limit_handled(tweepy.Cursor(api.favorites, since_id=latest_id).items()):
if first:
latest_id = status.id_str
first = False
print(status.text)
for status in limit_handled(tweepy.Cursor(api.favorites, since_id=latest_id).items()):
の部分でいいねを取得しています。api.favorites
の部分を変えることで検索結果などのツイート一覧を取得できます。
問題はlimit_handled
の部分です。ここでツイートを順次取得しているのですが、TwitterのAPI制限にかかった場合tweepy.error.TweepError
が発生し、ここでは15分待機しています。すべてのツイートを取得した場合StopIteration
が発生しループを終了します。
宣伝
以上のコードを使ってRemind ArchivesというWebサービスを作りました。これは過去のいいねやRTをランダムに表示して発見とセレンディピティを生み出すことを目的とするサービスです。