2013-04-02 97 views
1

我已经阅读了其他问题,但我仍然不知道如何解析Facebook中的Facebook图形搜索结果。我的主要目标是转换类似数据框的内容,以分析某些列。解析Facebook中的JSON结果R

library(RCurl) 
library(RJSONIO) 
library(rjson) 

data <- getURL("https://graph.facebook.com/search?q=flamengo&type=post&limit=1000", cainfo="cacert.perm") 
#if you don't have "cacert.perm" file, do as follow 
#download.file(url="http://curl.haxx.se/ca/cacert.pem", destfile="cacert.perm") 

UPDATE: 感谢@ user1609452

现在,如果我想包括 “计数”,嵌套在 “喜欢”?让我们看看:

names(fbData$data[[1]]) 
[1] "id"   "from"   "message"  "actions"  "privacy"  
[6] "type"   "created_time" "updated_time" "shares"  "likes" 
names(fbData$data[[1]]$likes) 
[1] "data" "count" 

在这种情况下,我该如何设置match.fun参数?

likes <- lapply(fbData$data[[1]]$likes,name='count') 
Error in match.fun(FUN) : no "FUN" argument, no pattern 

likes <- lapply(fbData$data[[1]]$likes,'[[',name='count') 
Error in FUN(X[[2L]], ...) : index out of bounds 

有人可以帮我吗?


如果我想包含“count”,嵌套在“likes”中?让我们看看:

names(fbData$data[[1]]) 
[1] "id"   "from"   "message"  "actions"  "privacy"  
[6] "type"   "created_time" "updated_time" "shares"  "likes" 
names(fbData$data[[1]]$likes) 
[1] "data" "count" 

在这种情况下,我该如何设置match.fun参数?

likes <- lapply(fbData$data[[1]]$likes,name='count') 
Error in match.fun(FUN) : no "FUN" argument, no pattern 

likes <- lapply(fbData$data[[1]]$likes,'[[',name='count') 
Error in FUN(X[[2L]], ...) : index out of bounds 

有人可以帮我吗?

回答

2

使用RJSONIOrjson不需要同时调用两者。一旦您导入了JSON数据,您需要将其转换为列表。

library(RCurl) 
library(RJSONIO) 

data <- getURL("https://graph.facebook.com/search?q=flamengo&type=post&limit=1000") 

fbData <- fromJSON(data) 

该帖子包含在fbData$data

#> length(fbData$data) 
#[1] 500 

第一后各项属性:

#> names(fbData$data[[1]]) 
#[1] "id"   "from"   "message"  "privacy"  "type"   
#[6] "application" "created_time" "updated_time" 

这些数据转换成数据帧,你需要决定你想要的东西,包括和如何构建它。例如把所有的邮件正文,你可以使用:

lapply(fbData$data,'[[',name='message') 

UPDATE:

为了得到喜欢的一个职位,你可以使用数字:

lapply(fbData$data,function(x){x$likes$count}) 
+0

谢谢@ user1609452。 后fbData < - fromJSON(数据)我得到 '错误在fromJSON(内容,处理程序,default.size,深度,的allowComments,: 无效JSON输入' –

+0

与rjson包,当我打fbData < - fromJSON(数据)返回“Error in fromJSON(data):意想不到的转义字符'pos'130处的'o'有任何想法如何在”data“字符对象中替换”\“,在getURL后面? –

1

这实际上是一个答案到你在评论中提出的问题。我很抱歉没有回复评论,但我没有看到这样做的选择。

如果你想更换/你可以使用

install.packages("stringr", dep=TRUE) 
library("stringr") 
library("RCurl") 
library("RJSONIO") 
data <- getURL("https://graph.facebook.com/search?q=flamengo&type=post&limit=1000") 
clean <- str_replace_all(data,"\","whatever") 
fbData <- fromJSON(clean) 

其中“无所谓”是你与替换它的内容。顺便说一下,如果你可以使用rjson而不是RJSONIO,那么这可能会稍微好一些,但它们基本上是一样的。 rjson运行速度更快,更可靠,而RJSONIO具有更多功能。

哦,顺便说一句,你可以在jsonlint验证你的JSON数据。com

这听起来像是一个有趣的应用程序,你去了这里,它是什么?某种FB追踪者?

+0

Thanks @ user2225772 for你的帮助和你的评论你是对的,我的想法是建立一种潜行者,下一步是设置一个超时或批处理从FB流这个数据,就像streamR包与Twitter一样 - 我设置为12小时并继续捕捉我在这段时间跟踪的条款,但我仍然是一个新手在编程语言= / –