【问题标题】:Connecting to BI tool's REST API using rcurl使用 rcurl 连接到 BI 工具的 REST API
【发布时间】:2023-03-18 06:18:01
【问题描述】:

我正在尝试从 R 中直接连接到 BI 工具的 API。API 文档列出了下面的 curl 命令以获取身份验证令牌:

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

此外,以下是可用于查询数据的 JSON 查询示例:

{
"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": [] 
}

我正在尝试 1)将上面的 curl 命令翻译成 R 以获得所需的身份验证令牌,以及 2)通过上面的 JSON 脚本查询数据。

到目前为止,我已尝试使用httr 库,如下所示:

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"))

无济于事。

API 文档位于受密码保护的页面后面,因此我无法链接它。如果需要其他信息,请告诉我。

【问题讨论】:

  • 您用来尝试获取身份验证令牌的 R 代码在哪里?
  • 试试 curlconverter 包。它可以将命令行 curl 代码转换为 R 表达式。

标签: r api curl rcurl httr


【解决方案1】:

hrbrmstr 完全正确!你应该生成两个api调用,第一个是验证用户,第二个是查询数据。

以下是使用 R 的 Datorama 查询 API 的完整工作示例。如有任何其他问题,请随时联系 Datorama 支持。

library(httr)

res <- POST("https://app.datorama.com/services/auth/authenticate",
            body=list(email="your@email.com", 
                      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")

【讨论】:

    【解决方案2】:

    我无权访问他们的 API,如果他们有免费套餐,我可能会为此服务编写一个小型包装 pkg。话虽如此,

    curl -X POST \
         -H "Content-Type: application/json" \
         -d '{ "email": "your@email.com",
               "password": "your_password" }'
    

    翻译为:

    library(httr)
    
    res <- POST("https://app.datorama.com/services/auth/authenticate",
                body=list(email="your@email.com", 
                          password="your_password"),
                encode="json")
    

    他们也没有免费的在线应用 API 文档,但我假设它会发回带有某种类型的 authorization_token 和编码字符串的 JSON 响应。

    然后,您很可能需要在每个后续 API 调用中传递该结果(并且可能存在需要重新升级初始身份验证的超时)。

    authenticate() 用于 HTTP 基本身份验证,而不用于这种类型的 API 内 JSON/REST 身份验证。

    除了使用令牌身份验证之外,您的实际 API 调用看起来还不错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-05
      • 2021-11-04
      • 2019-09-14
      • 2022-06-10
      • 2021-06-13
      • 1970-01-01
      • 1970-01-01
      • 2019-06-10
      相关资源
      最近更新 更多