如何使用 R 中的 httr 包使用 Localytics 中的数据提取数据?
Posted
技术标签:
【中文标题】如何使用 R 中的 httr 包使用 Localytics 中的数据提取数据?【英文标题】:How do I extract data using data from Localytics using the httr package in R? 【发布时间】:2015-04-14 22:36:29 【问题描述】:我正在尝试使用 R 从 Localytics 中提取数据。这是我正在使用的代码的 sn-p:
library(httr)
localytics_url = 'https://api.localytics.com/v1/query'
r <- POST(url = localytics_url,
body=list(
app_id=app_id,
metrics=c("users","revenue"),
dimensions=c("day","birth_day"),
conditions=list(
day=c("between", "2015-02-01", "2015-04-01")
)
),
encode="json",
authenticate(key,secret),
accept("application/json"),
content_type("application/json")
)
stop_for_status(r)
content(r)
但是我从内容中得到的输出是二进制的,而不是 json。我很困惑。此外,如果我尝试查看对象“r”,我会看到
Response [https://api.localytics.com/v1/query]
Date: 2015-04-14 15:18
Status: 200
Content-Type: application/vnd.localytics.v1+hal+json;type=ResultSet; charset=utf-8
Size: 1.02 MB
<BINARY BODY>
我不明白为什么它是二进制体或如何将其转换回来。谁能给我任何帮助/线索?
我也使用以下代码在 Rcurl 中进行了尝试:
cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl")
object <- getForm(uri=localytics_url, app_id=app_id, metrics="customers", dimensions="day", conditions = toJSON(list(day=c("between", "2015-01-01", "2015-04-09"))), .opts=curlOptions(userpwd=sprintf("%s:%s", key, password))
但这会产生错误
Error in function (type, msg, asError = TRUE) :
SSL certificate problem: unable to get local issuer certificate
所以我有点难过。
######## 添加于 2015 年 4 月 15 日首先感谢 MrFlick 迄今为止的帮助。我可以使用它
contents=content(r, as="text")
非常感谢您的帮助。我(想我)之前曾尝试过,然后继续尝试使用 fromJSON 将其提取为 R 数据格式,但我使用的是 rjson 库,而 jsonlite 包对我有用。
感谢您的耐心等待。
【问题讨论】:
content(r, "text")
返回什么?看起来响应的内容类型很奇怪。如果你认为它应该是 json,你可以用 content(r, type="application/json")
覆盖。如果您无法制作可重现的示例,您至少可以发布相关 API 文档的链接吗?
看起来它正在向我粘贴十六进制代码,但我并不完全确定。 contents[1:10] [1] 7b 0a 20 20 22 72 65 73 75 6c
无论如何,你强制它 type="application/json" 的解决方案已经做了一些事情。现在我得到了输出,但我得到的是文本输出而不是 json 格式。这很奇怪。但话说回来,我真的不知道自己在做什么。
您是如何创作内容的?因为您发布的那些字节是 R 中的"\n \"resul"
,所以它看起来像正确的数据。您是否尝试设置type=
(可能还有as="parsed"
)?您应该更新问题以向我们准确展示您得到的结果,因为我们无法自己运行它。
【参考方案1】:
这是一个完整的代码示例,说明如何获取数据,然后提取结果并将其作为表格查看。
library(httr)
library(jsonlite)
response <- POST(url = 'https://api.localytics.com/v1/query',
body=list(
app_id='APP_ID',
metrics='sessions',
conditions=list(
day=c("between", format(Sys.Date() - 31, "%Y-%m-%d"), format(Sys.Date() - 1, "%Y-%m-%d"))
),
dimensions=c('new_device','day')
),
encode="json",
authenticate('KEY','SECRET'),
accept("application/json"),
content_type("application/json"))
stop_for_status(response)
# Convert the content of the result to a string, you can load with jsonlite
result <- paste(rawToChar(response$content), collapse = "")
# Useful to print your result incase you are getting any errors
print(result)
# Load your data with jsonlite
document <- fromJSON(result)
# The results tag contains the table of data you need
View(document$results)
【讨论】:
我无法再访问该数据集,因此无法测试该解决方案,但它看起来可以工作,因此我会打勾。谢谢!以上是关于如何使用 R 中的 httr 包使用 Localytics 中的数据提取数据?的主要内容,如果未能解决你的问题,请参考以下文章
HTTR 包:SSL 证书错误,SSL3_GET_SERVER_CERTIFICATE
如何在 R 中使用 httr 对 shibboleth 多主机名网站进行身份验证