Mercurial > rsstweet
diff app/models/tweet.rb @ 76:0c023d35cd80
Allows usage of multiple twitter keys
Working around api rate limit
author | nanaya <me@myconan.net> |
---|---|
date | Sun, 26 Jun 2016 16:46:02 +0900 |
parents | e9a6019a34ea |
children | fc2bc34e6d89 |
line wrap: on
line diff
--- a/app/models/tweet.rb Thu Jun 23 01:47:33 2016 +0900 +++ b/app/models/tweet.rb Sun Jun 26 16:46:02 2016 +0900 @@ -1,9 +1,17 @@ class Tweet def timeline(options = {}) - @timeline ||= - Rails.cache.fetch({ :timeline => @twitter_id, :options => options.dup }, :expires_in => 5.minutes) do - @client.user_timeline(@twitter_id, options) - end + start_client_config_id = @client_config_id + + begin + @timeline ||= + Rails.cache.fetch({ :timeline => @twitter_id, :options => options.dup }, :expires_in => 5.minutes) do + @client.user_timeline(@twitter_id, options) + end + rescue Twitter::Error::TooManyRequests + next_client_config_id = @client_config_id + 1 + init_client next_client_config_id + retry unless @client_config_id == start_client_config_id + end end def user @@ -18,11 +26,20 @@ end def initialize(twitter_id) + @client = init_client + @twitter_id = twitter_id + end + + def init_client(config_id = 0) + @client_config_id = config_id + config_hash_key = "twitter#{config_id}".to_sym + + return init_client(0) if $cfg[config_hash_key].nil? + @client = Twitter::REST::Client.new do |config| - $cfg[:twitter].each do |cfg_key, cfg_value| + $cfg[config_hash_key].each do |cfg_key, cfg_value| config.public_send("#{cfg_key}=", cfg_value) end end - @twitter_id = twitter_id end end