我试图从各个页面提取Facebook Feed数据来比较情绪,我在将JSON原始文本转换为R中的列表对象时遇到了麻烦。
require(RCurl)
require(rjson)
access_token <- "XXXXXXXXXXXXXXXX"
FacebookScrape <- function( path = "me", access_token, options){
if( !missing(options) ){
options <- sprintf( "?%s", paste( names(options), "=", unlist(options), collapse = "&", sep = "" ) )
} else {
options <- ""
}
data <- getURL( sprintf( "https://graph.facebook.com/%s%s&access_token=%s", path, options, access_token ),
ssl.verifypeer = FALSE)
fromJSON(data, unexpected.escape = "skip")
}
cb.path <- "24329337724/feed?limit=300&offset=0&__after_id=354707562896&"
cb.feed <- FacebookScrape(path = cb.path, access_token = access_token)
此代码返回以下错误消息:
Error in fromJSON(data, unexpected.escape = "skip") :
unexpected character: c
我对JSON不是很熟悉,但我知道在fromJSON函数中发生了错误(上面代码中的第13行)。这个函数调用C,所以使用debug()并没有告诉我什么。如果JSON文本格式正确,我也不确定一个简单的字符“c”如何导致错误。它不像“c”是一个转义字符或任何东西。我还使用fromJSON中的unexpected.escape = "skip"
选项来说明转义字符。
我已确定在解析this post时发生错误(如果我在limit=261
中设置了cb.path
则没有错误,但如果我有limit=262
则有错误。有没有人遇到过类似的问题?任何帮助将不胜感激。
会话信息:
R version 2.15.3 (2013-03-01)
Platform: x86_64-w64-mingw32/x64 (64-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] streamR_0.1 wordcloud_2.2 RColorBrewer_1.0-5 Rcpp_0.10.2 stringr_0.6.2
[6] plyr_1.8 tm_0.5-8.3 twitteR_1.1.6 rjson_0.2.12 ROAuth_0.9.3
[11] digest_0.6.2 ggplot2_0.9.3.1 XML_3.95-0.1 RCurl_1.95-4.1 bitops_1.0-5
loaded via a namespace (and not attached):
[1] colorspace_1.2-1 dichromat_2.0-0 grid_2.15.3 gtable_0.1.2 labeling_0.1 MASS_7.3-23
[7] munsell_0.4 proto_0.3-10 reshape2_1.2.2 scales_0.2.3 slam_0.1-27 tools_2.15.3
答案 0 :(得分:1)
我有同样的问题...... 基于Rfacebook的callAPI:https://github.com/pablobarbera/Rfacebook/blob/master/Rfacebook/R/utils.R 使用:fromJSON(rawToChar(data)
facebook <- function(url, token){
if (class(token)=="config"){
url.data <- GET(url, config=token)
}
if (class(token)=="Token2.0"){
url.data <- GET(url, config(token=token))
}
if (class(token)=="character"){
url <- paste0(url, "&access_token=", token)
url <- gsub(" ", "%20", url)
url.data <- GET(url)
}
if (class(token)!="character" & class(token)!="config" & class(token)!="Token2.0"){
stop("Error in access token. See help for details.")
}
content <- fromJSON(rawToChar(url.data$content)) # It's working very well
if (length(content$error)>0){
stop(content$error$message)
}
return(content)
}
致电facebook功能:
next.path <- "https://graph.facebook.com/29092950651/posts"
facebook( url=next.path , token)
您的access_token将在2小时内激活。我在http://blog.revolutionanalytics.com/2013/11/how-to-analyze-you-facebook-friends-network-with-r.html
上使用了fb_oauth祝你好运 罗伯特
答案 1 :(得分:0)
我检查了你的JSON
原因在于
“message”:“true”,
这导致R中的json被解析并变成\“并且缺少引号消失。
下一行can_comment触发错误,它以C
开头