# queries reportbooru to find popular post searches class PopularSearchService attr_reader :date, :scale def self.enabled? Danbooru.config.reportbooru_server.present? end def initialize(date, scale) if !PopularSearchService.enabled? raise NotImplementedError.new("the Reportbooru service isn't configured. Popular searches are not available.") end @date = date @scale = scale end def each_search(limit = 100, &block) fetch_data.to_s.scan(/(.+?) (\d+)\.0\n/).slice(0, limit).each(&block) end def tags fetch_data.to_s.scan(/(.+?) (\d+)\.0\n/).map {|x| x[0]} end def fetch_data dates = date.strftime("%Y-%m-%d") Cache.get("ps-#{scale}-#{dates}", 1.minute) do url = "#{Danbooru.config.reportbooru_server}/hits/#{scale}?date=#{dates}" response = HTTParty.get(url, Danbooru.config.httparty_options.reverse_merge(timeout: 3)) if response.success? response = response.body else response = "" end response end.to_s.force_encoding("utf-8") end end