class Qa::Authorities::AssignFast::GenericAuthority
A wrapper around the FAST api for use with questioning_authority API documentation: www.oclc.org/developer/develop/web-services/fast-api/assign-fast.en.html
Attributes
Public Class Methods
new(subauthority)
click to toggle source
Calls superclass method
# File lib/qa/authorities/assign_fast/generic_authority.rb, line 8 def initialize(subauthority) super() @subauthority = subauthority end
Public Instance Methods
build_query_url(q)
click to toggle source
Build a FAST API url
@param [String] the query @return [String] the url
# File lib/qa/authorities/assign_fast/generic_authority.rb, line 44 def build_query_url(q) escaped_query = clean_query_string q index = AssignFast.index_for_authority(subauthority) return_data = "#{index}%2Cidroot%2Cauth%2Ctype" num_rows = 20 # max allowed by the API # sort=usage+desc is not documented by OCLC but seems necessary to get the sort # we formerly got without specifying, that is most useful in our use case. "http://fast.oclc.org/searchfast/fastsuggest?&query=#{escaped_query}&queryIndex=#{index}&queryReturn=#{return_data}&suggest=autoSubject&rows=#{num_rows}&sort=usage+desc" end
response(url)
click to toggle source
FAST requires spaces to be encoded as %20 and will not accept + which is Faraday’s default encoding
# File lib/qa/authorities/assign_fast/generic_authority.rb, line 17 def response(url) space_fix_encoder = AssignFast::SpaceFixEncoder.new Faraday.get(url) do |req| req.options.params_encoder = space_fix_encoder req.headers['Accept'] = 'application/json' end end
search(q)
click to toggle source
Search the FAST api
@param [String] the query @return json results
# File lib/qa/authorities/assign_fast/generic_authority.rb, line 29 def search(q) url = build_query_url q begin raw_response = json(url) rescue JSON::ParserError Rails.logger.info "Could not parse response as JSON. Request url: #{url}" return [] end parse_authority_response(raw_response) end
Private Instance Methods
clean_query_string(q)
click to toggle source
Removes characters from the query string that are not tolerated by the API
See oclc sample code at http://experimental.worldcat.org/fast/assignfast/js/assignFASTComplete.js
# File lib/qa/authorities/assign_fast/generic_authority.rb, line 60 def clean_query_string(q) ERB::Util.url_encode(q.gsub(/-|\(|\)|:/, "")) end