@@ -62,9 +62,7 @@ Petfinder <- function(key, secret) {
6262for (type in types ) {
6363url <- paste0(private $ host ,' types/' ,type ,sep = ' ' )
6464
65- r <- httr :: GET(url ,
66- httr :: add_headers(Authorization = paste0(' Bearer' ,
67- private $ auth ,sep = ' ' )))
65+ r <- private $ get_request(url = url )
6866
6967req_json <- jsonlite :: fromJSON(httr :: content(r ,as = ' text' ,encoding = ' utf-8' ))$ type
7068req_json $ `_links` <- NULL
@@ -106,11 +104,10 @@ Petfinder <- function(key, secret) {
106104for (type in animal_types ) {
107105url <- paste0(private $ host ,' types/' ,type ,' /breeds' ,sep = ' ' )
108106
109- r <- httr :: GET(url ,
110- httr :: add_headers(Authorization = paste0(' Bearer' ,
111- private $ auth ,sep = ' ' )))
107+ r <- private $ get_request(url = url )
112108
113109req_json <- jsonlite :: fromJSON(httr :: content(r ,as = ' text' ,encoding = ' utf-8' ))$ breeds $ name
110+
114111breeds_collection [[type ]]<- req_json
115112
116113 }
@@ -163,9 +160,7 @@ Petfinder <- function(key, secret) {
163160for (ani_id in animal_id ) {
164161url <- paste0(private $ host ,' animals/' ,ani_id ,sep = ' ' )
165162
166- r <- httr :: GET(url ,
167- httr :: add_headers(Authorization = paste0(' Bearer' ,
168- private $ auth ,sep = ' ' )))
163+ r <- private $ get_request(url = url )
169164
170165req_json <- jsonlite :: fromJSON(httr :: content(r ,as = ' text' ,encoding = ' utf-8' ),
171166flatten = TRUE )$ animal
@@ -199,10 +194,8 @@ Petfinder <- function(key, secret) {
199194params [' limit' ]= 100
200195params [' page' ]= 1
201196
202- r <- httr :: GET(url ,
203- query = params ,
204- httr :: add_headers(Authorization = paste0(' Bearer' ,
205- private $ auth ,sep = ' ' )))
197+ r <- private $ get_request(url = url ,
198+ params = params )
206199
207200req_json <- jsonlite :: fromJSON(httr :: content(r ,as = ' text' ,encoding = ' utf-8' ),
208201flatten = TRUE )
@@ -213,10 +206,8 @@ Petfinder <- function(key, secret) {
213206for (page in 2 : max_pages ) {
214207params [' page' ]<- page
215208
216- r <- httr :: GET(url ,
217- query = params ,
218- httr :: add_headers(Authorization = paste0(' Bearer' ,
219- private $ auth ,sep = ' ' )))
209+ r <- private $ get_request(url = url ,
210+ params = params )
220211
221212req_json <- jsonlite :: fromJSON(httr :: content(r ,as = ' text' ,encoding = ' utf-8' ),
222213flatten = TRUE )
@@ -230,10 +221,8 @@ Petfinder <- function(key, secret) {
230221else {
231222params [' page' ]= 1
232223
233- r <- httr :: GET(url ,
234- query = params ,
235- httr :: add_headers(Authorization = paste0(' Bearer' ,
236- private $ auth ,sep = ' ' )))
224+ r <- private $ get_request(url = url ,
225+ params = params )
237226
238227req_json <- jsonlite :: fromJSON(httr :: content(r ,as = ' text' ,encoding = ' utf-8' ))
239228
@@ -253,10 +242,8 @@ Petfinder <- function(key, secret) {
253242for (page in 2 : pages ) {
254243params [' page' ]= page
255244
256- r <- httr :: GET(url ,
257- query = params ,
258- httr :: add_headers(Authorization = paste0(' Bearer' ,
259- private $ auth ,sep = ' ' )))
245+ r <- private $ get_request(url = url ,
246+ params = params )
260247
261248req_json <- jsonlite :: fromJSON(httr :: content(r ,as = ' text' ,encoding = ' utf-8' ),
262249flatten = TRUE )
@@ -296,9 +283,7 @@ Petfinder <- function(key, secret) {
296283for (org_id in organization_id ) {
297284url <- paste0(private $ host ,' organizations/' ,org_id ,sep = ' ' )
298285
299- r <- httr :: GET(url ,
300- httr :: add_headers(Authorization = paste0(' Bearer' ,
301- private $ auth ,sep = ' ' )))
286+ r <- private $ get_request(url = url )
302287
303288req_json <- jsonlite :: fromJSON(httr :: content(r ,as = ' text' ,encoding = ' utf-8' ),
304289flatten = TRUE )$ organization
@@ -324,10 +309,8 @@ Petfinder <- function(key, secret) {
324309params [' limit' ]= 100
325310params [' page' ]= 1
326311
327- r <- httr :: GET(url ,
328- query = params ,
329- httr :: add_headers(Authorization = paste0(' Bearer' ,
330- private $ auth ,sep = ' ' )))
312+ r <- private $ get_request(url = url ,
313+ params = params )
331314
332315req_json <- jsonlite :: fromJSON(httr :: content(r ,as = ' text' ,encoding = ' utf-8' ),
333316flatten = TRUE )
@@ -337,10 +320,8 @@ Petfinder <- function(key, secret) {
337320for (page in 2 : max_pages ) {
338321params [' page' ]= page
339322
340- r <- httr :: GET(url ,
341- query = params ,
342- httr :: add_headers(Authorization = paste0(' Bearer' ,
343- private $ auth ,sep = ' ' )))
323+ r <- private $ get_request(url = url ,
324+ parms = params )
344325
345326req_json <- jsonlite :: fromJSON(httr :: content(r ,as = ' text' ,encoding = ' utf-8' ),
346327flatten = TRUE )$ organizations
@@ -353,10 +334,8 @@ Petfinder <- function(key, secret) {
353334else {
354335params [' page' ]= 1
355336
356- r <- httr :: GET(url ,
357- query = params ,
358- httr :: add_headers(Authorization = paste0(' Bearer' ,
359- private $ auth ,sep = ' ' )))
337+ r <- private $ get_request(url = url ,
338+ params = params )
360339
361340req_json <- jsonlite :: fromJSON(httr :: content(r ,as = ' text' ,encoding = ' utf-8' ),
362341flatten = TRUE )
@@ -377,10 +356,8 @@ Petfinder <- function(key, secret) {
377356for (page in 2 : pages ) {
378357params [' page' ]= page
379358
380- r <- httr :: GET(url ,
381- query = params ,
382- httr :: add_headers(Authorization = paste0(' Bearer' ,
383- private $ auth ,sep = ' ' )))
359+ r <- private $ get_request(url = url ,
360+ params = params )
384361
385362req_json <- jsonlite :: fromJSON(httr :: content(r ,as = ' text' ,encoding = ' utf-8' ),
386363flatten = TRUE )
@@ -414,7 +391,57 @@ Petfinder <- function(key, secret) {
414391" client_secret" = private $ secret )
415392 );
416393
417- return (httr :: content(req )$ access_token )
394+ if (req $ status_code == 401 ) {
395+ stop(' Provided credentials are invalid.' )
396+ }
397+ else {
398+ return (httr :: content(req )$ access_token )
399+ }
400+ },
401+
402+ get_request = function (url ,
403+ body ,
404+ params = NULL ) {
405+
406+ if (is.null(params )) {
407+ r <- httr :: GET(url = url ,
408+ httr :: add_headers(Authorization = paste0(' Bearer' ,private $ auth ,sep = ' ' )))
409+ }
410+
411+ else {
412+ r <- httr :: GET(url = url ,
413+ query = params ,
414+ httr :: add_headers(Authorization = paste0(' Bearer' ,private $ auth ,sep = ' ' )))
415+ }
416+
417+ if (r $ status_code == 400 ) {
418+ print(httr :: content(req )$ `invalid-params` )
419+ stop(paste0(' There are invalid parameters in the API query. Status Code:' ,
420+ r $ status_code ,
421+ sep = ' ' ))
422+ }
423+
424+ if (r $ status_code == 403 ) {
425+ stop(paste0(
426+ ' Insufficient access to requested resource. This is typically the result of current Petfinder API access token becoming invalid. Status Code:' ,
427+ r $ status_code ,
428+ sep = ' ' ))
429+ }
430+
431+ if (r $ status_code == 404 ) {
432+ stop(paste0(' The requested resource could not be found. Status Code:' ,
433+ r $ status_code ,
434+ sep = ' ' ))
435+ }
436+
437+ if (r $ status_code == 500 ) {
438+ stop(paste0(' There was an unexpected error in the Petfinder API. Please try again. Status Code:' ,
439+ r $ status_code ,
440+ sep = ' ' ))
441+ }
442+
443+ return (r )
444+
418445 },
419446
420447parameters = function (breed = NULL ,