2014年のTokyoR(第36回から第43回)で発表された資料の閲覧数ランキングを作る。

まず、勉強会のまとめが書かれた素敵なブログからリンクアドレスを抽出する。

library(rvest)
library(pipeR)
library(dplyr)
# リンクアドレスを抽出する関数を準備
getURLs <- function(U){
  trg <- html(U)
  res <- data.frame(
    title = trg %>>% html_nodes("a") %>>% html_text(),
    url = trg %>>% html_nodes("a") %>>% html_attr("href"),
    stringsAsFactors=FALSE
  ) 
  return(res)
}

trg_url1 <- "http://estrellita.hatenablog.com/archive/2014" #2014年の記事アーカイブ
data_article <- getURLs(trg_url1)

必要なURLのみ抽出する。

いったん出力して41回以降のURLを手作業で追加しておく。

data_article$title <- gsub("[[:space:]]", "", data_article$title)
article_urls <- data_article %>>% filter(grepl("R勉強会", title), !duplicated(.)) %>>% `[`(,"url")
article_urls <- article_urls[-c(1:3)] #第41回以降は記事の仕様が変わっているのでここでは無視
data_urls <- NULL
for(article_url in article_urls){
  tmp <- getURLs(article_url) %>>% filter(grepl("slideshare.net/.+/", url))
  data_urls <- c(data_urls, tmp$url)  
  Sys.sleep(1) # 優しさ
}
write.csv(data_urls, "result.csv", row.names=FALSE)

記事から抽出したURLをslideshareパッケージを用いてslideshareのAPIに投げて閲覧数を取得する。

その際、APIを使う際はAPI key等が必要なので申請して取得しておくこと。

http://www.slideshare.net/developers

さらに取得したデータからさらに2014/2/22以降の資料を抽出する。

# devtools::install_github("dichika/slideshare)
dat <- read.csv("result.csv", as.is=TRUE) # 41回以降のURLを追加したデータを読み込む

library(slideshare)
key <- "YOUR KEY"
secret <- "YOUR SECRET" 
test <- Slideshare$new(apikey=key,sharedsecret=secret)

data_slides <- NULL
for(URL in dat$x){
  data_slides <- rbind(data_slides, test$getSlideshow(URL)[,c("Title","Username","URL","NumViews","Created")])
  Sys.sleep(2)
}

data_slides$NumViews <- as.numeric(data_slides$NumViews)
data_slides <- data_slides %>>% filter(Created >= "2014-02-22") %>>% arrange(desc(NumViews))

以下がランキング結果。

data_slides$Rank <- seq(nrow(data_slides)) # 順位を付加する

library(googleVis)
op <- options(gvis.plot.tag='chart') # これを入れないとplotされない
PopTable <- gvisTable(data = data_slides[,c("Rank","Title","Username","NumViews","URL")], 
                      formats = list(NumViews="#,###"))
plot(PopTable)