2013-01-15 137 views
2

我想抓住使用Topsy Otter api的推文,所以我可以對它進行一些數據挖掘以供我的論文使用。JSON到R數據挖掘

到目前爲止,我有:

library(RJSONIO) 
library(RCurl) 
tweet_data <- getURL("http://otter.topsy.com/search.json?q=PSN&mintime=1301634000&perpage=10&maxtime=1304226000&apikey=xxx") 
fromJSON(tweet_data) 

工作正常。然而,現在我想從這個文件'content'和'trackback_date'返回一些細節。我似乎無法弄清楚 - 我曾嘗試過幾個例子,但無法提取我想要的東西。

這是我到目前爲止已經試過:

trackback_date <- lapply(tweet_data$result, function(x){x$trackback_date}) 

content <- lapply(tweet_data$result, function(x){x$content}) 

任何幫助將不勝感激,謝謝。

編輯 我也曾嘗試:

library("rjson") 
# use rjson 

tweet_data <- fromJSON(paste(readLines("http://otter.topsy.com/search.json?q=PSN&mintime=1301634000&perpage=10&maxtime=1304226000&apikey=xxx"), collapse="")) 
# get a data from Topsy Otter API 
# convert JSON data into R object using fromJSON() 

trackback_date <- lapply(tweet_data$result, function(x){x$trackback_date}) 

content <- lapply(tweet_data$result, function(x){x$content}) 

回答

5

玩轉水獺API響應的基本處理:

library(RJSONIO) 
library(RCurl) 
tweet_data <- getURL("http://otter.topsy.com/search.json?q=PSN&mintime=1301634000&perpage=10&maxtime=1304226000&apikey=xxx") 

# 
# Addition to your code 
# 
tweets <- fromJSON(tweet_data)$response$list 
content <- sapply(tweets, function(x) x$content) 
trackback_date <- sapply(tweets, function(x) x$trackback_date) 

編輯:處理多頁

功能得到100個項目從指定的page

pagetweets <- function(page){ 
    url <- paste("http://otter.topsy.com/search.json?q=PSN&mintime=1301634000&page=",page, 
       "&perpage=100&maxtime=1304226000&apikey=xxx", 
       collapse="", sep="") 
    tweet_data <- getURL(url) 
    fromJSON(tweet_data)$response$list 
} 

現在,我們可以把它應用到多個頁面:

tweets <- unlist(lapply(1:10, pagetweets), recursive=F) 

而且,瞧,這個代碼:

content <- sapply(tweets, function(x) x$content) 
trackback_date <- sapply(tweets, function(x) x$trackback_date) 

回報你1000條記錄。

+0

現貨。謝謝。你能解釋一下這裏發生了什麼嗎? – Coffeee

+0

'fromJSON'處理'tweet_data'並返回'list'有兩個元素:'request'和'response'。反過來,'response'是一個包含8個元素的列表,我們對'list'感興趣。因此,'fromJSON(tweet_data)$ response $ list'向我們提供了原始數據的列表。然後我們用'sapply'提取它的元素。 – redmode

+0

謝謝雷德蒙德。我該如何去做大量的「獲得」? I.e每個geturl都會返回100條推文,如果我想這樣做10次以獲得1000條推文,我會如何將它們全部添加到一個'tweet_data'中? – Coffeee