带有getURL和RCurl错误的R API连接(Localytics)

时间:2014-07-15 11:03:27

标签: r api ssl parameters rcurl

我正在尝试通过他们的API(https://api.localytics.com/docs#query)从移动分析服务Localytics获取数据。特别是我想在R中翻译以下cURL命令:

curl --get  'https://api.localytics.com/v1/query' \
 --user 'API_KEY:API_SECRET' \
 --data 'app_id=APP_ID' \
 --data 'metrics=users' \
 --data 'dimensions=day' \
 --data-urlencode 'conditions={"day":["between","2013-04-01","2013-04-07"]}'

我的R代码目前看起来像这样。 APIKey和API秘密当然由实际密钥替换。但是,我收到一条错误消息,指出至少必须指定维度或指标。

object <- getURL('https://api.localytics.com/v1/query', userpwd = "API_Key:API_Secret", httpheader=list(app_id = "app_id=03343434353534",
metrics = "metrics=users",
dimensions = "dimensions=day",
conditions = toJSON('conditions={"day":["between","2014-07-01","2014-07-10"]}')),  ssl.verifypeer = FALSE)

要使其发挥作用需要进行哪些更改。

先谢谢你帮助我, 彼得

2 个答案:

答案 0 :(得分:1)

使用开发版httr:

时,这一点特别容易
library(httr)

r <- POST('https://api.localytics.com/v1/query',  
  body = list(
    app_id = "APP_ID",
    metrics = "users",
    dimensions = "day",
    conditions = list(
      day = c("between", "2014-07-01", "2004-07-10")
    )
  ), 
  encode = "json",
  authenticate("API_key", "API_secret")
)
stop_for_status(r)
content(r)

(我将请求转换为POST并使用json编码处理所有内容,如API文档中所述)。

如果您想确切了解发送到服务器的内容,请使用verbose()配置。

答案 1 :(得分:0)

看起来getURL将您质疑的参数作为HTTP标头传递,而不是像curl调用那样传递查询字符串数据。您应该使用getForm代替。此外,我不确定您的toJSON函数来自哪个库,但这至少不是来自rsjon的函数的正确语法。

无论如何,这是来自R的一个调用应该产生相同的HTTP调用是你的curl命令

library(rjson)
library(RCurl)
object <- getForm('https://api.localytics.com/v1/query',  
    app_id = "APP_ID",
    metrics = "users",
    dimensions = "day",
    conditions = toJSON(list(day=c("between","2014-07-01","2004-07-10"))),  
    .opts=curlOptions(
        userpwd = "API_Key:API_Secret",  httpauth = 1L)
)

我发现使用网站http://requestb.in/非常有助于调试这些问题(这正是我用来创建此解决方案的内容)。您可以向其网站发送请求,并记录发送的确切HTTP消息,以便您可以比较不同的方法。

httpauth部分来自this SO question,似乎需要触发测试网站的身份验证;您可能不需要它用于“真实”网站。