LoginSignup
4
1

More than 1 year has passed since last update.

GASでPageSpeed Insights APIを叩いて結果をSpreadsheetに出力する

Last updated at Posted at 2022-07-24

PageSpeedInsightsとは

Googleのツールのひとつ。
webページの読み込みスピード等の、パフォーマンスのスコアを計測することが出来ます。
対象ページのurlを入力することで計測が可能です。

Googleの検索順位の指標、CoreWebVitalsの対策にもなる改善項目を取得できるため、SEO対策に有効です。

PageSpeedInsights API とは

Google純正のAPI。
PageSpeedInsightsの結果をjson形式で取得できます。

今回はこちらを使用して、取得結果をGoogleSpreadSheetに書き込みたいと思います。

イメージとソースコード

イメージ1:url入力欄と実行ボタン

スクリーンショット 2022-07-24 8.51.44.png

イメージ2:結果の出力

スクリーンショット 2022-07-25 0.55.01.png

※分かりやすいようにヘッダーに色をつけています。

ソースコード

使用言語:GoogleAppScript

function myFunction() {
  // 対象のスプレッドシートを取得
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  // 読み込むシート
  var read_sheet = ss.getSheetByName("実行")
  // 書き込むシート
  var write_pc_sheet = ss.getSheetByName("結果-PC")
  var write_sp_sheet = ss.getSheetByName("結果-SP")

  // 対象のurlを取得
  var range = read_sheet.getRange("B3");
  var url = range.getValue();

  var arrPc = getResult(url, "desktop"); // PCの結果を取得
  var arrSp = getResult(url, "mobile");  // SPの結果を取得

  writeResult(write_pc_sheet, arrPc); // PCの結果を書き込む
  writeResult(write_sp_sheet, arrSp); // SPの結果を書き込む
}

function getResult(url, strategy){
  // PageSpeed Insights APIを実行
  var result = UrlFetchApp.fetch(
    'https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=' 
    + url // 計測対象のurl
    + "&locale=ja" // ローカライズ
    + "&strategy=" + strategy // 端末の指定
  );
  // JSONの結果を配列にする
  return JSON.parse(result);
}

function writeResult(sheet, arr){
  // パフォーマンス
  var performance = arr["lighthouseResult"]["categories"]["performance"];
  // ヘッダ
  sheet.appendRow([
    "id", 
    "title", 
    "score"
  ]);
  // 値
  sheet.appendRow([
    performance["id"],
    performance["title"],
    performance["score"]
  ]);


  // 改善項目・内容を書き込む
  // シートの最終列を取得
  var lastRow = sheet.getLastRow();
  // 最終列から2行空けて書き込み
  sheet.getRange(lastRow+2, 1, 1, 3).setValues([[
    "id",
    "title",
    "description"
  ]]);

  // 改善項目(オブジェクト)
  var audits = arr["lighthouseResult"]["audits"];
  // 一行ずつ書き込む
  Object.keys(audits).forEach(function (key) {
    var audit = audits[key];
    if (audit["id"] === false || audit["title"] === false || audit["description"] === false) {
      return;
    }
    sheet.appendRow([
      audit["id"],
      audit["title"],
      audit["description"]
    ]);
  });
}

注意

  • GASのデフォルト仕様では、1分間のクエリ実行回数に制限が掛かっています。こちらのソースコードをそのまま使用しても、制限に引っ掛かり失敗する可能性があります。
    • Googleに申請することで上限を増やすことが出来るようです。
4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1