2017-10-10 6 views
-1

Je suis en train de faire une requête à partir d'un API de "idealista" (link).Je ne peux pas faire de demande de GET en R à idealista API

Il nécessite une authentification, donc ce que je faisais était la suivante:

if(!require("jsonlite")){install.packages("jsonlite")} 
if(!require("httr")){install.packages("httr")} 

consumer_key <- "my_key" 
consumer_secret <- "my_secret" 

#Use basic auth 
secret <- jsonlite::base64_enc(paste(consumer_key, consumer_secret, sep = ":")) 
req <- httr::POST("https://api.idealista.com/oauth/token", 
        httr::add_headers(
        "Authorization" = paste("Basic", gsub("\n", "", secret)), 
        "Content-Type" = "application/x-www-form-urlencoded;charset=UTF-8" 
       ), 
        body = "grant_type=client_credentials" 
) 


#Extract the access token 
token <- paste("Bearer", jsonlite::base64_enc(httr::content(req)$access_token)) 

Alors, d'abord: je ne sais pas si le jeton doit être base64 (je pense que oui). Et je suivais pour faire une demande:

url<-"https://api.idealista.com/3.5/es/search?locale=es&maxItems=20&numPage=1&operation=sale&order=publicationDate&propertyType=garages&apikey=my_key&t=1&language=es&bankOffer=true" #an example of url (needs apikey) 
req <- httr::GET(url, httr::add_headers("Authorization" = token)) 

Et la réponse est:

Response [https://api.idealista.com/3.5/es/search?locale=es&maxItems=20&numPage=1&operation=sale&order=publicationDate&propertyType=garages&apikey=80gzxznozajnl3tf30ite86k1p24e4yb&t=1&language=es&bankOffer=true] 
    Date: 2017-10-10 15:25 
    Status: 400 
    Content-Type: text/html 
    Size: 4.4 kB 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/T... 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es_ES" lang="es_ES"> 
<head> 

       <title>idealista.com : pisos madrid, pisos barcelona, pisos v... 
       <meta http-equiv="content-Type" content="text/html; charset=I... 
       <meta http-equiv="Expires" content="0"/> 
       <meta name="Pragma" content="no-cache"/> 
       <meta http-equiv="pragma" content="no-cache"/> 
       <meta http-equiv="cache-control" content="no-cache, mustreval... 
... 

qui n'a pas de sens. Pouvez-vous me dire ce que je fais mal? Le code d'état que je reçois est "400", je ne sais pas ce que je dois faire.

Merci d'avance.

+0

Cela semble entièrement spécifique à l'API idealista.com. Vous devriez probablement les contacter pour le soutien. Ou à tout le moins fournir un lien la partie pertinente de la documentation de leur API. Essayez-vous vraiment d'ajouter deux en-têtes d'autorisation? – MrFlick

Répondre

2

J'ai trouvé une question similaire en python et il a été résolu dans la présente link

La première partie (authentification) était ok, mais le second était faux. De plus, j'ai essayé d'autres URL et le jeton n'a pas besoin d'encodage en base64.

token <- paste("Bearer", httr::content(req)$access_token) 

url<-"http://api.idealista.com/3.5/es/search?center=40.42938099999995,-3.7097526269835726&country=es&maxItems=50&numPage=1&distance=452&propertyType=homes&operation=sale" 
req <- httr::POST(url, httr::add_headers("Authorization" = token)) 

Comme vous pouvez le voir, j'utilisais la fonction « GET », mais en regardant le code python mentionné ci-dessus, je « POST » et cela a fonctionné !.

Je ne sais pas pourquoi utiliser la fonction POST lorsque je fais une requête, mais l'API fonctionne comme ceci.