[英]R API Connection (Localytics) with getURL and RCurl Error
我正在尝试通过其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)
要使其正常工作,必须进行哪些更改。
预先感谢您的帮助,彼得
使用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)
(如API文档中所述,我将请求转换为POST,并对所有内容均使用json编码)。
如果您想确切查看发送到服务器的内容,请使用verbose()
配置。
看起来getURL
会将您查询的参数传递为HTTP标头,而不是像curl
调用那样传递为querystring数据。 您应该改用getForm
。 另外,我不确定toJSON
函数来自哪个库,但这至少不是rsjon
的正确语法。
无论如何,这是来自R的调用,应该与curl
命令产生相同的HTTP调用
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
部分来自这个SO问题 ,似乎是触发测试站点的身份验证所必需的; 您可能不需要“真实”网站。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.