世界一やさしいデータ分析教室

オーブンソースデータなどWeb上から入手できるデータを用いて、RとPython両方使って分析した結果を書いていきます

ShinyとGoogle PageSpeed Insights API を連携してみる【後編】

本記事は、Shiny Advent Calendar 2018の19日目の記事です。


そして、Shiny100本ノックの第38弾です。

前回・前々回と、ShinyとGoogleのPageSpeed Insights APIを連携してみました。
www.randpy.tokyo
www.randpy.tokyo

ただデータを取得して表示するだけだと、ちょっと簡素なので、結果をダウンロードする機能を追加してみましょう。
といっても簡単で、前回使ったDT::renderDataTable()関数の拡張機能を使うだけです。

アプリケーションの完成イメージ

前回作ったものから大きく変化していませんが、以下のようなアプリケーションを作ります。
f:id:Np-Ur:20181224222637p:plain

右側の上部に、「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() のオプション機能については、以下でも紹介しているので、興味ある方は是非買ってみてください!
RとShinyで作るWebアプリケーション

RとShinyで作るWebアプリケーション

  • 作者: 梅津雄一,中野貴広
  • 出版社/メーカー: シーアンドアール研究所
  • 発売日: 2018/11/07
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

全部のコード合わせても50行に満たないです。改めてShinyの強力さを体験できました…。