LoginSignup
20
25

More than 5 years have passed since last update.

Twitterのつぶやきを一度に大量取得する

Last updated at Posted at 2016-12-07

はじめに

TwitterのAPIが使えること前提です(すみません)
ツイートを使っていろいろしたいのに、データ収集に苦労しているという人のための記事です。

目的

TwitterのAPIsearchを使って普通にツイート検索をしようとすると上位100件までしか取得できない。
しかしツイート1つひとつに当てられているIDをたどることで過去1週間以内までのツイートを取得することができる。
以下がその検索プログラムである。

tweet_search.py
# -*- coding:utf-8 -*-
import tweepy

def search_tweet(api):
    print('最新のつぶやきから出力')
    print('検索ページ:1')
    tweet_data = api.search(q=' ', count=100)
    for tweet in tweet_data:
            print(tweet.text)
            print('************************************************\n')
    next_max_id = tweet_data[-1].id
    for i in range(2, 11):
        print('検索ページ:' + str(i))
        tweet_data = api.search(q=' ', count=100, max_id=next_max_id-1)
        next_max_id = tweet_data[-1].id
        for tweet in tweet_data:
            print(tweet.text)
            print('************************************************\n')

if '__name__' == '__main__':
    consumer_key = "XXXXXXXXXXXXXXXXXXXXXXX"
    consumer_secret = "XXXXXXXXXXXXXXXXXXXXXXXX"
    access_token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    access_token_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXX"
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
    auth.set_access_token(access_token, access_token_secret)
    api = tweepy.API(auth)
    search_tweet(api)

仕組みを簡単に説明すると
・すべてのツイートには必ずツイートID(すべて数字)が当てられている。
・そのIDは最新のツイートほど大きな値になっている(例えば最新のツイートのIDを7000とするとひとつ前のツイートのIDは6999となる)。
・通常のAPIsearchは最新のツイートから順に過去のツイートへと遡っていく。
・そしてAPIsearchにはmax_idという引数があり、このIDを指定することでこの値以下のツイートに限定して検索することができる

これら4点を利用すると「ツイートIDが7000以下から検索する」という処理が可能になる。

つまり
1.ツイートを100件取得する
2.100件目のIDを保存
3.そのIDより値以下から検索する(1に戻る)

これを繰り返すことで無限に過去ツイートを取得し続けることができる!
・・・と言いたいところだが、APIで取得できるのは残念ながら一週間以内のツイートと限定されているため、無限ではない。
とはいえ普通にAPIsearchを使うよりは収集できるツイート数は圧倒的に増える。

以上です。

20
25
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
20
25