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

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

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

前回タイムラインを可能な限り昔に遡って取得しようとしたのですが,twitterの仕様かそれほど昔まで遡れませんでした。
タイムラインが遡れないのなら,followerのつぶやきを一人ずつ遡って後から統合すれば超昔まで遡れるタイムラインになるんじゃね?って思って組みなおすことにしました。

require "twitter"

#とりあえず雛形
client = Twitter::REST::Client.new do |config|
    config.consumer_key = "hogeeeeeeeeeeeeeee"
    config.consumer_secret = "hugaaaaaaaaaaaaaaaaaa"
    config.access_token =  "fooooooooooooooooo"
    config.access_token_secret = "piyooooooooooooo"
end

#friend一人ずつ,遡れるまでtweetを取得
client.friend_ids("#{あなたのscreen_name}").each_slice(100).each do |slice|
    client.users(slice).each do |friend|
        bef_id,max_id = -1, client.user_timeline(friend.screen_name).first.id
        loop do
            client.user_timeline(friend.screen_name,{max_id: max_id,count: 200}).each do |tweet|
                puts tweet.user.name
                puts tweet.user.screen_name
                puts tweet.full_text
                print "Fav: #{tweet.favorite_count}, Retweet: #{tweet.retweet_count}\n"
                max_id = tweet.id unless tweet.retweeted?
            end
            sleep 60
            break if max_id == bef_id
            bef_if = max_id
        end
    end
end

一日走らせ続けて100ユーザー分くらいを取得できます。体感で数年分は遡れてるはず。もしかしたら全部いけてるかな?
sleep 60より短くしても大丈夫な気もするけどチキンなので試してないです。笑

それでは,RubyでよいTwitterライフを!