【问题标题】:Parsing Facebook JSON results in R在 R 中解析 Facebook JSON 结果
【发布时间】:2013-04-02 07:01:39
【问题描述】:

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

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")

更新: 谢谢@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

有人可以帮帮我吗?


如果我想包含“计数”,嵌套在“喜欢”中?让我展示一下:

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

有人可以帮帮我吗?

【问题讨论】:

    标签: json r facebook-graph-api rcurl rjsonio


    【解决方案1】:

    使用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')
    

    更新:

    要获取帖子的点赞数,您可以使用:

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

    【讨论】:

    • 谢谢@user1609452。在 fbData
    • 使用 rjson 包,当我点击 fbData
    【解决方案2】:

    这实际上是对您在评论中提出的问题的回答。对于没有在评论中回复,我深表歉意,但我没有看到这样做的选项。

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

    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)
    

    “whatever”是您要替换它的地方。顺便说一句,如果您可以使用 rjson 而不是 RJSONIO 那么这可能会稍微好一点,但无论如何它们基本上是相同的。 rjson 只是运行得更快更可靠,而 RJSONIO 具有更多功能。

    哦,顺便说一句,您可以在 jsonlint.com 上验证您的 JSON 数据

    这听起来像是一个有趣的应用程序,你要在这里使用,它是什么?某种FB跟踪狂?

    【讨论】:

    • 感谢 @user2225772 的帮助和 cmets。你是对的,我的想法是建立一种跟踪者。下一步是设置超时或批处理以从 FB 流式传输此数据,就像 streamR 包对 Twitter 所做的那样 - 我设置为 12 小时,它会在此期间不断捕获带有我正在跟踪的术语的推文。但我仍然是编程语言的新手=/
    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多