本記事は、Shiny Advent Calendar 2018の19日目の記事です。
そして、Shiny100本ノックの第38弾です。
前回・前々回と、ShinyとGoogleのPageSpeed Insights APIを連携してみました。
www.randpy.tokyo
www.randpy.tokyo
ただデータを取得して表示するだけだと、ちょっと簡素なので、結果をダウンロードする機能を追加してみましょう。
といっても簡単で、前回使ったDT::renderDataTable()関数の拡張機能を使うだけです。
アプリケーションの完成イメージ
前回作ったものから大きく変化していませんが、以下のようなアプリケーションを作ります。
右側の上部に、「CSV・Excel・PDF」ボタンが表示されています。欲しいデータ形式のボタンを押すことで、ダウンロードすることができます。
ソースコードを紹介
global.Rとui.Rは前回から変更がないので、貼り付けません。www.randpy.tokyo
server.Rのソースコード
shinyServer(function(input, output) {
result <- eventReactive(input$get_result, {
urls_split <- input$urls_text %>% strsplit(",")
results <- c()
for (i in 1:(urls_split[[1]] %>% length())){
request_url <- paste(pagespeed_url, gsub(" ", "", urls_split[[1]][i]), "&strategy=", input$device, "&key=", pagespeed_key, sep="")
tmpresult <- GET(request_url) %>% content()
results <- rbind(results, cbind(urls_split[[1]][i], tmpresult$ruleGroups$SPEED$score))
}
return(results)
})
output$result_table <- DT::renderDataTable(
result(), extensions = c('Buttons'),
options = list(dom = 'Blfrtip', buttons = c('csv', 'excel', 'pdf'))
)
})変更点は、DT::renderDataTable()関数内のみです。こちらで、拡張機能の"Buttons"を使っています。options内のbuttons には、ダウンロード形式を用意することができ、他にもcopy(クリップボードにコピー)やprint(印刷プレビュー画面に移動)を設定することができます。
まとめ
今回は、前回に引き続きPageSpeed Insights API を使ったアプリケーション制作をしてみました。DT::renderDataTable() のオプション機能については、以下でも紹介しているので、興味ある方は是非買ってみてください!
- 作者: 梅津雄一,中野貴広
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2018/11/07
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
全部のコード合わせても50行に満たないです。改めてShinyの強力さを体験できました…。