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

twitterscraper-rubyを使って数年前のツイートを日付指定で検索する

Twitterのツイートを検索するには、Twitter Search APIを使う方法がありますが、直近の7日間分しか検索することができません。

この制限を回避するために、twitterscraper-ruby gemを使ってみます。twitterscraper-rubyはTwitterを直接スクレイピングするため、ツイッターが始まった最初の日からいつのツイートでも検索することができます。

注意1

twitterscraper-rubyはTwitterを直接スクレイピングしますが、Twitterの利用規約ではスクレイピングは禁止されています。個人的な少量のツイート収集程度の利用にとどめておきましょう。

注意2

Twitterの検索機能は全ツイートを対象としていません。さらに、日本語のツイートについてはうまく検索できないこともあるようです。そのため、全量のツイート収集には適していません。

日付指定でツイートを検索する

twitterscraper-rubyを使う場合とTwitter Search APIを使う場合の結果をそれぞれ比較してみます。

twitterscraper-rubyを使う場合

試しに2020年1月1日のツイートを上限1000件取得してみます。

Gemfile
gem 'twitterscraper-ruby'
require 'twitterscraper'

# IPがbanされる可能性を減らすためのプロキシ機能があるのですが、
# 代わりに速度がかなり遅くなるので、プロキシはオフにしています
client = Twitterscraper::Client.new(proxy: false)

tweets = client.query_tweets('Twitter', start_date: '2020-01-01', end_date: '2020-01-02', lang: 'ja', limit: 1000)

puts tweets.size
# => 1000

tweets.take(3).each { |t| puts t.created_at }
# => 2020-01-01 23:59:59 +0000
# => 2020-01-01 23:59:59 +0000
# => 2020-01-01 23:59:59 +0000

ぴったり1000件取得できました。他の数値も試してみましたが、少し超えることもあるみたいです。

Twitter Search API(twitter gem)を使う場合

Twitter Search APIを利用して同じ日付のツイートを取得することも試してみましたが、こちらは想定通り1件もツイートが取得できませんでした。Twitter Search APIは直近の7日間のツイートしか取得できないためです。

# https://github.com/sferik/twitter
client = Twitter::REST::Client.new

tweets = client.search('Twitter since:2020-01-01 until:2020-01-02', count: 100)

puts tweets.size
# => 0

参考リンク

ts-3156
公開している記事のうち、私が集計まで担当しているものは、希望があれば元データをお渡しいたします。ご希望される方は、Twitterでご連絡ください。
https://twitter.com/ts_3156
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