Google Spread Sheetに記載した複数URLのPage Speed Insightsの点数をGoogle Apps Scriptで取得する方法

この記事は[Speee Advent Calendar 2016](http://qiita.com/advent-calendar/2016/speee) の3日目の記事です。

前日の記事は
[@hatappi](https://twitter.com/hatappi)の[Job管理をAirflowからKuroko2に乗り換えたら幸せになった - hatappiのブログ](http://hatappi.hateblo.jp/entry/2016/12/02/085432)
です。

ディレクターの[@cultiva](https://github.com/cultiva)です。
普段の仕事では海外向けのサービスのプロダクトマネジメントをしています。

## 概要
この記事では、
Google Spread Sheetに記載した複数URLの
Page Speed Insightsの点数を
Google Apps Scriptで取得する方法を紹介します。

## PageSpeedInsightsとは？
<img width="1262" alt="スクリーンショット 2016-12-02 17.03.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/85902/bc7ec33b-7530-49cb-146e-e89cea3506a2.png">

https://developers.google.com/speed/pagespeed/insights/?hl=ja

Googleが提供しているWebページのパフォーマンス測定ツールです。
PCサイト画面とスマホサイト画面のそれぞれのパフォーマンスを測定してくれます。

## PageSpeedInsightsでのスコア取得例
<img width="1257" alt="スクリーンショット 2016-12-02 16.54.20.png" src="https://qiita-image-store.s3.amazonaws.com/0/85902/a7247727-75f1-0148-3812-d09087185159.png">

https://developers.google.com/speed/pagespeed/insights/?hl=ja&url=https%3A%2F%2Ftwitter.com%2F

入力窓にURLを入力して分析のボタンを押すと、
このように結果が表示されます。
しかも、修正方法まで提案してくれる優れものです。

## PageSpeedInsightsAPI
<img width="1060" alt="スクリーンショット 2016-12-02 16.54.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/85902/3f70446c-b9ba-26e4-ff67-1dfa45e740b1.png">

https://developers.google.com/speed/docs/insights/v2/getting-started

GoogleはPageSpeedInsightのAPIを提供しています。
なお、25,000回/日のリクエスト制限があるので、注意してください。

## PageSpeedInsightAPIをGoogleAppScriptから使用
下記のステップで行います。

- APIキーを取得
- GoogleAppScriptのコード作成（以下のサンプルをコピー）

## APIキーの取得

<img width="997" alt="d6f23731-15d6-2a34-128d-0288f9ea613e.png" src="https://qiita-image-store.s3.amazonaws.com/0/85902/884d9518-2f29-04f2-0a3b-e9f335571c78.png">

[Google Developer Console](https://console.developers.google.com)から取得します。詳しくは[こちら](https://developers.google.com/speed/docs/insights/v1/getting_started#auth)から。


## GoogleAppScriptのコード
コードは以下の通りです。

実際に使用する前に
`var APIkey = 'API_KEY'`の`'API_KEY'`の箇所を
API Consoleで取得したAPIキーで上書きしてください。

```PageSpeedInsightsScoreOnly.gs
function pageSpeed(url, strategy, locale) {
  //シートを扱う準備
  var myActiveSpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var myActiveSheet = myActiveSpreadSheet.getSheets()[0];

  for (var i=1; i < 10; i++) {      

    //URLを取得
    var url = myActiveSheet.getRange(i,1).getValue();
    
    //APIに投げる
    var APIkey = 'API_KEY';
    locale = locale || 'ja_JP'; // default is 'en'
    strategy = strategy || 'desktop'; // 'desktop' or 'mobile'
    var url = 'https://www.googleapis.com/pagespeedonline/v1/runPagespeed?url=' + url + '&key=' + APIkey + '&local=' + locale + '&strategy=' + strategy;
    
    try {
      var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true });
    }
    catch (err)
    {
      Logger.log(err);
      return(err);
    }
    
    var parsedResult = Utilities.jsonParse(response.getContentText());
        
    //一応ログを残す
    Logger.log(parsedResult.score);
    
    //書き込み
    myActiveSheet.getRange(i,2).setValue(parsedResult.score);
  }  
}
```

## アウトプット例
<img width="427" alt="スクリーンショット 2016-12-02 17.17.01.png" src="https://qiita-image-store.s3.amazonaws.com/0/85902/c351400d-83e5-eb0d-54f5-36f07624f974.png">

このようにA列にURLを入力しておいた状態で
GoogleAppScriptのコードを起動すると、
B列にPageSpeedInsightsの点数が表示されます。
※こちらのコードだとDesktopの点数が表示されます。

## 参考記事
<img width="1170" alt="スクリーンショット 2016-12-02 17.02.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/85902/b8f42846-eac1-75f7-8b01-1754b050b1f4.png">

http://qiita.com/takoratta/items/9b8d33970d07125e4f96

こちらの記事では、Page Speed Insightsの点数以外にもいくつもの指標を同時に取得する実装を紹介しています。

ですが、
今回の用途としては『点数のみ』で十分だったので、点数の取得のみに絞った実装を行いました。
加えて、スプレッドシートに記載したURLの点数を取得する運用にしたかったので、その運用にあわせた実装を行いました。