app/service_adaptors/ulrichs_cover.rb
# Ulrich's provides journal cover images that are _publically_ available, at
# predictable urls based on issn. Not sure if this is intentional. But as
# an ulrich's subscriber, I feel fine using it. If my insitution was not
# an ulrich's subscriber, I probably wouldn't use this service.
class UlrichsCover < Service
require 'open-uri'
def service_types_generated
return [ServiceTypeValue[:cover_image]]
end
def initialize(config)
@base_url = "http://images.serialssolutions.com/ulrichs/"
super(config)
end
def handle(request)
issn = request.referent.issn
# We need an ISSN
return request.dispatched(self, true) unless issn
# No hyphens please
issn = issn.gsub(/[^0-9X]/, '')
check_url = @base_url + issn + '.gif'
# does it exist?
if ( url_resolves(check_url) )
request.add_service_response(:service => self,
:service_type_value => :cover_image ,
:url => check_url,
:size => "medium" )
end
return request.dispatched(self, true)
end
def url_resolves(url)
uri_obj = URI.parse(url)
response = Net::HTTP.start(uri_obj.host, uri_obj.port) {|http|
http.head(uri_obj.request_uri)
}
if (response.kind_of?( Net::HTTPSuccess ))
return true
elsif ( response.kind_of?(Net::HTTPNotFound))
return false
else
# unexpected condition, raise
response.value
end
end
end