2013-01-15 136 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