worldcatapi 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/Gemfile.lock +10 -0
- data/README.md +20 -3
- data/lib/worldcatapi/get_record_response.rb +23 -36
- data/lib/worldcatapi/record.rb +1 -1
- data/lib/worldcatapi/version.rb +1 -1
- data/test/lib/get_record_response_test.rb +27 -0
- data/test/lib/worldcatapi_test.rb +1 -1
- data/test/test_helper.rb +1 -1
- data/worldcatapi.gemspec +1 -0
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MTk3OTEwOWQwZTAwMDI1ZGY4ODk2Zjg2OTU4ZDdlOTlhNmI1MzJmMQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NTFmNjAyYjk2YWU1YWUyZGU4N2ZhMzJjYmY1ZDU0YmI3ZWE0MzMxNg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
N2MwNGZkMDNiMWU3MzU4OWI5NzQyY2RiZWUxOTIzNWY1NTBlZDZiZmYxZjli
|
10
|
+
Mjc0YzI5YWZjMjhiNWZhYjE5MTQ1NDIyYTBjMmUxMjlkYjQ4NDBiNjI0OThl
|
11
|
+
YTIzMDc2MTA1NzA2YWFjMDE2NjEwNThkYmMyZmUxYmQzMmE2MmI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YzBhYzg3NTIyMmFlZDdjYTA1NzkxYTYxMWE2MDU0OGE2YjhhNDVmZGYwYTJl
|
14
|
+
Mjk2ZmM1YTViMjI0NmEzNWQ5MzBlZTFjZTJkNGRmMzhjZDVhMDQwZWJkYTA4
|
15
|
+
ODE0NjFjOGNiNzdmYTcyMzI1MDI1NTQ2ZGNhMGQzYjZlMTBjZTE=
|
data/Gemfile.lock
CHANGED
@@ -2,6 +2,8 @@ PATH
|
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
4
|
worldcatapi (1.0.0)
|
5
|
+
marc (~> 0.8.1)
|
6
|
+
nokogiri (~> 1.5.7)
|
5
7
|
|
6
8
|
GEM
|
7
9
|
remote: https://rubygems.org/
|
@@ -16,6 +18,7 @@ GEM
|
|
16
18
|
celluloid (0.15.2)
|
17
19
|
timers (~> 1.1.0)
|
18
20
|
coderay (1.1.0)
|
21
|
+
ensure_valid_encoding (0.5.3)
|
19
22
|
ffi (1.9.3)
|
20
23
|
formatador (0.2.4)
|
21
24
|
guard (2.2.4)
|
@@ -33,9 +36,13 @@ GEM
|
|
33
36
|
rb-fsevent (>= 0.9.3)
|
34
37
|
rb-inotify (>= 0.9)
|
35
38
|
lumberjack (1.0.4)
|
39
|
+
marc (0.8.1)
|
40
|
+
ensure_valid_encoding
|
41
|
+
unf
|
36
42
|
method_source (0.8.2)
|
37
43
|
minitest (4.7.5)
|
38
44
|
multi_json (1.8.2)
|
45
|
+
nokogiri (1.5.11)
|
39
46
|
pry (0.9.12.4)
|
40
47
|
coderay (~> 1.0)
|
41
48
|
method_source (~> 0.8)
|
@@ -57,6 +64,9 @@ GEM
|
|
57
64
|
atomic
|
58
65
|
timers (1.1.0)
|
59
66
|
tzinfo (0.3.38)
|
67
|
+
unf (0.1.3)
|
68
|
+
unf_ext
|
69
|
+
unf_ext (0.0.6)
|
60
70
|
|
61
71
|
PLATFORMS
|
62
72
|
ruby
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
worldcatapi
|
2
2
|
============
|
3
3
|
|
4
4
|
The RUBY API to access WorldCat.org webservices. Inspired by original wcapi implementation
|
@@ -6,7 +6,7 @@ The RUBY API to access WorldCat.org webservices. Inspired by original wcapi impl
|
|
6
6
|
|
7
7
|
# Worldcatapi
|
8
8
|
|
9
|
-
Forked from RubyForge WCAPI project.
|
9
|
+
Forked from RubyForge WCAPI project. It now lives on rubygems.org for easy installation and usage.
|
10
10
|
|
11
11
|
## Installation
|
12
12
|
|
@@ -24,7 +24,24 @@ Or install it yourself as:
|
|
24
24
|
|
25
25
|
## Usage
|
26
26
|
|
27
|
-
|
27
|
+
Clone this project and look at example.rb file.
|
28
|
+
|
29
|
+
It outlines all of the available operations.
|
30
|
+
|
31
|
+
require 'worldcatapi'
|
32
|
+
|
33
|
+
client = WORLDCATAPI::Client.new key: YOUR_KEY
|
34
|
+
response = client.OpenSearch(q: 'Ruby Development', format: 'atom', start: 1, count: 20, cformat: "all")
|
35
|
+
|
36
|
+
puts "Total Results #{response.header["totalResults"]
|
37
|
+
response.records.each do |record|
|
38
|
+
puts "title: #{record[:title]}\n"
|
39
|
+
puts "url: #{record[:link]}\n"
|
40
|
+
puts "authors: #{record[:author].join(", "}\n"
|
41
|
+
puts "description: #{record[:summary]}\n"
|
42
|
+
end
|
43
|
+
|
44
|
+
More examples available in example.rb
|
28
45
|
|
29
46
|
## Contributing
|
30
47
|
|
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'marc'
|
3
|
+
|
1
4
|
module WORLDCATAPI
|
2
5
|
class GetRecordResponse
|
3
6
|
|
@@ -20,43 +23,27 @@ module WORLDCATAPI
|
|
20
23
|
_xml = xml
|
21
24
|
_rechash = {}
|
22
25
|
_x = 0
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
if item.xpath("controlfield[@tag='001']") != nil
|
44
|
-
_id = item.xpath("controlfield[@tag='001']").text
|
45
|
-
_link = 'http://www.worldcat.org/oclc/' + _id.to_s
|
46
|
-
end
|
47
|
-
|
48
|
-
if item.xpath("datafield[@tag='520']") != nil
|
49
|
-
_summary = item.xpath("datafield[@tag='520']/subfield[@code='a'][position()=1]").text
|
50
|
-
else
|
51
|
-
if item.xpath("datafield[@tag='500']") != nil
|
52
|
-
_summary = item.xpath("datafield[@tag='500']/subfield[@code='a'][position()=1]").text
|
53
|
-
end
|
54
|
-
end
|
26
|
+
|
27
|
+
|
28
|
+
reader = MARC::XMLReader.new(StringIO.new(xml))
|
29
|
+
|
30
|
+
for r in reader
|
31
|
+
@record = OpenStruct.new
|
32
|
+
@record.id = r["001"].value
|
33
|
+
@record.title = r['245']['a']
|
34
|
+
@record.author = Array.new.push r['100']['a']
|
35
|
+
@record.summary = r['500']['a']
|
36
|
+
@record.link = "http://www.worldcat.org/oclc/#{@record.id}"
|
37
|
+
@record.isbn = r['020']['a']
|
38
|
+
@record.publisher = r['260'].value
|
39
|
+
@record.edition = r['250']['a'] if r['250']
|
40
|
+
@record.physical_description = r['300'].value
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
@record.xml = xml
|
55
45
|
|
56
|
-
|
57
|
-
:summary => _summary, :xml => item.to_s}
|
58
|
-
}
|
59
|
-
@record = _rechash
|
46
|
+
@record
|
60
47
|
end
|
61
48
|
|
62
49
|
end
|
data/lib/worldcatapi/record.rb
CHANGED
data/lib/worldcatapi/version.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class GetRecordResponseTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
setup do
|
6
|
+
@response_xml = "<record>\n <leader>00000cam a2200000Ia 4500</leader>\n <controlfield tag=\"001\">671660984</controlfield>\n <controlfield tag=\"008\">101025s2008 nz o 000 d eng d</controlfield>\n <datafield ind1=\" \" ind2=\" \" tag=\"020\">\n <subfield code=\"a\">9781775413158 (electronic bk.)</subfield>\n </datafield>\n <datafield ind1=\" \" ind2=\" \" tag=\"020\">\n <subfield code=\"a\">1775413152 (electronic bk.)</subfield>\n </datafield>\n <datafield ind1=\"1\" ind2=\" \" tag=\"100\">\n <subfield code=\"a\">Shakespeare, William,</subfield>\n <subfield code=\"d\">1564-1616.</subfield>\n </datafield>\n <datafield ind1=\"1\" ind2=\"0\" tag=\"245\">\n <subfield code=\"a\">Julius Caesar</subfield>\n <subfield code=\"h\">[electronic resource] /</subfield>\n <subfield code=\"c\">William Shakespeare.</subfield>\n </datafield>\n <datafield ind1=\" \" ind2=\" \" tag=\"260\">\n <subfield code=\"a\">[Waiheke Island] :</subfield>\n <subfield code=\"b\">Floating Press,</subfield>\n <subfield code=\"c\">c2008.</subfield>\n </datafield>\n <datafield ind1=\" \" ind2=\" \" tag=\"300\">\n <subfield code=\"a\">1 online resource (182 p.)</subfield>\n </datafield>\n <datafield ind1=\" \" ind2=\" \" tag=\"500\">\n <subfield code=\"a\">Title from PDF title page (viewed Oct. 25, 2010).</subfield>\n </datafield>\n <datafield ind1=\"1\" ind2=\"0\" tag=\"600\">\n <subfield code=\"a\">Caesar, Julius</subfield>\n <subfield code=\"x\">Assassination</subfield>\n <subfield code=\"v\">Drama.</subfield>\n </datafield>\n <datafield ind1=\"1\" ind2=\"0\" tag=\"600\">\n <subfield code=\"a\">Brutus, Marcus Junius,</subfield>\n <subfield code=\"d\">85 B.C.?-42 B.C.</subfield>\n <subfield code=\"v\">Drama.</subfield>\n </datafield>\n <datafield ind1=\" \" ind2=\"0\" tag=\"651\">\n <subfield code=\"a\">Rome</subfield>\n <subfield code=\"x\">History</subfield>\n <subfield code=\"y\">Civil War, 43-31 B.C.</subfield>\n <subfield code=\"v\">Drama.</subfield>\n </datafield>\n <datafield ind1=\" \" ind2=\"0\" tag=\"650\">\n <subfield code=\"a\">Conspiracies</subfield>\n <subfield code=\"v\">Drama.</subfield>\n </datafield>\n <datafield ind1=\" \" ind2=\"0\" tag=\"650\">\n <subfield code=\"a\">Assassins</subfield>\n <subfield code=\"v\">Drama.</subfield>\n </datafield>\n <datafield ind1=\" \" ind2=\"4\" tag=\"655\">\n <subfield code=\"a\">Electronic books.</subfield>\n </datafield>\n <datafield ind1=\"4\" ind2=\"0\" tag=\"856\">\n <subfield code=\"3\">EBSCOhost</subfield>\n <subfield code=\"u\">http://search.ebscohost.com/login.aspx?direct=true&scope=site&db=nlebk&db=nlabk&AN=313629</subfield>\n </datafield>\n </record>"
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
should "parse the response and put it into a proper record" do
|
11
|
+
response = WORLDCATAPI::GetRecordResponse.new(@response_xml)
|
12
|
+
assert_not_nil response.record, "Record was created"
|
13
|
+
|
14
|
+
record = response.record
|
15
|
+
assert_equal "Julius Caesar", record.title, "Title must match"
|
16
|
+
assert_equal "671660984", record.id, "Id must match"
|
17
|
+
|
18
|
+
assert_equal 1, record.author.size, "Only one author"
|
19
|
+
assert_equal "Shakespeare, William,", record.author.first, "Author must match"
|
20
|
+
assert_equal "9781775413158 (electronic bk.)", record.isbn, "ISBN must match"
|
21
|
+
assert_equal "[Waiheke Island] :Floating Press,c2008.", record.publisher, "Publisher must match"
|
22
|
+
assert_equal "1 online resource (182 p.)", record.physical_description, "PhysDesc must match"
|
23
|
+
assert_equal "Title from PDF title page (viewed Oct. 25, 2010).", record.summary, "Summary must match"
|
24
|
+
|
25
|
+
assert_not_nil record.xml, "Should copy xml"
|
26
|
+
end
|
27
|
+
end
|
data/test/test_helper.rb
CHANGED
data/worldcatapi.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: worldcatapi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taras Danylak
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-02-
|
12
|
+
date: 2014-02-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -25,6 +25,20 @@ dependencies:
|
|
25
25
|
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: 1.5.7
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: marc
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ~>
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 0.8.1
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ~>
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 0.8.1
|
28
42
|
- !ruby/object:Gem::Dependency
|
29
43
|
name: bundler
|
30
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -77,6 +91,7 @@ files:
|
|
77
91
|
- lib/worldcatapi/record.rb
|
78
92
|
- lib/worldcatapi/sru_search_response.rb
|
79
93
|
- lib/worldcatapi/version.rb
|
94
|
+
- test/lib/get_record_response_test.rb
|
80
95
|
- test/lib/worldcatapi_test.rb
|
81
96
|
- test/test_helper.rb
|
82
97
|
- worldcatapi.gemspec
|
@@ -105,5 +120,6 @@ signing_key:
|
|
105
120
|
specification_version: 4
|
106
121
|
summary: Ruby API to access WorldCat Open Search webserbice. Based on WCAPI Gem.
|
107
122
|
test_files:
|
123
|
+
- test/lib/get_record_response_test.rb
|
108
124
|
- test/lib/worldcatapi_test.rb
|
109
125
|
- test/test_helper.rb
|