Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

この記事はSpeee Advent Calendar 2016 の3日目の記事です。

前日の記事は
@hatappiJob管理をAirflowからKuroko2に乗り換えたら幸せになった - hatappiのブログ
です。

ディレクターの@cultivaです。
普段の仕事では海外向けのサービスのプロダクトマネジメントをしています。

概要

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

PageSpeedInsightsとは?

スクリーンショット 2016-12-02 17.03.34.png

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

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

PageSpeedInsightsでのスコア取得例

スクリーンショット 2016-12-02 16.54.20.png

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

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

PageSpeedInsightsAPI

スクリーンショット 2016-12-02 16.54.57.png

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

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

PageSpeedInsightAPIをGoogleAppScriptから使用

下記のステップで行います。

  • APIキーを取得
  • GoogleAppScriptのコード作成(以下のサンプルをコピー)

APIキーの取得

d6f23731-15d6-2a34-128d-0288f9ea613e.png

Google Developer Consoleから取得します。詳しくはこちらから。

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);
  }  
}

アウトプット例

スクリーンショット 2016-12-02 17.17.01.png

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

参考記事

スクリーンショット 2016-12-02 17.02.58.png

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

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away