I'm having a few issues with the Pagespeed API. I'm using CURL to handle the JSON like so:
$ch = curl_init("https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url=$url&key=KEY&strategy=mobile");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$curl_response = curl_exec($ch);
$json = json_decode($curl_response);
Outputting the info is fine from the Lighthouse metrics, ie:
echo $json->lighthouseResult->audits->metrics->details->items[0]->firstContentfulPaint;
But using anything outside Lighthouse I'm having an issue as many keys are hyphenated, ie:
"lighthouseResult": {
"requestedUrl": "https://codepen.io/",
"finalUrl": "https://codepen.io/",
"lighthouseVersion": "7.1.0",
"userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/88.0.4324.202 Safari/537.36",
"fetchTime": "2021-03-25T12:50:30.855Z",
"environment": {
"networkUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4143.7 Safari/537.36 Chrome-Lighthouse",
"hostUserAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/88.0.4324.202 Safari/537.36",
"benchmarkIndex": 993
},
"runWarnings": [],
"configSettings": {
"emulatedFormFactor": "desktop",
"formFactor": "desktop",
"locale": "en-US",
"onlyCategories": [
"performance"
],
"channel": "lr"
},
"audits": {
"uses-rel-preload": {
"id": "uses-rel-preload",
"title": "Preload key requests",
"description": "Consider using `\u003clink rel=preload\u003e` to prioritize fetching resources that are currently requested later in page load. [Learn more](https://web.dev/uses-rel-preload/).",
"score": 0.48,
"scoreDisplayMode": "numeric",
"displayValue": "Potential savings of 950 ms",
"details": {
"type": "opportunity",
"items": [
{
"wastedMs": 950,
"url": "https://codepen.io/assets/packs/css/Homepage-Anon-8d383add.chunk.css"
},
{
"url": "https://cpwebassets.codepen.io/assets/packs/css/Homepage-Anon-8d383add.chunk.css",
"wastedMs": 500
}
],
"overallSavingsMs": 950,
"headings": [
{
"label": "URL",
"valueType": "url",
"key": "url"
},
{
"label": "Potential Savings",
"key": "wastedMs",
"valueType": "timespanMs"
}
]
},
"numericValue": 950
},
"uses-responsive-images": {
"id": "uses-responsive-images",
"title": "Properly size images",
"description": "Serve images that are appropriately-sized to save cellular data and improve load time. [Learn more](https://web.dev/uses-responsive-images/).",
"score": 0.65,
"scoreDisplayMode": "numeric",
"displayValue": "Potential savings of 611 KiB",
"details": {
"items": [
{
"totalBytes": 218372,
"wastedPercent": 72.994829780464528,
"url": "https://cpwebassets.codepen.io/assets/packs/editor-support-9cc33b6268c0a6c897033028084e1851.png",
"wastedBytes": 159400
},
{
"wastedBytes": 129352,
"wastedPercent": 72.994829780464528,
"totalBytes": 177207,
"url": "https://cpwebassets.codepen.io/assets/packs/editor-assets-6a081a7c8ff72da526846f3c8f8ae91c.png"
},
{
"totalBytes": 133650,
"wastedBytes": 87951,
"wastedPercent": 65.807290055077658,
"url": "https://cpwebassets.codepen.io/assets/packs/editor-embed-eae2ee445ef0f63ee8fc7f175858e9d9.png"
},
{
"url": "https://cpwebassets.codepen.io/assets/packs/editor-projects-a0d6a9e16cf1c2c46219ef3d49370823.png",
"wastedBytes": 83946,
"wastedPercent": 65.795548786132358,
"totalBytes": 127586
},
{
"wastedBytes": 73120,
"wastedPercent": 72.994829780464528,
"totalBytes": 100172,
"url": "https://cpwebassets.codepen.io/assets/packs/editor-privacy-e542bc22ce324502eb727577083eeb61.png"
},
{
"url": "https://cpwebassets.codepen.io/assets/packs/greensock-logo-9db91ff4c4a50faa1690d4f3d7ffca6e.png",
"wastedPercent": 93.017321373337452,
"wastedBytes": 50970,
"totalBytes": 54796
},
{
"wastedBytes": 34189,
"wastedPercent": 65.783751672863872,
"url": "https://cpwebassets.codepen.io/assets/packs/editor-collab-90815f9b83fcbdbd3ef7df4573ed9b57.png",
"totalBytes": 51972
},
{
"wastedPercent": 75,
"url": "https://cdn4.buysellads.net/uu/1/82455/1609889978-aws_carbon.jpg",
"totalBytes": 9457,
"wastedBytes": 7093
}
],
"type": "opportunity",
"overallSavingsBytes": 626021,
"overallSavingsMs": 480,
"headings": [
{
"key": "url",
"valueType": "thumbnail"
},
{
"valueType": "url",
"label": "URL",
"key": "url"
},
{
"key": "totalBytes",
"valueType": "bytes",
"label": "Resource Size"
},
{
"label": "Potential Savings",
"key": "wastedBytes",
"valueType": "bytes"
}
]
},
"numericValue": 480
},
},
}
I've tried altering the query like:
$json->lighthouseResult->audits['uses-responsive-images']->displayValue;
$json->lighthouseResult->audits->['uses-responsive-images']->displayValue;
But can't get a result or just get a PHP error. I'm probably missing something easy but for the life of me I can't find it.
Slightly contrived example...but it shows how to address an object with hyphens in the name.
//build a object with
$o = new stdClass();
$o->aa = new stdClass();
$o->aa->{'z-z-z'} = new stdClass();
$o->aa->{'z-z-z'}->bb = new stdClass();
$o->aa->{'z-z-z'}->bb->count = 100;
// check what it actually looks like
print_r($o);
// Address the count
echo $o->aa->{'z-z-z'}->bb->count;
RESULT
stdClass Object
(
[aa] => stdClass Object
(
[z-z-z] => stdClass Object
(
[bb] => stdClass Object
(
[count] => 100
)
)
)
)
100
And looking closer at your data i think you got lost somewhere, try
$json->lighthouseResult
->{'uses-responsive-images'}
->{'uses-rel-preload'}
->displayValue