0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

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

参考リンク

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?