Sha256: 1490d8bc2933e5929304f59fcc076f9d24e321e76e2b8e03cb170cbb1dd6c192
Contents?: true
Size: 1.18 KB
Versions: 17
Compression:
Stored size: 1.18 KB
Contents
module Qa::Authorities class Geonames < Base include WebServiceBase class_attribute :username, :label self.label = lambda do |item| [item['name'], item['adminName1'], item['countryName']].compact.join(', ') end def search(q) unless username Rails.logger.error "Questioning Authority tried to call geonames, but no username was set" return [] end parse_authority_response(json(build_query_url(q))) end def build_query_url(q) query = ERB::Util.url_encode(untaint(q)) "http://api.geonames.org/searchJSON?q=#{query}&username=#{username}&maxRows=10" end def untaint(q) q.gsub(/[^\w\s-]/, '') end def find(id) json(find_url(id)) end def find_url(id) "http://www.geonames.org/getJSON?geonameId=#{id}&username=#{username}" end private # Reformats the data received from the service def parse_authority_response(response) response['geonames'].map do |result| # Note: the trailing slash is meaningful. { 'id' => "http://sws.geonames.org/#{result['geonameId']}/", 'label' => label.call(result) } end end end end
Version data entries
17 entries across 17 versions & 1 rubygems