この記事はSpeee Advent Calendar 2016 の3日目の記事です。
前日の記事は
@hatappiのJob管理をAirflowからKuroko2に乗り換えたら幸せになった - hatappiのブログ
です。
ディレクターの@cultivaです。
普段の仕事では海外向けのサービスのプロダクトマネジメントをしています。
概要
この記事では、
Google Spread Sheetに記載した複数URLの
Page Speed Insightsの点数を
Google Apps Scriptで取得する方法を紹介します。
PageSpeedInsightsとは?

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

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

GoogleはPageSpeedInsightのAPIを提供しています。
なお、25,000回/日のリクエスト制限があるので、注意してください。
PageSpeedInsightAPIをGoogleAppScriptから使用
下記のステップで行います。
- APIキーを取得
- GoogleAppScriptのコード作成(以下のサンプルをコピー)
APIキーの取得

Google Developer Consoleから取得します。詳しくはこちらから。
GoogleAppScriptのコード
コードは以下の通りです。
実際に使用する前に
var APIkey = 'API_KEY'
の'API_KEY'
の箇所を
API Consoleで取得したAPIキーで上書きしてください。
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);
}
}
アウトプット例

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

こちらの記事では、Page Speed Insightsの点数以外にもいくつもの指標を同時に取得する実装を紹介しています。
ですが、
今回の用途としては『点数のみ』で十分だったので、点数の取得のみに絞った実装を行いました。
加えて、スプレッドシートに記載したURLの点数を取得する運用にしたかったので、その運用にあわせた実装を行いました。