2013-02-23 63 views
1

我想使用下面的代码从Facebook上的页面获得帖子。即使查询在浏览器中输入时出现错误,我也会收到错误。这是我得到的错误:如何获得最受欢迎的Facebook发布在R

WWW-Authenticate: OAuth "Facebook Platform" "invalid_request" "Unknown path components: 

任何想法都非常感谢!

# go to 'https://developers.facebook.com/tools/explorer' to get your access token 
access_token <- "### token ###" 

require(RCurl) 
require(rjson) 

cafile <- system.file("CurlSSL", "cacert.pem", package = "RCurl") 

options(RCurlOptions = list(verbose = TRUE, followlocation = TRUE, timeout = 100, useragent = "R")) 


# set the curl options 
curl <- getCurlHandle() 
options(RCurlOptions = list(capath = system.file("CurlSSL", "cacert.pem", 
              package = "RCurl"), 
         ssl.verifypeer = FALSE, verbose = TRUE, cookiejar = 'my_cookies.txt', 
         cookiefile = 'my_cookies.txt', followlocation = TRUE,                   
         useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3')) 
curlSetOpt(.opts = list(proxy = 'proxyserver:port'), curl = curl) 


# Facebook json function copied from original (Romain Francois) post 
facebook <- 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)) 
fromJSON(data) 
} 


### TED FACEBOOK PAGE 
# http://www.facebook.com/TED 
# TED's Facebook ID 29092950651 can be found on http://graph.facebook.com/TED 

ted <- list() 
i<-0 
next.path <- "29092950651/posts" 

# download all TED posts 
while(length(next.path)!=0) { 
    i<-i+1 
    ted[[i]] <- facebook(path=next.path , access_token=access_token) 
    next.path <- sub("https://graph.facebook.com/","",ted[[i]]$paging$'next') 
} 
ted[[i]] <- NULL 

# parse just video links posted by TED 
parse.count.ted <- function(x) 
    if (x$type=="link" & x$from$id=="29092950651") x$likes$count else NA 
parse.link.ted <- function(x) 
    if (x$type=="link" & x$from$id=="29092950651") x$link else NA 
ted.counts <- unlist(sapply(ted, parse.master, f=parse.count.ted)) 
ted.links <- unlist(sapply(ted, parse.master, f=parse.link.ted)) 

# see three most popular talks 
ted.links[order(ted.counts,decreasing=TRUE)][1:3] 
+1

您可以将您的问题归结到您的代码中您收到错误的特定位置? – 2013-02-23 23:16:41

回答

3

这可能是URL格式化的问题。如果未指定options参数,则生成的URL将如下所示:/me/photos&access_token=...。在这里,path应该是/me/photos&access_token,这可能不是根据Facebook API有效的URL组件。

我觉得到facebook功能如下变化将解决这个问题:

require(RCurl) 
require(rjson) 

facebook <- function(path = "me", access_token = token, options){ 
    if(!missing(options)){ 
     options <- sprintf( 
          "?%s&", 
          paste( 
           names(options), "=", unlist(options), 
           collapse = "&", sep = "" 
           ) 
          ) 
    } else { 
     options <- "?" 
    } 

    urlTemplate <- "https://graph.facebook.com/%s%saccess_token=%s" 
    data <- getURL( 
        sprintf( 
          urlTemplate, 
          path, 
          options, 
          access_token 
          ) 
        ) 
    fromJSON(data) 
} 

现在,即使options参数丢失,产生的URL看起来像:/me/photos?access_token=...

+0

非常感谢!现在我收到以下错误: 错误在myposts [[1]] $ paging $“next”: $操作符对原子向量无效 – Lauren 2013-02-24 19:21:15

+0

我没有看过由'facebook'调用返回的JSON数据,所以我无法对此发表评论。但是,这听起来像是一个单独的问题。你能否在另一个问题上发布JSON数据(和'myposts [[1]]',可能),并接受这个答案,如果它解决了当前的问题? – 2013-02-24 21:39:23

+0

非常感谢!这里是一个单独的问题的链接: http://stackoverflow.com/questions/15069078/parsing-facebook-json-results – Lauren 2013-02-25 14:18:42