bookshark 1.0.0.pre.2 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +30 -30
- data/bookshark.gemspec +1 -0
- data/lib/bookshark.rb +35 -7
- data/lib/bookshark/crawlers/base.rb +11 -9
- data/lib/bookshark/crawlers/bibliographical_record_crawler.rb +43 -0
- data/lib/bookshark/crawlers/book_crawler.rb +42 -54
- data/lib/bookshark/extractors/bibliographical_book_extractor.rb +57 -35
- data/lib/bookshark/extractors/book_extractor.rb +9 -1
- data/lib/bookshark/storage/json_book_records/0/book_63.json +61 -0
- data/lib/bookshark/storage/json_book_records/0/book_67.json +53 -0
- data/lib/bookshark/storage/json_book_records/2/book_2110.json +59 -0
- data/lib/bookshark/storage/json_book_records/2/book_2111.json +65 -0
- data/lib/bookshark/storage/json_book_records/2/book_2112.json +69 -0
- data/lib/bookshark/storage/json_book_records/2/book_2113.json +59 -0
- data/lib/bookshark/storage/json_book_records/2/book_2114.json +67 -0
- data/lib/bookshark/storage/json_book_records/2/book_2115.json +71 -0
- data/lib/bookshark/storage/json_book_records/2/book_2116.json +63 -0
- data/lib/bookshark/storage/json_book_records/2/book_2117.json +61 -0
- data/lib/bookshark/storage/json_book_records/2/book_2118.json +83 -0
- data/lib/bookshark/storage/json_book_records/2/book_2119.json +69 -0
- data/lib/bookshark/storage/json_book_records/2/book_2120.json +69 -0
- data/lib/bookshark/storage/json_book_records/2/book_2121.json +63 -0
- data/lib/bookshark/storage/json_book_records/2/book_2122.json +72 -0
- data/lib/bookshark/storage/json_book_records/2/book_2123.json +67 -0
- data/lib/bookshark/storage/json_book_records/2/book_2124.json +72 -0
- data/lib/bookshark/storage/json_book_records/2/book_2125.json +67 -0
- data/lib/bookshark/storage/json_book_records/2/book_2126.json +72 -0
- data/lib/bookshark/storage/json_book_records/2/book_2127.json +61 -0
- data/lib/bookshark/storage/json_book_records/2/book_2128.json +61 -0
- data/lib/bookshark/storage/json_book_records/2/book_2129.json +61 -0
- data/lib/bookshark/storage/json_book_records/2/book_2130.json +72 -0
- data/lib/bookshark/storage/json_book_records/2/book_2131.json +55 -0
- data/lib/bookshark/storage/json_book_records/2/book_2132.json +61 -0
- data/lib/bookshark/storage/json_book_records/2/book_2133.json +61 -0
- data/lib/bookshark/storage/json_book_records/2/book_2134.json +61 -0
- data/lib/bookshark/storage/json_book_records/2/book_2135.json +55 -0
- data/lib/bookshark/storage/json_book_records/2/book_2136.json +67 -0
- data/lib/bookshark/storage/json_book_records/2/book_2137.json +67 -0
- data/lib/bookshark/storage/json_book_records/2/book_2138.json +57 -0
- data/lib/bookshark/storage/json_book_records/2/book_2139.json +67 -0
- data/lib/bookshark/storage/json_book_records/2/book_2140.json +53 -0
- data/lib/bookshark/storage/json_book_records/2/book_2141.json +61 -0
- data/lib/bookshark/storage/json_book_records/2/book_2142.json +67 -0
- data/lib/bookshark/storage/json_book_records/2/book_2143.json +65 -0
- data/lib/bookshark/storage/json_book_records/2/book_2144.json +64 -0
- data/lib/bookshark/storage/json_book_records/2/book_2145.json +53 -0
- data/lib/bookshark/storage/json_book_records/2/book_2146.json +70 -0
- data/lib/bookshark/storage/json_book_records/2/book_2147.json +67 -0
- data/lib/bookshark/storage/json_book_records/2/book_2148.json +66 -0
- data/lib/bookshark/storage/json_book_records/2/book_2149.json +72 -0
- data/lib/bookshark/storage/json_book_records/2/book_2150.json +53 -0
- data/lib/bookshark/storage/json_book_records/2/book_2151.json +67 -0
- data/lib/bookshark/storage/json_book_records/2/book_2152.json +67 -0
- data/lib/bookshark/storage/json_book_records/2/book_2153.json +67 -0
- data/lib/bookshark/storage/json_book_records/2/book_2154.json +67 -0
- data/lib/bookshark/storage/json_book_records/2/book_2155.json +67 -0
- data/lib/bookshark/storage/json_book_records/2/book_2156.json +76 -0
- data/lib/bookshark/storage/json_book_records/2/book_2157.json +65 -0
- data/lib/bookshark/storage/json_book_records/2/book_2158.json +77 -0
- data/lib/bookshark/storage/json_book_records/2/book_2159.json +76 -0
- data/lib/bookshark/storage/json_book_records/2/book_2160.json +67 -0
- data/lib/bookshark/storage/json_book_records/2/book_2161.json +61 -0
- data/lib/bookshark/storage/json_book_records/2/book_2162.json +65 -0
- data/lib/bookshark/storage/json_book_records/2/book_2163.json +68 -0
- data/lib/bookshark/storage/json_book_records/2/book_2164.json +59 -0
- data/lib/bookshark/storage/json_book_records/2/book_2165.json +59 -0
- data/lib/bookshark/storage/json_book_records/2/book_2166.json +53 -0
- data/lib/bookshark/storage/json_book_records/2/book_2167.json +53 -0
- data/lib/bookshark/storage/json_book_records/2/book_2168.json +53 -0
- data/lib/bookshark/storage/json_book_records/2/book_2169.json +53 -0
- data/lib/bookshark/storage/json_book_records/2/book_2170.json +53 -0
- data/lib/bookshark/version.rb +1 -1
- data/spec/bookshark_spec.rb +62 -46
- data/spec/spec_helper.rb +2 -1
- data/spec/test_data/bg_record_103788.html +1 -0
- data/spec/test_data/book_103788.html +1 -0
- metadata +88 -5
@@ -5,31 +5,31 @@ require_relative 'base'
|
|
5
5
|
|
6
6
|
|
7
7
|
module Biblionet
|
8
|
-
module Extractors
|
9
|
-
|
10
|
-
class BibliographicalBookExtractor < Base
|
8
|
+
module Extractors
|
9
|
+
|
10
|
+
class BibliographicalBookExtractor < Base
|
11
11
|
attr_reader :bibliographical_book
|
12
12
|
|
13
13
|
def initialize(uri=nil)
|
14
|
-
super(uri)
|
15
|
-
extract_bibliographical_book unless uri.nil? or @page.nil?
|
14
|
+
super(uri)
|
15
|
+
extract_bibliographical_book unless uri.nil? or @page.nil?
|
16
16
|
end
|
17
17
|
|
18
18
|
def load_and_extract_book(uri=nil)
|
19
19
|
load_page(uri)
|
20
20
|
extract_bibliographical_book unless uri.nil? or @page.nil?
|
21
|
-
end
|
21
|
+
end
|
22
22
|
|
23
|
-
def extract_bibliographical_book(biblionet_id=@biblionet_id, book_page=@page)
|
23
|
+
def extract_bibliographical_book(biblionet_id=@biblionet_id, book_page=@page)
|
24
24
|
# log = Logger.new(File.new(File.dirname(__dir__).to_s + "/logs/book_parsing.log",'a+'))
|
25
25
|
log = Logger.new(STDOUT)
|
26
|
-
|
26
|
+
|
27
27
|
page = BibliographicalBookDataExtractor.new(book_page)
|
28
28
|
|
29
29
|
# End extraction if BookDataExtractor couldnt create a nodeset
|
30
30
|
return nil if page.nodeset.nil?
|
31
31
|
|
32
|
-
bibliographical_book_hash = Hash.new
|
32
|
+
bibliographical_book_hash = Hash.new
|
33
33
|
|
34
34
|
extracted_details = page.details
|
35
35
|
|
@@ -47,7 +47,7 @@ module Biblionet
|
|
47
47
|
|
48
48
|
bibliographical_book_hash[:publisher] = extracted_details[:publisher]
|
49
49
|
bibliographical_book_hash[:publication] = extracted_details[:publication]
|
50
|
-
|
50
|
+
|
51
51
|
return @bibliographical_book = bibliographical_book_hash
|
52
52
|
end
|
53
53
|
|
@@ -63,14 +63,14 @@ module Biblionet
|
|
63
63
|
puts document
|
64
64
|
end
|
65
65
|
content = content_re.match(document)[0] unless (content_re.match(document)).nil?
|
66
|
-
|
66
|
+
|
67
67
|
# If content is nil, there is something wrong with the html, so return nil
|
68
68
|
if content.nil?
|
69
69
|
@nodeset = nil
|
70
70
|
else
|
71
|
-
@nodeset = Nokogiri::HTML(content)
|
72
|
-
end
|
73
|
-
end
|
71
|
+
@nodeset = Nokogiri::HTML(content)
|
72
|
+
end
|
73
|
+
end
|
74
74
|
|
75
75
|
def size
|
76
76
|
size_regex = /\d+x\d+/
|
@@ -101,19 +101,19 @@ module Biblionet
|
|
101
101
|
original_title = detail.gsub(/Τίτλος πρωτοτύπου:/, "").strip
|
102
102
|
details_hash[:original_title] = original_title
|
103
103
|
end
|
104
|
-
|
105
|
-
details_hash[:isbn] = detail[isbn_regex] if detail =~ isbn_regex
|
104
|
+
|
105
|
+
details_hash[:isbn] = detail[isbn_regex] if detail =~ isbn_regex
|
106
106
|
|
107
107
|
details_hash[:isbn_13] = detail[isbn_13_regex] if detail =~ isbn_13_regex
|
108
108
|
|
109
|
-
details_hash[:last_update] = detail[last_update_regex] if detail =~ last_update_regex
|
109
|
+
details_hash[:last_update] = detail[last_update_regex] if detail =~ last_update_regex
|
110
110
|
|
111
|
-
details_hash[:cover_type] = detail[cover_type_regex] if detail =~ cover_type_regex
|
111
|
+
details_hash[:cover_type] = detail[cover_type_regex] if detail =~ cover_type_regex
|
112
112
|
|
113
113
|
details_hash[:availability] = detail[availability_regex] if detail =~ availability_regex
|
114
114
|
|
115
|
-
details_hash[:price] = detail[price_regex] if detail =~ price_regex
|
116
|
-
|
115
|
+
details_hash[:price] = detail[price_regex] if detail =~ price_regex
|
116
|
+
|
117
117
|
end
|
118
118
|
|
119
119
|
pre_details_text = @nodeset.xpath("//span[@class='small'][1]/preceding::text()").text
|
@@ -123,13 +123,13 @@ module Biblionet
|
|
123
123
|
series_regex_no_vol = /(?<=\()\p{Word}+( \S)?( \p{Word}+( \S)?)*(?=\))/
|
124
124
|
series_name_regex = /\p{Word}+( \S)?( \p{Word}+( \S)?)*(?= ·)/
|
125
125
|
series_volume_regex = /(?<=· )\d+/
|
126
|
-
physical_size_regex = /\d+x\d+/
|
126
|
+
physical_size_regex = /\d+x\d+/
|
127
127
|
|
128
128
|
series_hash = {}
|
129
129
|
if pre_details_text =~ series_regex
|
130
130
|
series = pre_details_text[series_regex]
|
131
131
|
series_hash[:name] = series[series_name_regex] if series =~ series_name_regex
|
132
|
-
series_hash[:volume] = series[series_volume_regex] if series =~ series_volume_regex
|
132
|
+
series_hash[:volume] = series[series_volume_regex] if series =~ series_volume_regex
|
133
133
|
elsif pre_details_text =~ series_regex_no_vol
|
134
134
|
series = pre_details_text[series_regex_no_vol]
|
135
135
|
series_hash[:name] = series
|
@@ -137,7 +137,7 @@ module Biblionet
|
|
137
137
|
end
|
138
138
|
|
139
139
|
details_hash[:series] = series_hash
|
140
|
-
|
140
|
+
|
141
141
|
details_hash[:physical_size] = (pre_details_text =~ physical_size_regex) ? pre_details_text[physical_size_regex] : nil
|
142
142
|
|
143
143
|
format_regex = /(?<=\[).+(?=\])/
|
@@ -148,20 +148,42 @@ module Biblionet
|
|
148
148
|
details_hash[:format] = format.nil? ? 'Βιβλίο' : format
|
149
149
|
|
150
150
|
publisher_node = @nodeset.xpath("//a[@class='booklink' and @href[contains(.,'/com/') ]][1]").first
|
151
|
-
|
152
|
-
|
153
|
-
|
151
|
+
if !publisher_node.nil?
|
152
|
+
publisher_hash = {}
|
153
|
+
publisher_hash[:text] = publisher_node.text
|
154
|
+
publisher_hash[:b_id] = (publisher_node[:href].split("/"))[2]
|
154
155
|
|
155
|
-
|
156
|
-
|
156
|
+
pre_publisher_text = BibliographicalBookExtractor.decode_text(publisher_node.previous_sibling.text)
|
157
|
+
after_publisher_text = BibliographicalBookExtractor.decode_text(publisher_node.next_sibling.text)
|
157
158
|
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
159
|
+
publication_hash = {}
|
160
|
+
publication_hash[:year] = after_publisher_text[/(?<=, )\d+(?=\.)/]
|
161
|
+
publication_hash[:version] = pre_details_text[/(?<=- )\d+(?=η)/]
|
162
|
+
publication_hash[:place] = pre_details_text[/(?<=- )\p{Word}+( \S)?( \p{Word}+( \S)?)*(?= :)/]
|
162
163
|
|
163
|
-
|
164
|
-
|
164
|
+
details_hash[:publisher] = publisher_hash
|
165
|
+
details_hash[:publication] = publication_hash
|
166
|
+
else
|
167
|
+
publisher_node = @nodeset.xpath("//a[@class='subjectlink' and @href[contains(.,'/com/') ]][1]").first
|
168
|
+
if !publisher_node.nil?
|
169
|
+
details_hash[:publisher] = {
|
170
|
+
text: publisher_node.text,
|
171
|
+
b_id: (publisher_node[:href].split("/"))[2]
|
172
|
+
}
|
173
|
+
after_last_author_text = @nodeset
|
174
|
+
.xpath("//a[@class='booklink' and @href[contains(.,'/author/') ]][last()]").last
|
175
|
+
.next_sibling.text.strip
|
176
|
+
puts after_last_author_text
|
177
|
+
details_hash[:publication] = {
|
178
|
+
year: after_last_author_text[/(?<=: )\d+(?=\.)/],
|
179
|
+
version: after_last_author_text[/(?<=- )\d+(?=η)/],
|
180
|
+
place: after_last_author_text[/(?<=- )\p{Word}+( \S)?( \p{Word}+( \S)?)*(?= :)/]
|
181
|
+
}
|
182
|
+
else
|
183
|
+
details_hash[:publisher] = {text: nil, b_id: nil}
|
184
|
+
details_hash[:publication] = {year: nil, version: nil, place: nil}
|
185
|
+
end
|
186
|
+
end
|
165
187
|
|
166
188
|
details_hash
|
167
189
|
end
|
@@ -169,4 +191,4 @@ module Biblionet
|
|
169
191
|
end
|
170
192
|
|
171
193
|
end
|
172
|
-
end
|
194
|
+
end
|
@@ -206,7 +206,15 @@ module Biblionet
|
|
206
206
|
book_hash[:category] = ddcs
|
207
207
|
book_hash[:b_id] = biblionet_id
|
208
208
|
|
209
|
-
uri =
|
209
|
+
uri = nil
|
210
|
+
|
211
|
+
if @url
|
212
|
+
uri = "http://www.biblionet.gr/main.asp?page=results&Titlesid=#{biblionet_id}"
|
213
|
+
elsif @filepath
|
214
|
+
uri = File.dirname(@filepath) + "/" + "bg_record_#{biblionet_id}.html"
|
215
|
+
end
|
216
|
+
|
217
|
+
# uri = "http://www.biblionet.gr/main.asp?page=results&Titlesid=#{biblionet_id}"
|
210
218
|
|
211
219
|
bibliographical_book_extractor = Biblionet::Extractors::BibliographicalBookExtractor.new
|
212
220
|
bibliographical_details = bibliographical_book_extractor.load_and_extract_book(uri)
|
@@ -0,0 +1,61 @@
|
|
1
|
+
{
|
2
|
+
"book": [
|
3
|
+
{
|
4
|
+
"title": "Μέσα από το σκοτεινό καθρέφτη",
|
5
|
+
"subtitle": null,
|
6
|
+
"image": "http://www.biblionet.gr/images/covers/b63.jpg",
|
7
|
+
"author": [
|
8
|
+
{
|
9
|
+
"name": "Γιοστέιν Γκάαρντερ",
|
10
|
+
"b_id": "507"
|
11
|
+
}
|
12
|
+
],
|
13
|
+
"contributors": {
|
14
|
+
"μετάφραση": [
|
15
|
+
{
|
16
|
+
"name": "Μαρία Αγγελίδου",
|
17
|
+
"b_id": "796"
|
18
|
+
}
|
19
|
+
]
|
20
|
+
},
|
21
|
+
"publisher": {
|
22
|
+
"text": "Εκδοτικός Οίκος Α. Α. Λιβάνη",
|
23
|
+
"b_id": "271"
|
24
|
+
},
|
25
|
+
"isbn": "960-236-891-8",
|
26
|
+
"isbn_13": "978-960-236-891-6",
|
27
|
+
"award": [
|
28
|
+
|
29
|
+
],
|
30
|
+
"description": "\"Bλέπουμε τον κόσμο μέσα από έναν καθρέφτη. Kι είναι ο κόσμος ένα μεγάλο μυστήριο για μας: \"Δι' εσόπτρου εν αινίγματι\". Kαμιά φορά καταφέρνουμε να ρίξουμε μια ματιά απ' την άλλη μεριά,να δούμε τι κρύβεται πίσω απ' τον καθρέφτη. Aν καθαρίζαμε όλο τον καθρέφτη και τον κάναμε γυαλί διάφανο, θα βλέπαμε φυσικά πολύ περισσότερα πράγματα. Mόνο που δε θα μπορούσαμε πια να δούμε τον εαυτό μας. Γιατί το γυαλί δε θα 'ταν πια καθρέφτης...\" <br>",
|
31
|
+
"category": [
|
32
|
+
{
|
33
|
+
"ddc": "839.82",
|
34
|
+
"name": "Νορβηγική πεζογραφία - Μυθιστόρημα",
|
35
|
+
"b_id": "400"
|
36
|
+
}
|
37
|
+
],
|
38
|
+
"b_id": "63",
|
39
|
+
"publication": {
|
40
|
+
"year": "1998",
|
41
|
+
"version": null,
|
42
|
+
"place": "Αθήνα"
|
43
|
+
},
|
44
|
+
"format": "Βιβλίο",
|
45
|
+
"original_language": "νορβηγικά",
|
46
|
+
"original_title": "I et speil, i en gåte",
|
47
|
+
"price": "14,85",
|
48
|
+
"availability": "Κυκλοφορεί",
|
49
|
+
"last_update": null,
|
50
|
+
"series": {
|
51
|
+
"name": "Ξένη Λογοτεχνία",
|
52
|
+
"volume": null
|
53
|
+
},
|
54
|
+
"physical_description": {
|
55
|
+
"pages": "267",
|
56
|
+
"size": "21x14",
|
57
|
+
"cover_type": "Μαλακό εξώφυλλο"
|
58
|
+
}
|
59
|
+
}
|
60
|
+
]
|
61
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
{
|
2
|
+
"book": [
|
3
|
+
{
|
4
|
+
"title": "Ο χορός των ωρών",
|
5
|
+
"subtitle": "Διηγήματα",
|
6
|
+
"image": "http://www.biblionet.gr/images/covers/b67.jpg",
|
7
|
+
"author": [
|
8
|
+
{
|
9
|
+
"name": "Τσιτσέλη Καίη 1926-2001",
|
10
|
+
"b_id": "74"
|
11
|
+
}
|
12
|
+
],
|
13
|
+
"contributors": {
|
14
|
+
},
|
15
|
+
"publisher": {
|
16
|
+
"text": "Άγρα",
|
17
|
+
"b_id": "44"
|
18
|
+
},
|
19
|
+
"isbn": "960-325-281-6",
|
20
|
+
"isbn_13": "978-960-325-281-8",
|
21
|
+
"award": [
|
22
|
+
|
23
|
+
],
|
24
|
+
"description": null,
|
25
|
+
"category": [
|
26
|
+
{
|
27
|
+
"ddc": "889.3",
|
28
|
+
"name": "Νεοελληνική πεζογραφία - Διήγημα",
|
29
|
+
"b_id": "3"
|
30
|
+
}
|
31
|
+
],
|
32
|
+
"b_id": "67",
|
33
|
+
"publication": {
|
34
|
+
"year": "1998",
|
35
|
+
"version": null,
|
36
|
+
"place": "Αθήνα"
|
37
|
+
},
|
38
|
+
"format": "Βιβλίο",
|
39
|
+
"original_language": null,
|
40
|
+
"original_title": null,
|
41
|
+
"price": "11,15",
|
42
|
+
"availability": "Κυκλοφορεί",
|
43
|
+
"last_update": "5/7/2007",
|
44
|
+
"series": {
|
45
|
+
},
|
46
|
+
"physical_description": {
|
47
|
+
"pages": "153",
|
48
|
+
"size": "17x11",
|
49
|
+
"cover_type": "Μαλακό εξώφυλλο"
|
50
|
+
}
|
51
|
+
}
|
52
|
+
]
|
53
|
+
}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
{
|
2
|
+
"book": [
|
3
|
+
{
|
4
|
+
"title": "Kreta - Mir ist, Als Wurde Ich Heimkehren",
|
5
|
+
"subtitle": null,
|
6
|
+
"image": null,
|
7
|
+
"author": [
|
8
|
+
{
|
9
|
+
"name": "Karin Guse",
|
10
|
+
"b_id": "879"
|
11
|
+
}
|
12
|
+
],
|
13
|
+
"contributors": {
|
14
|
+
"φωτογράφιση": [
|
15
|
+
{
|
16
|
+
"name": "Karin Guse",
|
17
|
+
"b_id": "879"
|
18
|
+
}
|
19
|
+
]
|
20
|
+
},
|
21
|
+
"publisher": {
|
22
|
+
"text": "Ευσταθιάδης Group",
|
23
|
+
"b_id": "101"
|
24
|
+
},
|
25
|
+
"isbn": "960-226-521-3",
|
26
|
+
"isbn_13": "978-960-226-521-5",
|
27
|
+
"award": [
|
28
|
+
|
29
|
+
],
|
30
|
+
"description": null,
|
31
|
+
"category": [
|
32
|
+
{
|
33
|
+
"ddc": "914.9504",
|
34
|
+
"name": "Κρήτη - Περιγραφή και ταξίδια - Οδηγοί",
|
35
|
+
"b_id": "110"
|
36
|
+
}
|
37
|
+
],
|
38
|
+
"b_id": "2110",
|
39
|
+
"publication": {
|
40
|
+
"year": "1998",
|
41
|
+
"version": null,
|
42
|
+
"place": "Αθήνα"
|
43
|
+
},
|
44
|
+
"format": "Βιβλίο",
|
45
|
+
"original_language": null,
|
46
|
+
"original_title": null,
|
47
|
+
"price": "4,46",
|
48
|
+
"availability": "Κυκλοφορεί",
|
49
|
+
"last_update": null,
|
50
|
+
"series": {
|
51
|
+
},
|
52
|
+
"physical_description": {
|
53
|
+
"pages": "79",
|
54
|
+
"size": "18x12",
|
55
|
+
"cover_type": "Μαλακό εξώφυλλο"
|
56
|
+
}
|
57
|
+
}
|
58
|
+
]
|
59
|
+
}
|
@@ -0,0 +1,65 @@
|
|
1
|
+
{
|
2
|
+
"book": [
|
3
|
+
{
|
4
|
+
"title": "Athens - Attica",
|
5
|
+
"subtitle": "General Guide",
|
6
|
+
"image": null,
|
7
|
+
"author": [
|
8
|
+
{
|
9
|
+
"name": "John Bowman",
|
10
|
+
"b_id": "578"
|
11
|
+
}
|
12
|
+
],
|
13
|
+
"contributors": {
|
14
|
+
"φωτογράφιση": [
|
15
|
+
{
|
16
|
+
"name": "A. Spyropoulos",
|
17
|
+
"b_id": "1195"
|
18
|
+
},
|
19
|
+
{
|
20
|
+
"name": "G. Sfikas",
|
21
|
+
"b_id": "15982"
|
22
|
+
}
|
23
|
+
]
|
24
|
+
},
|
25
|
+
"publisher": {
|
26
|
+
"text": "Ευσταθιάδης Group",
|
27
|
+
"b_id": "101"
|
28
|
+
},
|
29
|
+
"isbn": "960-226-378-4",
|
30
|
+
"isbn_13": "978-960-226-378-5",
|
31
|
+
"award": [
|
32
|
+
|
33
|
+
],
|
34
|
+
"description": null,
|
35
|
+
"category": [
|
36
|
+
{
|
37
|
+
"ddc": "910.49512",
|
38
|
+
"name": "Αθήνα - Οδηγοί",
|
39
|
+
"b_id": "198"
|
40
|
+
}
|
41
|
+
],
|
42
|
+
"b_id": "2111",
|
43
|
+
"publication": {
|
44
|
+
"year": "1998",
|
45
|
+
"version": null,
|
46
|
+
"place": "Attica"
|
47
|
+
},
|
48
|
+
"format": "Βιβλίο",
|
49
|
+
"original_language": null,
|
50
|
+
"original_title": null,
|
51
|
+
"price": "5,07",
|
52
|
+
"availability": "Κυκλοφορεί",
|
53
|
+
"last_update": null,
|
54
|
+
"series": {
|
55
|
+
"name": "Argonaut Pocket Guide",
|
56
|
+
"volume": null
|
57
|
+
},
|
58
|
+
"physical_description": {
|
59
|
+
"pages": "214",
|
60
|
+
"size": "18x12",
|
61
|
+
"cover_type": "Μαλακό εξώφυλλο"
|
62
|
+
}
|
63
|
+
}
|
64
|
+
]
|
65
|
+
}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
{
|
2
|
+
"book": [
|
3
|
+
{
|
4
|
+
"title": "Raubvögel in Griechenland",
|
5
|
+
"subtitle": null,
|
6
|
+
"image": null,
|
7
|
+
"author": [
|
8
|
+
{
|
9
|
+
"name": "G. Handrinos",
|
10
|
+
"b_id": "1185"
|
11
|
+
},
|
12
|
+
{
|
13
|
+
"name": "A. Dimitropoulos",
|
14
|
+
"b_id": "1186"
|
15
|
+
}
|
16
|
+
],
|
17
|
+
"contributors": {
|
18
|
+
"εικονογράφηση": [
|
19
|
+
{
|
20
|
+
"name": "Ach. Dimitropoulos",
|
21
|
+
"b_id": "1186"
|
22
|
+
},
|
23
|
+
{
|
24
|
+
"name": "G. Handrinos",
|
25
|
+
"b_id": "1185"
|
26
|
+
}
|
27
|
+
]
|
28
|
+
},
|
29
|
+
"publisher": {
|
30
|
+
"text": "Ευσταθιάδης Group",
|
31
|
+
"b_id": "101"
|
32
|
+
},
|
33
|
+
"isbn": "960-226-576-0",
|
34
|
+
"isbn_13": "978-960-226-576-5",
|
35
|
+
"award": [
|
36
|
+
|
37
|
+
],
|
38
|
+
"description": null,
|
39
|
+
"category": [
|
40
|
+
{
|
41
|
+
"ddc": "598.495",
|
42
|
+
"name": "Πουλιά - Ελλάς",
|
43
|
+
"b_id": "205"
|
44
|
+
}
|
45
|
+
],
|
46
|
+
"b_id": "2112",
|
47
|
+
"publication": {
|
48
|
+
"year": "1999",
|
49
|
+
"version": null,
|
50
|
+
"place": "Αθήνα"
|
51
|
+
},
|
52
|
+
"format": "Βιβλίο",
|
53
|
+
"original_language": null,
|
54
|
+
"original_title": null,
|
55
|
+
"price": "9,83",
|
56
|
+
"availability": "Κυκλοφορεί",
|
57
|
+
"last_update": null,
|
58
|
+
"series": {
|
59
|
+
"name": "Griechenlands Natur",
|
60
|
+
"volume": null
|
61
|
+
},
|
62
|
+
"physical_description": {
|
63
|
+
"pages": "199",
|
64
|
+
"size": "18x12",
|
65
|
+
"cover_type": "Μαλακό εξώφυλλο"
|
66
|
+
}
|
67
|
+
}
|
68
|
+
]
|
69
|
+
}
|