2013-02-23 2 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

질문에 오류가있는 코드의 특정 위치로 끓일 수 있습니까? –

답변

3

URL 서식이 문제가 될 수 있습니다. options 인수를 지정하지 않으면 결과 URL은 /me/photos&access_token=...입니다. 여기에서 path/me/photos&access_token이며 Facebook API에 따라 유효한 URL 구성 요소가 아닙니다.

은 내가 facebook 기능을 다음과 같이 변경이이 문제를 해결할 것이라고 생각 : /me/photos?access_token=... : 심지어 options 인수가없는 경우

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

이제, 결과 URL의 모습.

+0

고마워요! 이제 다음과 같은 오류가 발생합니다 : myposts [1] $ page "$"다음에 오류 : $ 연산자가 원자 벡터에 유효하지 않습니다 – Lauren

+0

'facebook' 호출에서 반환 된 JSON 데이터를 보지 않았습니다. 나는 그것에 대해 논평 할 수 없다. 그러나 그것은 별개의 문제처럼 들립니다. JSON 데이터 (및'myposts [1]])를 다른 질문에 게시하고 현재 문제를 해결 한 경우이 대답을 수락 할 수 있습니까? –

+0

고마워요! 다음은 별도 질문에 대한 링크입니다. http://stackoverflow.com/questions/15069078/parsing-facebook-json-results – Lauren

관련 문제