APIを使ってデータをとってきて整形してドン
APIを使ってデータを取ってきたい状況、あると思います。
そんな時はRCurlでゲットしてきて、JSON形式であればRJSONIO、XMLであればXMLを使えばよい。
自分の場合、JSONの方が扱いやすい印象があるのでJSONでとれる時はJSONでとることにしています。
以下コード例(リクルートのチラシ部!APIを使用)。
チラシ部API
http://webservice.recruit.co.jp/townmarket/reference.html
library(RCurl) library(RJSONIO) library(stringr) #これは使わなくてもよい。 APIkey <- "dousiyoumonaibokunitensigaoritekita" #そのサイト(今回はリクルート)から発行されたAPIキー URL <- sprintf("http://webservice.recruit.co.jp/townmarket/insertion/v1?city=13111&key=%s&format=json&count=100", APIkey) #API経由でデータをとってくる (ALLcount <- fromJSON(getURL(URL))$results$results_available) smp <- NULL for(n in seq(1, ALLcount, by=100)){ URL2 <- str_c(URL, "&start=", n) #paste関数でもよい。ただしその場合sep=""とすること smp0 <- fromJSON(getURL(URL2))$results$insertion smp <- c(smp, smp0) } #データをリスト形式からデータフレームに整形 #NULLが入っている項目を適宜埋める res <- NULL for(i in 1:length(smp)){ if(is.null(smp[[i]]$start_date))smp[[i]]$start_date <- "" if(is.null(smp[[i]]$end_date))smp[[i]]$end_date <- "" if(is.null(smp[[i]]$store$infomation))smp[[i]]$store$infomation <- "" if(is.null(smp[[i]]$store$store_hours))smp[[i]]$store$store_hours <- "" if(is.null(smp[[i]]$store$closed))smp[[i]]$store$closed <- "" if(is.null(smp[[i]]$store$parking))smp[[i]]$store$parking <- "" res0 <- unlist(smp[[i]]) res <- rbind(res, res0) } rownames(res) <- NULL #データフレームへの変換 #文字コードがUTF-8で返ってくるのでwindowsの場合CP932に変換 data <- data.frame(iconv(res, from="utf-8", to="CP932"), stringsAsFactors=FALSE)