R RESTFul api consumer

L’architettura RESTFul API è ormai una pratica consolidata per la fornitura di dati. In R  si trovano molti pacchetti sviluppati per poter interagire con uno specifico provider, ad esempio, fra i pacchetti più noti troviamo  ckanr (un client che permette di dialogare con una qualsiasi piattaforma CKAN) o twitteR (che consente di accedere alle API di twitter). Questi strumenti non sono sempre disponibili, è quindi necessario utilizzare dei pacchetti che ci permettano di eseguire le nostre richieste direttamente con il protocollo HTTP.

I pacchetti utilizzati

Una soluzione adottabile per accedere direttamente alle API è quella di usare in combinazione il pacchetto httr e, se la risposta è un JSON, il pacchetto jsonlite per ottenere un array dalla risposta .

Il pacchetto httr permette di costruire una richiesta HTTP in maniera molto versatile. Le funzioni principali del pacchetto espongono i vari verbi dell’HTTP:

  • GET
  • PUT
  • DELETE
  • POST
  • PATCH

L’header può essere personalizzato attraverso la funzione add_header(), mentre per l’autenticazione sono presenti varie alternative: dall’autenticazione di base a quella via token, oauth 1.0, oaut2.0. Il risultato può essere estratto attraverso i metodi: content, http_status, http_error, headers.

Accedere a GitHub

Usando come esempio le API di GitHub, per estrarre le informazioni relative al proprio account:

library("httr")
library (jsonlite)
resp = GET("https://api.github.com/user",authenticate("username", "passw
ord", type
= "basic"))
if(status_code(resp)==200){
 myAccount = fromJSON(content(resp, as="text"))
 myStarredRepoResp = GET(paste(myAccount$url,"starred",sep="/"))
 if(status_code(resp)==200){
  myStarredRepo = fromJSON(content(myStarredRepoResp , as="text"))
 }else{
  print(paste("errore nella richiesta starre",http_status(myStarredRepoResp)$message)) }
}else{
 print
(paste("errore nella richiesta dell'account",http_status(myStarredRepoResp)$message))
}

languages

Estraendo i dati relativi ai repository a cui ho “assegnato una  preferenza” ottengo, usando i pacchetti  ggplot e xkcd, l’istogramma per linguaggio, nella figura a fianco.

Vi sono numerosi esempi di post, si può ad esempio creare un nuovo repository, effettuare un commit o, ad esempio, creare un issue:

resp = POST("https://api.github.com/repos/username/repoName/issues",authenticate("username", "password", type = "basic"),body = list(title = "Nuovo Issue",body="post da httr"), encode = "json")
if(status_code(resp)==201){
 print("registrato")
}else{
  print(paste("errore nella richiesta",http_status(myStarredRepoResp)$message))
}

In questo post abbiamo visto un semplice esempio utilizzando solo i comandi base del pacchetto ma httr mette a disposizioni metodi per personalizzare le varie chiamate e adattarle a qualsiasi situazione.

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...