如何通过Node.js(非网页抓取)获取PageSpeed Insights报告ID及专属URL
如何通过Node.js获取PageSpeed Insights的专属报告URL/ID
核心结论
官方PageSpeed Insights v5 API并未在公开文档中明确提供网页报告的专属ID/URL,但可以通过API响应中的隐藏字段构造,无需网页抓取。以下是两种可行方案:
方案1:基于API响应字段手动构造报告URL
网页版报告的URL格式是固定的:https://pagespeed.web.dev/analysis/{编码后的目标URL}/{报告ID}
关键字段说明
- 编码后的目标URL:将原URL的
://和/替换为-,例如https://example.com转换为https-example-com - 报告ID:从API响应的
lighthouseResult.config.settings.psiId字段提取(该字段实际存在于v5 API响应中,未在公开文档标注)
Node.js示例代码
const fetch = require('node-fetch'); async function generatePSIReportUrl(targetUrl) { // 可添加API_KEY以提升请求限额,无KEY也可调用 const apiEndpoint = `https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=${encodeURIComponent(targetUrl)}`; const res = await fetch(apiEndpoint); const psiData = await res.json(); const reportId = psiData.lighthouseResult.config.settings.psiId; const encodedTargetUrl = targetUrl.replace(/https?:\/\//g, '').replace(/\//g, '-'); return `https://pagespeed.web.dev/analysis/${encodedTargetUrl}/${reportId}`; } // 调用示例 generatePSIReportUrl('https://example.com').then(reportUrl => { console.log('专属报告URL:', reportUrl); });
方案2:使用第三方包简化流程
使用GoogleChromeLabs维护的psi包,它封装了PSI API调用逻辑,同时可直接获取所需字段:
安装依赖
npm install psi
Node.js示例代码
const psi = require('psi'); async function generatePSIReportUrl(targetUrl) { const psiResult = await psi(targetUrl, { nokey: true, // 无API_KEY时启用,有KEY则替换为key: 'YOUR_API_KEY' strategy: 'mobile' // 可选,指定分析设备:desktop/mobile }); const reportId = psiResult.data.lighthouseResult.config.settings.psiId; const encodedTargetUrl = targetUrl.replace(/https?:\/\//g, '').replace(/\//g, '-'); return `https://pagespeed.web.dev/analysis/${encodedTargetUrl}/${reportId}`; } // 调用示例 generatePSIReportUrl('https://example.com').then(reportUrl => { console.log('专属报告URL:', reportUrl); });
注意事项
- 网页报告并非永久存储,Google会定期清理旧报告,短期(数周~数月)内可正常访问
- 若需长期留存报告,建议同时保存API返回的完整分析数据,或通过程序化方式导出PDF存档
内容的提问来源于stack exchange,提问作者Gabe Koleszar
相关产品推荐
相关产品推荐

