7rpn’s blog: うわああああな日常

好きなことをつらつらと。AIとかで面白いことをしたい。

RubyのTwitter gemを使ってTwitterのタイムラインを取得する。たくさん。

Twitter gemを使って自分のタイムラインを遡れるところまで全部取得したいなーと思った。

まぁググっても良い記事がヒットしなかったんですけどね。 検索して出て来たやつのほとんどがタイムラインを20件だけ取得して満足してる記事だったっていう

client.home_timeline.each do |tweet|
    puts tweet.full_text
    puts "Fav: #{tweet.favorite_count}, Retweet: #{tweet.retweet_count}"
end

みんなこれ。うける
自分はグーグルを使ったサーチ能力が低いんですかね。

俺はもっと過去にまで遡ってタイムラインを取得したいんだよ!!!!
というわけでドンピシャ記事が見つからなかったのでブログに書き残しておきます。

実装

とりあえず雛形。お約束。

require "twitter"

client = Twitter::REST::Client.new do |config|
  config.consumer_key = "hoooooooooo"
  config.consumer_secret = "huuuuuuuu"
  config.access_token = "heeeeeeeee"
  config.access_token_secret = "haaaaaaaaaaaa"
end

ここまではみんな一緒。

たくさん取得したい場合,client.home_timelineに引数を与えて色々やるみたい。
ていうわけで,永遠にタイムラインを取得し続けたかったので以下のような感じで書きました。

max_id = client.home_timeline.first.id
hoge.times do
    client.home_timeline(max_id: max_id,count: 200).each do |tweet|
        puts tweet.user.name
        puts tweet.full_text
        puts "Fav: #{tweet.favorite_count}, Retweet: #{tweet.retweet_count}"
        max_id = tweet.id unless tweet.retweeted?
    end
    sleep 60
end

風の噂でタイムライン取得の制限が15分で15回って聞いていたので,一応sleep 60してあります。
hogeは好きな数字で。5.timesなら5*200でtweetが1000件返ってきます。

max_idでタイムラインを読み込み始めるツイートを指定して,順に昔へ遡って行く感じ。

まぁノリで書いたので適当なところ調節してあげてください。
ていうか見つけられなかっただけでもっと良い方法もありそうな気がします。

追記:
この手法だとTwitterの仕様なのか数週間程度しか遡れません。Timelineってそんな遡れない物なのか。
ユーザーごとに個別にツイートを読んでいく方がたくさん読めそうなので,プログラム自体を書き直す予定です。

=> 数年分遡れるように書き直しました!
RubyのTwitter gemを使ってTwitterのタイムラインを取得する。もっとたくさん。