# HG changeset patch # User nanaya # Date 1513101087 -32400 # Node ID 3fc882b0884d6d10cab5e781d2d93355d21f6f39 # Parent 3646b3e319c705fe4a8546f97810c06fb8267e81 Refactored client initialization diff -r 3646b3e319c7 -r 3fc882b0884d app/models/tweet.rb --- a/app/models/tweet.rb Wed Dec 13 02:28:34 2017 +0900 +++ b/app/models/tweet.rb Wed Dec 13 02:51:27 2017 +0900 @@ -1,20 +1,24 @@ class Tweet + def initialize(twitter_id) + @clients = {} + @twitter_id = twitter_id + end + def cache_expires_time (15 + rand(15)).minutes end def timeline - start_client_config_id = @client_config_id + initial_config_id = client_config_id @timeline ||= Rails.cache.fetch({ :timeline => @twitter_id }, :expires_in => cache_expires_time) do begin - @client.user_timeline(@twitter_id, :count => 100, :exclude_replies => false, :include_rts => true, :tweet_mode => :extended) + client.user_timeline(@twitter_id, :count => 100, :exclude_replies => false, :include_rts => true, :tweet_mode => :extended) rescue Twitter::Error::TooManyRequests - next_client_config_id = @client_config_id + 1 - init_client next_client_config_id + @client_config_id += 1 - if @client_config_id == start_client_config_id + if initial_config_id == client_config_id raise else retry @@ -34,21 +38,18 @@ end end - def initialize(twitter_id) - @client = init_client - @twitter_id = twitter_id + def client + @clients[client_config_id] ||= + Twitter::REST::Client.new do |config| + $cfg[:twitter][client_config_id].each do |cfg_key, cfg_value| + config.public_send("#{cfg_key}=", cfg_value) + end + end 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? && config_id != 0 + def client_config_id + @client_config_id ||= 0 - @client = Twitter::REST::Client.new do |config| - $cfg[config_hash_key].each do |cfg_key, cfg_value| - config.public_send("#{cfg_key}=", cfg_value) - end - end + @client_config_id % $cfg[:twitter].size end end diff -r 3646b3e319c7 -r 3fc882b0884d config/config_init.rb --- a/config/config_init.rb Wed Dec 13 02:28:34 2017 +0900 +++ b/config/config_init.rb Wed Dec 13 02:51:27 2017 +0900 @@ -1,10 +1,12 @@ $cfg = { - :twitter0 => { - :consumer_key => ENV["RT_CONSUMER_KEY"], - :consumer_secret => ENV["RT_CONSUMER_SECRET"], - :access_token => ENV["RT_ACCESS_TOKEN"], - :access_token_secret => ENV["RT_ACCESS_TOKEN_SECRET"] - }, + :twitter => [ + { + :consumer_key => ENV["RT_CONSUMER_KEY"], + :consumer_secret => ENV["RT_CONSUMER_SECRET"], + :access_token => ENV["RT_ACCESS_TOKEN"], + :access_token_secret => ENV["RT_ACCESS_TOKEN_SECRET"], + }, + ], :redis_server => ENV["RT_REDIS_SERVER"] }