Class: Jcr
- Includes:
- MetadataHelper
- Defined in:
- lib/service_adaptors/jcr.rb
Overview
Link to Thomson JCR impact report for journal title.
REQUIREMENTS: You must be an ISI customer if you want these links to actually work for your users. Off-campus users should be sent through EZProxy, see the EZProxy plug-in.
You need to register for the the Thomson ‘Links Article Match Retrieval’ (LAMR) service api, which is used here (and also in the Isi plugin). To register, see: wokinfo.com/products_tools/products/related/amr/
You register by IP address, so no API key is needed once your registration goes through.
If you later need to change the IP addresses entitled to use this API, use scientific.thomson.com/scientific/techsupport/cpe/form.html. to request a change.
Constant Summary
Constants inherited from Service
Service::LinkOutFilterTask, Service::StandardTask
Instance Attribute Summary
Attributes inherited from Service
#name, #priority, #request, #service_id, #session_id, #status, #task, #url
Instance Method Summary collapse
- #add_responses(request, isi_response) ⇒ Object
- #do_lamr_request(xml) ⇒ Object
-
#gen_lamr_request(request) ⇒ Object
produces XML to be posted to Thomson ‘Links Article Match Retrieval’ service api.
- #handle(request) ⇒ Object
-
#initialize(config) ⇒ Jcr
constructor
A new instance of Jcr.
- #service_types_generated ⇒ Object
-
#sufficient_metadata?(referent) ⇒ Boolean
Need an ISSN.
Methods included from MetadataHelper
#get_doi, #get_gpo_item_nums, #get_identifier, #get_isbn, #get_issn, #get_lccn, #get_oclcnum, #get_pmid, #get_search_creator, #get_search_terms, #get_search_title, #get_sudoc, #get_top_level_creator, #get_year, #normalize_lccn, #normalize_title, #raw_search_title, #title_is_serial?
Methods included from MarcHelper
#add_856_links, #edition_statement, #get_title, #get_years, #gmd_values, #service_type_for_856, #should_skip_856_link?, #strip_gmd
Methods inherited from Service
#credits, #display_name, #handle_wrapper, #link_out_filter, #preempted_by, required_config_params, #response_to_view_data, #response_url, #view_data_from_service_type
Constructor Details
#initialize(config) ⇒ Jcr
Returns a new instance of Jcr.
34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/service_adaptors/jcr.rb', line 34 def initialize(config) #defaults @wos_app_name = "Umlaut" @display_name = "Journal Citation Reports\xc2\xae" # trademark symbol, utf-8 @link_text = "Journal impact factor" @api_url = "https://ws.isiknowledge.com/cps/xrpc" @include_for_article_level = true @credits = { @display_name => "http://thomsonreuters.com/products_services/science/science_products/a-z/journal_citation_reports/" } super(config) end |
Instance Method Details
#add_responses(request, isi_response) ⇒ Object
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/service_adaptors/jcr.rb', line 119 def add_responses(request, isi_response) # raise if it's an HTTP error code isi_response.value nokogiri = Nokogiri::XML(isi_response.body) # Check for errors. if (error = (nokogiri.at('val[@name = "error"]') || nokogiri.at('error') || nokogiri.at('null[@name = "error"]'))) raise Exception.new("Third party service error: #{error.inner_text}") end results = nokogiri.at('map[@name ="cite_id"] map[@name="JCR"]') impact_url = results.at('val[@name ="impactGraphURL"]') if (impact_url ) request.add_service_response(:service=>self, :display_text => @link_text, :url => impact_url.inner_text, :service_type_value => :highlighted_link, :debug_info => "url: #{impact_url.inner_text}") end end |
#do_lamr_request(xml) ⇒ Object
109 110 111 112 113 114 115 116 117 |
# File 'lib/service_adaptors/jcr.rb', line 109 def do_lamr_request(xml) uri = URI.parse(@api_url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if (uri.scheme == 'https') headers = {'Content-Type' => 'application/xml'} return http.post(uri.request_uri, xml, headers) end |
#gen_lamr_request(request) ⇒ Object
produces XML to be posted to Thomson ‘Links Article Match Retrieval’ service api.
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/service_adaptors/jcr.rb', line 70 def gen_lamr_request(request) output = "" builder = Builder::XmlMarkup.new(:target => output, :indent => 2) builder.instruct!(:xml, :encoding => "UTF-8") builder.request(:xmlns => "http://www.isinet.com/xrpc41", :src => "app.id=Umlaut") do builder.fn(:name => "LinksAMR.retrieve") do builder.list do # first map is authentication info. empty 'map' element since we are IP authenticated. builder.map # specify what we're requesting builder.map do builder.list(:name=>"JCR") do builder.val("impactGraphURL") end end # specify our query builder.map do builder.map(:name => "cite_id") do = request.referent. if (issn = request.referent.issn) issn = issn[0,4] + '-' + issn[4,7] unless issn =~ /\-/ builder.val(issn, :name => "issn") end # Journal title. if (! ['jtitle'].blank? ) builder.val(['jtitle'], :name => "stitle" ) elsif (! ['title'].blank? ) builder.val(['title'], :name => 'stitle' ) end end end end end end return output end |
#handle(request) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/service_adaptors/jcr.rb', line 49 def handle(request) unless ( (request.referent)) return request.dispatched(self, true) end xml = gen_lamr_request(request) isi_response = do_lamr_request(xml) add_responses( request, isi_response ) return request.dispatched(self, true) end |
#service_types_generated ⇒ Object
30 31 32 |
# File 'lib/service_adaptors/jcr.rb', line 30 def service_types_generated return [ServiceTypeValue[:highlighted_link]] end |
#sufficient_metadata?(referent) ⇒ Boolean
Need an ISSN.
65 66 67 |
# File 'lib/service_adaptors/jcr.rb', line 65 def (referent) return ! referent.issn.blank? end |