免责声明:我知道之前已经问过this question。这个答案中提供的答案在过去对我有用,但由于某种原因现在已经停止了。
我正在从Mailchimp API中提取营销电子邮件统计信息。过去半年左右我一直这样做。然而,在过去的两个月里,我相信我拉的结构已经改变,因此,我的代码不再有效,我无法弄清楚原因。我相信它与我收到的数据框列表中的嵌套数据帧有关。
以下是我的代码示例以及生成的数据框列表。我从代码和图片中删除了敏感信息:
library(httr)
library(jsonlite)
library(plyr)
#Opens-----------
opens1 <- GET("https://us4.api.mailchimp.com/3.0/reports/***ReportNumber***/sent-to?count=4000",authenticate('***My Company***', '***My-Password***'))
opens1 <- content(opens1,"text")
opens1 <- fromJSON(opens1)
然后我运行opens1 <- ldply(opens1, data.frame)
,我收到以下错误:
Error in allocate_column(df[[var]], nrows, dfs, var) :
Data frame column 'merge_fields' not supported by rbind.fill
我尝试使用并查找rbind.fill()
以及帖子顶部链接答案中描述的其他方法,但无济于事。我对merge_fields
变量的错误解释是什么,或者我离开了,我该如何纠正?
我只想从opens1
列表中获取所有变量的一个数据框。
感谢您提供任何帮助,请随时提出任何澄清问题!
答案 0 :(得分:1)
快速浏览一下,这似乎对我有用:
library(httr)
campaign_id <- "-------"
apikey = "------"
url <- sprintf("https://us1.api.mailchimp.com/3.0/reports/%s/sent-to", campaign_id)
opens <- GET(url, query = list(apikey = apikey, count = 4000L))
lst <- rjson::fromJSON(content(opens, "text"))
df <- dplyr::bind_rows(
lapply(lst$sent_to, function(x)
as.data.frame(t(unlist(x)), stringsAsFactors = F)
))