Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

はじめに

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を使うよりは収集できるツイート数は圧倒的に増える。

以上です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした