alexandrite 0.1.1.pre.alpha → 0.1.3.pre.alpha
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.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/lib/alexandrite/version.rb +1 -1
- data/lib/alexandrite.rb +12 -2
- data/lib/alexandrite_book_data.rb +7 -5
- data/lib/alexandrite_oclc.rb +20 -16
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 35890f7e1386bc1f6d60ac0d68efd032288f1b4c448e5414c4a6bde38469a262
|
|
4
|
+
data.tar.gz: 5b29ae9057b620bc9649889b86587a77b1ecaf9eee4549d339293657e44ff95c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4655704b09257367b07cb36ffaa6ecfc6bd5fd7991f5066791b48a351dfd39f297a517497595122f6312eff2d98c4999593a999a72d96653a6ded608e92fb39f
|
|
7
|
+
data.tar.gz: 5d12307befe3fee203ed3e0e5c8fe66cb8fa13e10e7b3586023062ad7be124c96f2fd174755181a20ce9290a334efc3720749dcdc1610cd8f9def5608095771b
|
data/Gemfile
CHANGED
data/lib/alexandrite/version.rb
CHANGED
data/lib/alexandrite.rb
CHANGED
|
@@ -21,9 +21,11 @@ module Alexandrite
|
|
|
21
21
|
@result = search_with(key, query)
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
# @return [
|
|
24
|
+
# @return [nil]
|
|
25
25
|
def self.create_from_google(key, query)
|
|
26
26
|
Alexandrite::BookData.create_data(get_volume_info(key, query))
|
|
27
|
+
rescue StandardError => e
|
|
28
|
+
Alexandrite::BookData.create_data({ :error_message => e.message, 'origin' => 'Google API' })
|
|
27
29
|
end
|
|
28
30
|
end
|
|
29
31
|
|
|
@@ -58,8 +60,14 @@ module Alexandrite
|
|
|
58
60
|
end
|
|
59
61
|
|
|
60
62
|
def create_book(key, query)
|
|
63
|
+
log = Logger.new(STDOUT)
|
|
64
|
+
log.info "Fetching book info from Google API. Key: #{key}. Query: #{query}"
|
|
61
65
|
book = API[:google].create_from_google(key, query)
|
|
62
|
-
|
|
66
|
+
if book[:error_message]
|
|
67
|
+
log.warn "Failing when fetching book info. Error message: #{book[:error_message]}"
|
|
68
|
+
log.info "Fetching book info from OCLC API. Key: #{key}. Query: #{query}"
|
|
69
|
+
return API[:oclc].create_from_oclc(key, query)
|
|
70
|
+
end
|
|
63
71
|
|
|
64
72
|
book
|
|
65
73
|
end
|
|
@@ -69,8 +77,10 @@ module Alexandrite
|
|
|
69
77
|
# @return [Array<Alexandrite::BookData]
|
|
70
78
|
def bulk_create(key, data)
|
|
71
79
|
bookshelf = []
|
|
80
|
+
log = Logger.new(STDOUT)
|
|
72
81
|
data.each do |query|
|
|
73
82
|
book = create_book(key, query)
|
|
83
|
+
log.info "Book created. Key #{key}. Query: #{query}. Source: #{book[:data_source]}"
|
|
74
84
|
bookshelf << book
|
|
75
85
|
end
|
|
76
86
|
|
|
@@ -45,12 +45,14 @@ module Alexandrite
|
|
|
45
45
|
data[:isbn13] = volume_info['ISBN_13']
|
|
46
46
|
return data
|
|
47
47
|
end
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
48
|
+
begin
|
|
49
|
+
volume_info['industryIdentifiers'].each do |identifier|
|
|
50
|
+
data[:isbn10] = identifier['identifier'] if identifier['type'] == 'ISBN_10'
|
|
51
|
+
data[:isbn13] = identifier['identifier'] if identifier['type'] == 'ISBN_13'
|
|
52
|
+
end
|
|
53
|
+
rescue NoMethodError
|
|
54
|
+
data
|
|
52
55
|
end
|
|
53
|
-
|
|
54
56
|
data
|
|
55
57
|
end
|
|
56
58
|
end
|
data/lib/alexandrite_oclc.rb
CHANGED
|
@@ -31,28 +31,37 @@ module Alexandrite
|
|
|
31
31
|
Nokogiri::XML(conn.get(search).body)
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
+
def extract_value(attribute)
|
|
35
|
+
return nil unless attribute.respond_to?(:value)
|
|
36
|
+
|
|
37
|
+
attribute.value
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def extract_nokogiri_data(document, children, attribute)
|
|
41
|
+
extract_value(document.css(children).attribute(attribute))
|
|
42
|
+
end
|
|
43
|
+
|
|
34
44
|
def get_book_data(result)
|
|
35
45
|
isbn = result.css('input').children.text
|
|
36
46
|
isbn_type = define_isbn_type(isbn)
|
|
37
47
|
{
|
|
38
48
|
'origin' => 'OCLC API',
|
|
39
|
-
'title' => result
|
|
40
|
-
'authors' => result
|
|
41
|
-
'ddc' => result
|
|
49
|
+
'title' => extract_nokogiri_data(result, 'work', 'title'),
|
|
50
|
+
'authors' => extract_nokogiri_data(result, 'work', 'author'),
|
|
51
|
+
'ddc' => extract_nokogiri_data(result, 'mostPopular', 'nsfa'),
|
|
42
52
|
isbn_type => isbn
|
|
43
53
|
}
|
|
44
54
|
end
|
|
45
55
|
|
|
46
56
|
def recommend_classification(key, query, length = 5, mode: 'ddc')
|
|
47
57
|
results = search_by(key, query)
|
|
48
|
-
|
|
49
58
|
response_cases(results, length, mode)
|
|
50
59
|
end
|
|
51
60
|
|
|
52
61
|
private
|
|
53
62
|
|
|
54
63
|
# @return [Integer]
|
|
55
|
-
def get_response_code(result) = result
|
|
64
|
+
def get_response_code(result) = extract_nokogiri_data(result, 'response', 'code').to_i
|
|
56
65
|
|
|
57
66
|
def get_owis(result, length)
|
|
58
67
|
owis = []
|
|
@@ -85,17 +94,12 @@ module Alexandrite
|
|
|
85
94
|
|
|
86
95
|
def create_new_book(query)
|
|
87
96
|
Alexandrite::BookData.create_data(get_book_data(query.result))
|
|
97
|
+
rescue StandardError => e
|
|
98
|
+
Alexandrite::BookData.create_data({ :error_message => e.message, 'origin' => 'OCLC API' })
|
|
88
99
|
end
|
|
89
100
|
|
|
90
|
-
def
|
|
91
|
-
|
|
92
|
-
new_query = Alexandrite::OCLC.new('owi', owi)
|
|
93
|
-
volume_info = get_book_data(new_query.result)
|
|
94
|
-
Alexandrite::BookData.create_data(volume_info)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
def handle_error_creating_book(query)
|
|
98
|
-
raise ErrorType::DataNotFound, response_cases(query.result, 0, 'none')
|
|
101
|
+
def handle_error_creating_book
|
|
102
|
+
raise ErrorType::DataNotFound, yield
|
|
99
103
|
rescue StandardError => e
|
|
100
104
|
Alexandrite::BookData.create_data({ :error_message => e.message, 'origin' => 'OCLC API' })
|
|
101
105
|
end
|
|
@@ -129,9 +133,9 @@ module Alexandrite
|
|
|
129
133
|
when 0, 2
|
|
130
134
|
create_new_book(query)
|
|
131
135
|
when 4
|
|
132
|
-
|
|
136
|
+
handle_error_creating_book { 'Not found exact item. Check coincidences' }
|
|
133
137
|
else
|
|
134
|
-
handle_error_creating_book(query)
|
|
138
|
+
handle_error_creating_book { response_cases(query.result, 0, 'none') }
|
|
135
139
|
end
|
|
136
140
|
end
|
|
137
141
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: alexandrite
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.3.pre.alpha
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- J. P. Pérez-Tejada
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-
|
|
11
|
+
date: 2023-02-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -189,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
189
189
|
- !ruby/object:Gem::Version
|
|
190
190
|
version: 1.3.1
|
|
191
191
|
requirements: []
|
|
192
|
-
rubygems_version: 3.
|
|
192
|
+
rubygems_version: 3.4.6
|
|
193
193
|
signing_key:
|
|
194
194
|
specification_version: 4
|
|
195
195
|
summary: Tools for fetching books data from Google and OCLC
|