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件取得してみます。
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