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