# HG changeset patch # User nanaya # Date 1466927162 -32400 # Node ID 0c023d35cd8095bbff0b0ef8b36c9f400797dd4d # Parent 585952f989784c0d6d7fe14bd49e75b89be5b0a7 Allows usage of multiple twitter keys Working around api rate limit diff -r 585952f98978 -r 0c023d35cd80 app/models/tweet.rb --- 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 diff -r 585952f98978 -r 0c023d35cd80 config/config_init.rb --- a/config/config_init.rb Thu Jun 23 01:47:33 2016 +0900 +++ b/config/config_init.rb Sun Jun 26 16:46:02 2016 +0900 @@ -1,5 +1,5 @@ $cfg = { - :twitter => { + :twitter0 => { :consumer_key => ENV["RT_CONSUMER_KEY"], :consumer_secret => ENV["RT_CONSUMER_SECRET"], :access_token => ENV["RT_ACCESS_TOKEN"],