3
2

More than 1 year has passed since last update.

Pythonでツイートやいいねを一括取得する方法

Last updated at Posted at 2021-02-17

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をランダムに表示して発見とセレンディピティを生み出すことを目的とするサービスです。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2