diff --git a/app/logical/downloads/rewrite_strategies/nico_seiga.rb b/app/logical/downloads/rewrite_strategies/nico_seiga.rb index 678ce017b..aa6b08740 100644 --- a/app/logical/downloads/rewrite_strategies/nico_seiga.rb +++ b/app/logical/downloads/rewrite_strategies/nico_seiga.rb @@ -1,6 +1,12 @@ module Downloads module RewriteStrategies class NicoSeiga < Base + attr_accessor :url, :source + + def initialize(url) + @url = url + end + def rewrite(url, headers, data = {}) if url =~ %r{https?://lohas\.nicoseiga\.jp} || url =~ %r{https?://seiga\.nicovideo\.jp} url, headers = rewrite_headers(url, headers) @@ -22,8 +28,6 @@ module Downloads # example: http://seiga.nicovideo.jp/seiga/im1389842 if url =~ %r{https?://seiga\.nicovideo\.jp/seiga/im\d+} - source = ::Sources::Strategies::NicoSeiga.new(url) - source.get return [source.image_url, headers] else return [url, headers] @@ -32,8 +36,6 @@ module Downloads def rewrite_thumbnails(url, headers) if url =~ %r{/thumb/\d+} - source = ::Sources::Strategies::NicoSeiga.new(url) - source.get return [source.image_url, headers] end @@ -44,13 +46,21 @@ module Downloads # example: http://lohas.nicoseiga.jp/o/40aeedd2848a7780b6046747e75b3566b423a10c/1436307639/5026559 if url =~ %r{http://lohas\.nicoseiga\.jp/o/} - source = ::Sources::Strategies::NicoSeiga.new(url) - source.get return [source.image_url, headers] else return [url, headers] end end + + # Cache the source data so it gets fetched at most once. + def source + @source ||= begin + source = ::Sources::Strategies::NicoSeiga.new(url) + source.get + + source + end + end end end end diff --git a/app/logical/downloads/rewrite_strategies/twitter.rb b/app/logical/downloads/rewrite_strategies/twitter.rb index b440218cd..be7175973 100644 --- a/app/logical/downloads/rewrite_strategies/twitter.rb +++ b/app/logical/downloads/rewrite_strategies/twitter.rb @@ -1,6 +1,12 @@ module Downloads module RewriteStrategies class Twitter < Base + attr_accessor :url, :source + + def initialize(url) + @url = url + end + def rewrite(url, headers, data = {}) if url =~ %r!^https?://(?:mobile\.)?twitter\.com! url, headers = rewrite_status_page(url, headers, data) @@ -13,7 +19,6 @@ module Downloads protected def rewrite_status_page(url, headers, data) - source = build_source(url) url = source.image_url data[:artist_commentary_desc] = source.artist_commentary_desc return [url, headers, data] @@ -27,9 +32,13 @@ module Downloads return [url, headers] end - def build_source(url) - ::Sources::Strategies::Twitter.new(url).tap do |x| - x.get + # Cache the source data so it gets fetched at most once. + def source + @source ||= begin + source = ::Sources::Strategies::Twitter.new(url) + source.get + + source end end end