I am trying to make a request from an API of "idealista" (link).
It needs authentication, so what I did was the next:
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))
So, first: I don't know if the token must to be base64 encoded (I think yes). And I do following to make a request:
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))
And the response is:
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...
...
Which does not have sense. Can you tell me what I am doing bad? The status code that I receive is "400", I do not know what I must to do.
Thanks in advance.
I found a similar question in python and It was solved in the this link
The first part (authentication) was ok but the second one was wrong. Additionally, I tried other url too and the token does not need base64 encoded.
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))
As you can see, I was using the function "GET", but watching the python code mentioned above, I used "POST" and it worked!.
I do not know why to use the function POST when I am doing a request but the API works like this.