umlaut 3.3.0 → 3.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/service_adaptors/amazon.rb +36 -27
- data/app/service_adaptors/illiad.rb +2 -0
- data/lib/umlaut/version.rb +1 -1
- metadata +20 -4
@@ -1,18 +1,19 @@
|
|
1
1
|
require 'aws_product_sign'
|
2
|
+
require 'httpclient'
|
2
3
|
|
3
4
|
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# for certain functions by setting 'make_aws_call' to false, and configuring
|
7
|
-
# 'service_types' to only include one or more of: ["search_inside",
|
8
|
-
# "highlighted_link", "excerpts"]
|
9
|
-
# Other services, such as enhance_referent and cover_image require api access.
|
5
|
+
# AWS API account is required. NOTE: You may want to the API Terms of Service
|
6
|
+
# and make sure you feel comfortable with them.
|
10
7
|
#
|
11
8
|
# More about registering for and finding your AWS access key and secret key
|
12
9
|
# can be found here:
|
13
10
|
# http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/AWSCredentials.html
|
14
11
|
# http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/ViewingCredentials.html
|
15
12
|
#
|
13
|
+
# NOTE: Discovery of :search_inside and :excerpts links requires screen-scraping
|
14
|
+
# an Amazon back-end endpoint. If you are uncomfortable with this mode of
|
15
|
+
# access, disable those service types, or do not use this adapter.
|
16
|
+
#
|
16
17
|
#
|
17
18
|
# services.yml params:
|
18
19
|
# api_key: required. AWS "access key".
|
@@ -42,6 +43,7 @@ class Amazon < Service
|
|
42
43
|
|
43
44
|
include MetadataHelper
|
44
45
|
include ActionView::Helpers::SanitizeHelper
|
46
|
+
include UmlautHttp
|
45
47
|
|
46
48
|
required_config_params :url, :api_key, :associate_tag
|
47
49
|
attr_reader :url
|
@@ -50,8 +52,6 @@ class Amazon < Service
|
|
50
52
|
# defaults
|
51
53
|
@url = 'http://webservices.amazon.com/onca/xml'
|
52
54
|
@reader_base_url = 'http://www.amazon.com/gp/reader/'
|
53
|
-
# Old version non-lightboxed, whcih doesn't work very well anymore.
|
54
|
-
# @reader_base_url = 'http://www.amazon.com/gp/sitbv3/reader/'
|
55
55
|
@display_name = "Amazon.com"
|
56
56
|
@display_text = "Amazon's page"
|
57
57
|
@service_types = ["abstract", "highlighted_link", "cover_image", "search_inside", "referent_enhance", "excerpts"]
|
@@ -75,8 +75,8 @@ class Amazon < Service
|
|
75
75
|
|
76
76
|
# Only a few service types can get by without an aws call
|
77
77
|
if (! @make_aws_call &&
|
78
|
-
@service_types.find {|type| ! ["search_inside", "highlighted_link", "excerpts"].include?(type)
|
79
|
-
|
78
|
+
@service_types.find {|type| ! ["search_inside", "highlighted_link", "excerpts"].include?(type)} )
|
79
|
+
raise Exception.new("You can only set make_aws_call == false on the definition of an Amazon service adaptor when the adaptor is also set to generate no service responses other than highlighted_link, search_inside, and excerpts")
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
@@ -309,30 +309,39 @@ class Amazon < Service
|
|
309
309
|
# need it for.
|
310
310
|
if ( @service_types.include?("highlighted_link") ||
|
311
311
|
@service_types.include?("search_inside"))
|
312
|
-
inside_base = @reader_base_url + asin
|
313
|
-
# lame screen-scrape for search inside availability. We need to
|
314
|
-
# distinguish between no results, "look inside", and "search inside".
|
315
|
-
response = open(inside_base).read
|
316
|
-
|
317
|
-
# This regexp only suitable for screen-scraping the old-style "sitbv3"
|
318
|
-
# reader page screen
|
319
|
-
if (response.include?("<div class='sitb-pop-search'>"))
|
320
|
-
# then we have search_inside. I think this always includes 'look', but
|
321
|
-
# we'll test seperate for that.
|
322
|
-
search_inside= true
|
323
|
-
end
|
324
312
|
|
325
|
-
|
326
|
-
|
327
|
-
|
313
|
+
|
314
|
+
# Checking an Amazon JSON url endpoint which can tell us whether
|
315
|
+
# we have search-inside or look-inside
|
316
|
+
client = HTTPClient.new()
|
317
|
+
client.transparent_gzip_decompression = true
|
318
|
+
client.connect_timeout = 3
|
319
|
+
client.send_timeout = 3
|
320
|
+
client.receive_timeout = 3
|
321
|
+
|
322
|
+
service_url = "http://www.amazon.com/gp/search-inside/service-data"
|
323
|
+
form_vars = {"method" => "getBookData", "asin" => asin}
|
324
|
+
headers = proxy_like_headers(request).merge("Accept" => "application/json, text/javascript, */*; q=0.01")
|
325
|
+
|
326
|
+
response = client.post service_url, form_vars, headers
|
327
|
+
hash = JSON.parse(response.body)
|
328
|
+
|
329
|
+
if hash["searchable"].to_s == "true"
|
330
|
+
search_inside= true
|
328
331
|
end
|
332
|
+
|
333
|
+
if hash["litbPages"].kind_of?(Array) && hash["litbPages"].length > 0
|
334
|
+
look_inside = true
|
335
|
+
end
|
329
336
|
end
|
330
337
|
|
338
|
+
reader_url = @reader_base_url + asin
|
339
|
+
|
331
340
|
if ( @service_types.include?("search_inside") && search_inside )
|
332
341
|
request.add_service_response(
|
333
342
|
:service => self,
|
334
343
|
:display_text=>@display_name,
|
335
|
-
:url=>
|
344
|
+
:url=> reader_url,
|
336
345
|
:service_type_value => :search_inside
|
337
346
|
)
|
338
347
|
end
|
@@ -346,7 +355,7 @@ class Amazon < Service
|
|
346
355
|
|
347
356
|
request.add_service_response(
|
348
357
|
:service=>self,
|
349
|
-
:url =>
|
358
|
+
:url => reader_url,
|
350
359
|
:asin=>asin,
|
351
360
|
:display_text => @display_name,
|
352
361
|
:service_type_value => 'excerpts')
|
@@ -22,6 +22,7 @@ require 'openurl'
|
|
22
22
|
#
|
23
23
|
# illiad:
|
24
24
|
# type: Illiad
|
25
|
+
# base_url: http://ill.university.edu/site/illiad.dll/OpenURL
|
25
26
|
# priority: 4
|
26
27
|
# preempted_by:
|
27
28
|
# existing_type: fulltext
|
@@ -31,6 +32,7 @@ require 'openurl'
|
|
31
32
|
#
|
32
33
|
# illiad:
|
33
34
|
# type: Illiad
|
35
|
+
# base_url: http://ill.university.edu/site/illiad.dll/OpenURL
|
34
36
|
# priority: 4
|
35
37
|
# preempted_by:
|
36
38
|
# existing_service: SFX
|
data/lib/umlaut/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: umlaut
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.3.
|
4
|
+
version: 3.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-09-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -75,6 +75,22 @@ dependencies:
|
|
75
75
|
- - ! '>='
|
76
76
|
- !ruby/object:Gem::Version
|
77
77
|
version: 0.5.0
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: httpclient
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ~>
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '2.4'
|
86
|
+
type: :runtime
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ~>
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '2.4'
|
78
94
|
- !ruby/object:Gem::Dependency
|
79
95
|
name: marc
|
80
96
|
requirement: !ruby/object:Gem::Requirement
|
@@ -675,7 +691,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
675
691
|
version: '0'
|
676
692
|
segments:
|
677
693
|
- 0
|
678
|
-
hash:
|
694
|
+
hash: -2681065323364276573
|
679
695
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
680
696
|
none: false
|
681
697
|
requirements:
|
@@ -684,7 +700,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
684
700
|
version: '0'
|
685
701
|
segments:
|
686
702
|
- 0
|
687
|
-
hash:
|
703
|
+
hash: -2681065323364276573
|
688
704
|
requirements: []
|
689
705
|
rubyforge_project:
|
690
706
|
rubygems_version: 1.8.23
|