playforest
playforest

Reputation: 113

Connecting to BI tool's REST API using rcurl

I am trying to connect directly to a BI tool's API from within R. The API Documentation lists the curl command below to obtain an authentication token:

curl -X POST -H "Content-Type: application/json" -d
                 '{
                    "email": "[email protected]",
                    "password": "your_password"
                 }'
https://app.datorama.com/services/auth/authenticate

Further, below is an example of a JSON query that can be used to query data:

{
"brandId": "9999",
"dateRange": "CUSTOM",
"startDate": "2016-01-01",
"endDate": "2016-12-31",
"measurements": [
    {
        "name": "Impressions"
    }
],
"dimensions": [
    "Month"
],
"groupDimensionFilters": [],
"stringDimensionFilters": [],
"stringDimensionFiltersOperator": "AND",
"numberDimensionFiltersOperator": "AND",
"numberMeasurementFilter": [],
"sortBy": "Month",
"sortOrder": "DESC",
"topResults": "50",
"groupOthers": true,
"topPerDimension": true,
"totalDimensions": [] 
}

I'm trying to 1) translate the curl command above into R so as to obtain the authentication token required, and 2) query the data through the JSON script above.

So far i've attempted using the httr library as follows:

library(httr)
r <- POST('https://app.datorama.com/services/auth/authenticate',  
          body = list(
              brandId = "9999",
              dateRange = "CUSTOM",
              measurements = list(name="Impressions"),
              dimensions = list(name="Month"),
              startDate = "2016-01-01",
              endDate = "2016-12-31"
          ), 
          encode = "json",
          authenticate("username", "password"))

to no avail.

The API documentation is behind a password protected page and as such i'm unable to link it. Let me know if additional information is required.

Upvotes: 0

Views: 785

Answers (2)

efic1
efic1

Reputation: 490

hrbrmstr is totally right! you should generate two api calls, the first one is to authenticate the user and the second one is to query the data.

Below is a fully working example of using the Datorama query API from R. feel free to contact the Datorama support for any additional questions.

library(httr)

res <- POST("https://app.datorama.com/services/auth/authenticate",
            body=list(email="[email protected]", 
                      password="your_password"),
            encode="json")

token <- content(res)$token

res_query <- POST(paste("https://app.datorama.com/services/query/execQuery?token=",token, sep=""),
        body = list(
              brandId = "9999",
              dateRange = "CUSTOM",
              measurements = list(list(name = "Impressions")),
              dimensions = list("Month"),
              startDate = "2016-01-01",
              endDate = "2016-12-31"
          ), 
          encode = "json")

cat(content(res_query, "text"), "\n")

Upvotes: 2

hrbrmstr
hrbrmstr

Reputation: 78792

I don't have access to their API and would have prbly written a small wrapper pkg to this service if they had a free tier. Having said that,

curl -X POST \
     -H "Content-Type: application/json" \
     -d '{ "email": "[email protected]",
           "password": "your_password" }'

translates to:

library(httr)

res <- POST("https://app.datorama.com/services/auth/authenticate",
            body=list(email="[email protected]", 
                      password="your_password"),
            encode="json")

They don't have their app API documentation online for free either but I'm going to assume it sends back a JSON response with some type of authorization_token and encoded string.

You then—most likely—need to pass that result with every subsequent API call (and there is probably a timeout where the initial auth will need to be re-upped).

authenticate() is used for HTTP basic auth, not for this type of in-API JSON/REST auth.

Your actual API call looks fine apart from using the token auth.

Upvotes: 1

Related Questions