質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1020閲覧

Google Apps Scriptを用いて複数サイトのページスピードの自動集計を行う

yuhki

総合スコア2

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/06/24 02:46

ページスピードインサイトで複数サイトを自動でスコアを算出させたいです。
イメージとしては、スプレッドシートのトリガーとなるボタンをクリックしたらスプレッドシートに事前に明記したURLをスコアを集計するイメージです。

function pageSpeed(vStrategy, vResultOutputCol) { var APIkey = 'Google API Console APIキー'; //シートを扱う準備 var myActiveSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); var myActiveSheet = myActiveSpreadSheet.getSheetByName('speed');//計測結果を出力するシート名 var cStartRow = 3;//計測対象url一覧の開始行 var cUrlCol = 3;//計測対象url一覧の列 var locale = locale || 'ja_JP'; // default is 'en' var i = cStartRow; while(true){ var url = myActiveSheet.getRange(i,cUrlCol).getValue();//URLを取得 if(url.indexOf('http') == -1){//対象文字列が含まれていない場合 if(url === ''){//文字列が空の場合 break;//ループ終了 }else{ i = i + 1; continue;//次のループ } } var url = 'https://www.googleapis.com/pagespeedonline/v1/runPagespeed?url=' + url + '&key=' + APIkey + '&local=' + locale + '&strategy=' + vStrategy; 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,vResultOutputCol).setValue(parsedResult.score);//書き込み i = i + 1; } } function pageSpeed_PC(){ pageSpeed('desktop', 4); } function pageSpeed_SP(){ pageSpeed('mobile', 5); }

こちらを実行すると、、以下のようなエラーが表示され、

Exception: Invalid JSON string.

pageSpeed @ コード.gs:37

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

・パラメータが誤っていると思います。
&local= → &locale=

(追記:urlはv5にする)

diff

1var url = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=' + url 2-  + '&key=' + APIkey + '&local=' + locale + '&strategy=' + vStrategy; 3 4+  + '&key=' + APIkey + '&locale=' + locale + '&strategy=' + vStrategy;

追記:
どのような結果を得たいのかによりますが、たとえばスコアだけを出すなら下記のようなコードになるかと思います。

(スコア=下記コードの「parsedResult.lighthouseResult.categories.performance.score」の部分)

返ってくるデータ(レスポンス)の構造はhttps://developers.google.com/speed/docs/insights/v5/reference/pagespeedapi/runpagespeed?hl=ja#response
を見てください。

function pageSpeed(vStrategy, vResultOutputCol) { var APIkey = 'APIキー' //シートを扱う準備 var myActiveSpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); var myActiveSheet = myActiveSpreadSheet.getSheetByName('speed');//計測結果を出力するシート名 var cStartRow = 3;//計測対象url一覧の開始行 var cUrlCol = 3;//計測対象url一覧の列 var locale = locale || 'ja_JP'; // default is 'en' var i = cStartRow; while(true){ var url = myActiveSheet.getRange(i,cUrlCol).getValue();//URLを取得 if(url.indexOf('http') == -1){//対象文字列が含まれていない場合 if(url === ''){//文字列が空の場合 break;//ループ終了 }else{ i = i + 1; continue;//次のループ } } // v5にする。 var url = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=' + url + '&key=' + APIkey + '&locale=' + locale + '&strategy=' + vStrategy; try { var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true }); } catch (err) { Logger.log(err); return(err); } //Logger.log(response.getContentText()) var parsedResult = Utilities.jsonParse(response.getContentText()); Logger.log(parsedResult.lighthouseResult.categories.performance.score);//一応ログを残す myActiveSheet.getRange(i,vResultOutputCol).setValue(parsedResult.lighthouseResult.categories.performance.score);//書き込み i = i + 1; } } function pageSpeed_PC(){ pageSpeed('desktop', 4); } function pageSpeed_SP(){ pageSpeed('mobile', 5); }

投稿2021/06/24 10:56

編集2021/06/25 09:35
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuhki

2021/06/25 00:23

qnoirさん有難うございます! …凡ミスお恥ずかしい限りです。。 こちらを修正して改めて実行してみたのですが、、 Exception: Invalid JSON string. pageSpeed @ コード.gs:37 こちらのエラーが出てしまいます。。
退会済みユーザー

退会済みユーザー

2021/06/25 07:35

APIキーが誤っていて有効なjsonが取得できていない可能性がありますが、具体的なところはどのようなデータが返ってきているか見ないとわかりません。 var response = UrlFetchApp.fetch(url, {muteHttpExceptions: true }); の直後に Logger.log(response.getContentText()); という行を追加して実行した場合、 ログにどのようなデータが表示されるでしょうか。
yuhki

2021/06/25 09:08

お忙しいなかご確認等ありがとうございます! APIキーは違う形で活用した場合に利用することができたので…恐らくそちらは問題がない認識でおります。。 ただいまご提案いただいた形で出力すると以下のようになります。 【18:06:15 情報】 <!DOCTYPE html> <html lang=en> <meta charset=utf-8> <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"> <title>Error 404 (Not Found)!!1</title> <style> *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px} </style> <a href=//www.google.com/><span id=logo aria-label=Google></span></a> <p><b>404.</b> <ins>That’s an error.</ins> <p>The requested URL <code>/pagespeedonline/v1/runPagespeed</code> was not found on this server. <ins>That’s all we know.</ins> 【18:06:17 エラー】 Exception: Invalid JSON string. pageSpeed @ コード.gs:39
退会済みユーザー

退会済みユーザー

2021/06/25 09:34 編集

var url = 'https://www.googleapis.com/pagespeedonline/v1/runPagespeed の「v1」を「v5」に変えた場合どうなるでしょうか? あと回答に全体のコードを追加しました。この場合スコア値を取得しています。
yuhki

2021/06/25 09:51

迅速な対応いただきありがとうございます!! 試してみたところ、、 【18:46:36 エラー】 TypeError: Cannot read property 'categories' of undefined pageSpeed @ コード.gs:37 となりました。。これはプロパティが定義されていないってことでしょうか…? 初心者なもので、、デバックなどもほぼできないものでご教授いただけますと幸いです。。
退会済みユーザー

退会済みユーザー

2021/06/25 10:23 編集

一番長いコードの関数(pageSpeed()関数)を実行していませんか? pageSpeed()関数単体では、vStrategy, vResultOutputCol引数がundefinedで実行されるため、エラーがでます。 下の2つのいずれか(pageSpeed_PC()またはpageSpeed_SP())を実行しないと正しい結果は出ないと思います。
yuhki

2021/06/25 13:23

していました…! そういうことだったのですね。。 何から何まで真摯にご対応いただき、本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問