nypl_repo 0.0.2 → 0.1.0

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.
Files changed (3) hide show
  1. data/lib/nypl_repo.rb +95 -6
  2. metadata +9 -7
  3. checksums.yaml +0 -7
data/lib/nypl_repo.rb CHANGED
@@ -5,13 +5,68 @@ module NyplRepo
5
5
  require 'net/http'
6
6
  require 'json'
7
7
 
8
- def initialize(token)
8
+ # NyplRepo::Client.new(ENV["API_TOKEN"], {:debug=>true, :server_url => "http://api.nypl/api/v1/"})
9
+ #
10
+ def initialize(token, options={})
9
11
  @token = token
12
+ @debug = options[:debug] || false
13
+ @server_url = options[:server_url] || "http://api.repo.nypl.org/api/v1"
10
14
  end
11
-
15
+
16
+ #date format: YYYY-MM-DD
17
+ #physical_location i.e "Map%20Division"&field=physicalLocation
18
+ def get_items_since(query, since_date, until_date)
19
+ url = @server_url+'/items/search.json?q='+query+'&since='+since_date+'&until='+until_date+'&per_page=500'
20
+ json = self.get_json(url)
21
+ results = []
22
+ result = json["nyplAPI"]["response"]["result"]
23
+ results << result
24
+ totalPages = json["nyplAPI"]["request"]["totalPages"].to_i
25
+
26
+ if totalPages >= 2
27
+ puts "total pages " + totalPages.to_s if @debug
28
+ (2..totalPages).each do | page |
29
+ puts "page: "+page.to_s if @debug
30
+ newurl = url + "&page=#{page}"
31
+ json = self.get_json(newurl)
32
+ newresult = json["nyplAPI"]["response"]["result"]
33
+ results << newresult
34
+ end
35
+ end
36
+ results.flatten!
37
+
38
+ results
39
+ end
40
+
41
+
42
+ # Given a container uuid, or biblographic uuid, returns a
43
+ # list of mods uuids.
44
+ def get_capture_items(c_uuid)
45
+ url = "#{@server_url}/items/#{c_uuid}.json?per_page=500"
46
+ json = self.get_json(url)
47
+ captures = []
48
+ capture = json["nyplAPI"]["response"]["capture"]
49
+ captures << capture
50
+
51
+ totalPages = json["nyplAPI"]["request"]["totalPages"].to_i
52
+ if totalPages >= 2
53
+ puts "total pages " + totalPages.to_s if @debug
54
+ (2..totalPages).each do | page |
55
+ puts "page: "+page.to_s if @debug
56
+ newurl = url + "&page=#{page}"
57
+ json = self.get_json(newurl)
58
+ newcapture = json["nyplAPI"]["response"]["capture"]
59
+ captures << newcapture
60
+ end
61
+ end
62
+ captures.flatten!
63
+
64
+ captures
65
+ end
66
+
12
67
  #get the item detail from a uuid
13
68
  def get_mods_item(mods_uuid)
14
- url = "http://api.repo.nypl.org/api/v1/items/mods/#{mods_uuid}.json"
69
+ url = "#{@server_url}/items/mods/#{mods_uuid}.json"
15
70
  json = self.get_json(url)
16
71
 
17
72
  item = nil
@@ -25,7 +80,7 @@ module NyplRepo
25
80
  #gets the mods uuid of the item, passing in the bibliographic uuid and image_id
26
81
  #since there could be many maps for the same item
27
82
  def get_mods_uuid(bibl_uuid, image_id)
28
- url = "http://api.repo.nypl.org/api/v1/items/#{bibl_uuid}.json?per_page=500"
83
+ url = "#{@server_url}/items/#{bibl_uuid}.json?per_page=500"
29
84
  json = self.get_json(url)
30
85
  mods_uuid = nil
31
86
 
@@ -40,10 +95,27 @@ module NyplRepo
40
95
  return mods_uuid
41
96
  end
42
97
 
98
+ # gets the image id for an item based on the the bibliographic uuid (container uuid) and the mods uuid (the actual item)
99
+ #
100
+ def get_image_id(bibl_uuid, mods_uuid)
101
+ url = "#{@server_url}/items/#{bibl_uuid}.json?per_page=500"
102
+ json = self.get_json(url)
103
+ image_id = nil
104
+
105
+ json["nyplAPI"]["response"]["capture"].each do | capture|
106
+ if capture["uuid"] == mods_uuid
107
+ image_id = capture["imageID"]
108
+ break
109
+ end #if
110
+ end if json["nyplAPI"]["response"]["numResults"].to_i > 0
111
+
112
+ return image_id
113
+ end
114
+
43
115
 
44
116
  # get bibliographic container uuid from an image_id
45
117
  def get_bibl_uuid(image_id)
46
- url = "http://api.repo.nypl.org/api/v1/items/local_image_id/#{image_id}.json"
118
+ url = "#{@server_url}/items/local_image_id/#{image_id}.json"
47
119
  json = self.get_json(url)
48
120
  bibl_uuid = nil
49
121
  if json["nyplAPI"]["response"]["numResults"].to_i > 0
@@ -57,7 +129,7 @@ module NyplRepo
57
129
  #get highreslink from an item, matching up the image idi
58
130
  #since some bibliographic items may have many maps under them
59
131
  def get_highreslink(bibl_uuid, image_id)
60
- url = "http://api.repo.nypl.org/api/v1/items/#{bibl_uuid}.json?per_page=500"
132
+ url = "#{@server_url}/items/#{bibl_uuid}.json?per_page=500"
61
133
  json = self.get_json(url)
62
134
 
63
135
  highreslink = nil
@@ -72,8 +144,20 @@ module NyplRepo
72
144
  return highreslink
73
145
  end
74
146
 
147
+
148
+ #checks the response for error
149
+ def check_error(json)
150
+ if json["nyplAPI"]["response"]["headers"]["status"] == "error"
151
+ msg = "NYPL Repo API Error: " + json["nyplAPI"]["response"]["headers"]["code"] + " "+ json["nyplAPI"]["response"]["headers"]["message"]
152
+ raise msg
153
+ end
154
+
155
+ end
156
+
75
157
 
76
158
  def get_json(url)
159
+ puts "Calling URL: " + url if @debug
160
+
77
161
  uri = URI.parse(url)
78
162
  http = Net::HTTP.new(uri.host, uri.port)
79
163
 
@@ -83,8 +167,13 @@ module NyplRepo
83
167
  body = response.body
84
168
  json = JSON.parse(body)
85
169
 
170
+ check_error(json)
171
+
86
172
  return json
87
173
  end
88
174
 
89
175
  end
90
176
  end
177
+
178
+
179
+
metadata CHANGED
@@ -1,14 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nypl_repo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
+ prerelease:
5
6
  platform: ruby
6
7
  authors:
7
8
  - Tim Waters
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2013-10-28 00:00:00.000000000 Z
12
+ date: 2014-01-23 00:00:00.000000000 Z
12
13
  dependencies: []
13
14
  description: A basic library for interacting with the NYPL Digital Collections Repo
14
15
  API
@@ -21,25 +22,26 @@ files:
21
22
  homepage: https://github.com/timwaters/nypl_repo
22
23
  licenses:
23
24
  - MIT
24
- metadata: {}
25
25
  post_install_message:
26
26
  rdoc_options: []
27
27
  require_paths:
28
28
  - lib
29
29
  required_ruby_version: !ruby/object:Gem::Requirement
30
+ none: false
30
31
  requirements:
31
- - - '>='
32
+ - - ! '>='
32
33
  - !ruby/object:Gem::Version
33
34
  version: '0'
34
35
  required_rubygems_version: !ruby/object:Gem::Requirement
36
+ none: false
35
37
  requirements:
36
- - - '>='
38
+ - - ! '>='
37
39
  - !ruby/object:Gem::Version
38
40
  version: '0'
39
41
  requirements: []
40
42
  rubyforge_project:
41
- rubygems_version: 2.0.3
43
+ rubygems_version: 1.8.25
42
44
  signing_key:
43
- specification_version: 4
45
+ specification_version: 3
44
46
  summary: NYPL Repo API Library
45
47
  test_files: []
checksums.yaml DELETED
@@ -1,7 +0,0 @@
1
- ---
2
- SHA1:
3
- metadata.gz: d74c2cfe6f6f381876592cc50810d3d01ec4afc3
4
- data.tar.gz: 930fea52d656c2d7f16919094a26f380d3456827
5
- SHA512:
6
- metadata.gz: 9c8c9a52ef34d01dd863a850be4ebb4d3f4e0fed5080892aa3aa3863d9b200e6ff49e932feaa679f052028eefe2087c971154e748b15c93cb95c7d024fae7c6c
7
- data.tar.gz: f3ff1074e577c66e1c85355556a7c52486f1a08d0f257f602e32bfc19858a10cd99fc18b4df5ade323925640b9aefeb1bdbcfc7c2a76b324c5a79a5fc84ed9ff