如何通过Google Sheets脚本调用PageSpeed Insights API批量查询多URL性能数据
批量查询修改方案
修改思路
- 将原来的单个URL变量替换为URL数组,填入所有需要查询的目标URL
- 新增循环逻辑遍历数组中的每一个URL,依次执行性能查询和结果写入操作
- 新增单URL错误捕获,避免单个URL查询失败导致整个批量任务中断
修改后完整代码
var pageSpeedApiKey = '你的API KEY'; // 把需要查询的所有URL放到这个数组里,用英文逗号分隔,每个URL用引号包裹 var pageSpeedMonitorUrls = [ 'https://www.han.nl/', 'https://example.com/', 'https://test.com/' // 可以继续往后加更多URL ]; function monitor() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getSheetByName('results'); var date = Utilities.formatDate(new Date(), 'GMT', 'yyyy-MM-dd'); // 遍历所有URL pageSpeedMonitorUrls.forEach(function(url) { try { var desktop = callPageSpeed('desktop', url); var mobile = callPageSpeed('mobile', url); var desktopVitals = getVitals(desktop); var mobileVitals = getVitals(mobile); sheet.appendRow([ date, url, desktop.lighthouseResult.categories.performance.score * 100, desktopVitals.lcp == -1 ? ' ' : desktopVitals.lcp, desktopVitals.fid == -1 ? ' ' : desktopVitals.fid, desktopVitals.cls == -1 ? ' ' : desktopVitals.cls, mobile.lighthouseResult.categories.performance.score * 100, mobileVitals.lcp == -1 ? ' ' : mobileVitals.lcp, mobileVitals.fid == -1 ? ' ' : mobileVitals.fid, mobileVitals.cls == -1 ? ' ' : mobileVitals.cls ]); // 这里可以调整延迟时间避免API请求超限,不需要可以直接删除 Utilities.sleep(1000); } catch (e) { // 单个URL查询失败时打印错误日志,不影响其他URL执行 console.error('URL查询失败: ' + url + ',错误信息:' + e.toString()); } }); } function callPageSpeed(strategy, url) { var pageSpeedUrl = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=' + encodeURIComponent(url) + '&key=' + pageSpeedApiKey + '&strategy=' + strategy; var response = UrlFetchApp.fetch(pageSpeedUrl); var json = response.getContentText(); return JSON.parse(json); } function getVitals(result) { var lcp = -1, fid = -1, cls = -1; try { lcp = result.originLoadingExperience.metrics.LARGEST_CONTENTFUL_PAINT_MS.percentile / 1000; } catch {} try { fid = result.originLoadingExperience.metrics.FIRST_INPUT_DELAY_MS.percentile / 1000; } catch {} try { cls = result.originLoadingExperience.metrics.CUMULATIVE_LAYOUT_SHIFT_SCORE.percentile; } catch {} return { "cls":cls, "fid":fid, "lcp":lcp }; }
注意事项
- 替换代码开头的
你的API KEY为你自己的实际API密钥 - 确保Google Sheets中存在名为
results的工作表,否则会报错 - URL数量较多时可适当调高
sleep的时间参数,避免触发API频率限制 - 脚本执行后所有URL的查询结果会按行追加写入
results工作表
内容的提问来源于stack exchange,提问作者Guus Witjes
相关产品推荐
相关产品推荐

