class DNPedia::API
Constants
- BASE_URL
- DEFAULT_HEADERS
- DEFAULT_PARAMS
- HOST
Public Instance Methods
search(word, **params)
click to toggle source
# File lib/dnpedia/api.rb, line 34 def search(word, **params) params = DEFAULT_PARAMS.merge(params).merge( ecv: normalize(word) ) _get("/tlds/ajax.php", params) { |json| json } end
Private Instance Methods
_get(path, params = {}, &block)
click to toggle source
# File lib/dnpedia/api.rb, line 91 def _get(path, params = {}, &block) uri = url_for(path) uri.query = URI.encode_www_form(params) get = Net::HTTP::Get.new(uri, DEFAULT_HEADERS) request(get, &block) end
decompress_gzip_body(body)
click to toggle source
# File lib/dnpedia/api.rb, line 69 def decompress_gzip_body(body) io = StringIO.new(body) gz = Zlib::GzipReader.new(io) gz.read rescue Zlib::GzipFile::Error => e raise Error, e.message end
https_options()
click to toggle source
# File lib/dnpedia/api.rb, line 55 def https_options if proxy = ENV["HTTPS_PROXY"] || ENV["https_proxy"] uri = URI(proxy) { proxy_address: uri.hostname, proxy_port: uri.port, proxy_from_env: false, use_ssl: true } else { use_ssl: true } end end
normalize(word)
click to toggle source
# File lib/dnpedia/api.rb, line 44 def normalize(word) return word if word.start_with?("~") return word unless word.include?("%") "~#{word}" end
request(req) { |parse body| ... }
click to toggle source
# File lib/dnpedia/api.rb, line 77 def request(req) Net::HTTP.start(HOST, 443, https_options) do |http| response = http.request(req) code = response.code.to_i raise Error, "Unsupported response code returned: #{code}" if code != 200 body = response.body body = decompress_gzip_body(body) if response["content-encoding"] == "gzip" yield JSON.parse body end end
url_for(path)
click to toggle source
# File lib/dnpedia/api.rb, line 51 def url_for(path) URI(BASE_URL + path) end