class NicoSearch::Client
Constants
- ENDPOINT
- SERVICES
Public Class Methods
search(service, params = {})
click to toggle source
# File lib/nico_search/client.rb, line 14 def search(service, params = {}) check_available_service(service) url = ENDPOINT % service get_json(url, params) end
Private Class Methods
check_available_service(service)
click to toggle source
# File lib/nico_search/client.rb, line 64 def check_available_service(service) unless SERVICES.include?(service) raise UnavailableServiceError end end
filter_string(filters)
click to toggle source
# File lib/nico_search/client.rb, line 48 def filter_string(filters) filters.map{|k,v| if v.is_a?(Hash) v.map{|kk,vv| "[#{k}][#{kk}]=#{CGI::escape(vv.to_s)}" } elsif v.is_a?(Array) v.map{|vv| "[#{k}][]=#{CGI::escape(vv.to_s)}" } else "[#{k}][]=#{CGI::escape(v.to_s)}" end }.flatten.map{|s| 'filters' + s}.join('&') end
get_json(url, params)
click to toggle source
# File lib/nico_search/client.rb, line 22 def get_json(url, params) uri = URI.parse(url) resp = Net::HTTP.start(uri.host, uri.port) do |http| http.open_timeout = 5 http.read_timeout = 10 http.get(uri.request_uri + query_string(params)) end resp.value # raise if status code is not 2xx json = resp.body JSON.parse(json) end
query_string(params)
click to toggle source
# File lib/nico_search/client.rb, line 36 def query_string(params) return '' if params.empty? '?' + params.map{|k,v| if k == :filters filter_string(v) else "#{k}=#{CGI::escape([v].flatten.join(','))}" end }.join('&') end