class EzproxyProviders::Ebscohost
Public Class Methods
parse(path, params, uri)
click to toggle source
# File lib/logstash/filters/ezproxy_providers/ebscohost.rb, line 18 def self.parse (path, params, uri) data = { "provider" => "ebscohost" } if (/^\/ebscoviewerservice/i.match(path)) data['rtype'] = 'EBOOK' end if (params.key?('an')) data['unit_id'] = params['an'][0] data['title_id'] = params['an'][0] end if (params.key?('retrievalFormat')) data['mime'] = params['retrievalFormat'][0] end artifact_params = %w(artifactId theDoid doid) artifact_params.each do |p| if params.key?(p) if (param_match = /(.+)\$(.+)\$([a-zA-Z]+)/.match(params[p][0])) data['unit_id'] = param_match[2] data['title_id'] = param_match[2] data['mime'] = param_match[3] end end end if ((match = /^\/(ehost|eds)\/([a-z]+)(?:\/[a-z]+)?$/i.match(path))) category = match[2].downcase if (match[1].downcase == 'eds') data['platform_name'] = 'EBSCO Discovery Service' end case (category) when 'results', 'resultsadvanced' data['rtype'] = 'TOC' data['mime'] = 'MISC' when 'ebookviewer' data['rtype'] = 'BOOK' data['mime'] = 'PDF' when 'pdfviewer' data['rtype'] = 'ARTICLE' data['mime'] = 'PDF' when 'search' data['rtype'] = 'SEARCH' data['mime'] = 'MISC' when 'detail' data['rtype'] = 'REF' data['mime'] = 'HTML' if (uri.fragment) hashedUrl = uri.fragment query = CGI::parse(hashedUrl) if (query.key?('AN')) data['unit_id'] = query['AN'][0] end end end elsif ((match = /^\/pdf[a-z0-9_]*\/pdf\/\S+\/([a-z0-9]+)\.pdf$/i.match(path))) data['rtype'] = 'ARTICLE' data['mime'] = 'PDF' data['unit_id'] = match[1] elsif (path.downcase === '/contentserver.asp') data['rtype'] = 'ARTICLE' data['mime'] = 'PDF' if (params.key?('K')) data['unit_id'] = params['K'][0] end elsif (path.downcase == '/openurl') data['rtype'] = 'OPENURL' data['mime'] = 'HTML' params.each do |key, value| if (@openUrlFields.key?(key)) data[@openUrlFields[key]] = value[0] end end if (params.key?('pages')) pagesMatch = /^(\d+)-(\d+)$/.match(params['pages'][0]); if (pagesMatch) data['first_page'] = pagesMatch[1] data['last_page'] = pagesMatch[2] end end if (data['unit_id'] && data['unit_id'].downcase.start_with?('doi:')) data['doi'] = data['unit_id'] = data['unit_id'][4..-1] end end return data end