#はじめに
TwitterのAPIが使えること前提です(すみません)
ツイートを使っていろいろしたいのに、データ収集に苦労しているという人のための記事です。
#目的
TwitterのAPIsearchを使って普通にツイート検索をしようとすると上位100件までしか取得できない。
しかしツイート1つひとつに当てられているIDをたどることで過去1週間以内までのツイートを取得することができる。
以下がその検索プログラムである。
# -*- 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を使うよりは収集できるツイート数は圧倒的に増える。
以上です。