Google PageSpeed Insights API屏幕快照到文件

问题描述 投票:5回答:3

我一直在尝试从API检索屏幕截图,但是当我解码图像并将其保存时,会得到损坏的图像。下面是我正在使用的代码。我创建了一个指向包含google响应的示例文件的tinyurl,如果您想对其进行测试。

$name = 'test';
$result = file_get_contents('http://tinyurl.com/q4smyod'); 
$result = json_decode($result, true);
$decoded=base64_decode($result['screenshot']['data']);
file_put_contents('img/'.$name.'.jpg',$decoded);
php base64 jpeg google-pagespeed
3个回答
14
投票

正如我的评论中提到的,问题是由使用php api时Google加密错误引起的。如果您遇到此问题,只需使用以下替换功能来修复编码。

$data    = str_replace('_','/',$result['screenshot']['data']);
$data    = str_replace('-','+',$data);
$decoded = base64_decode($data);

0
投票

这应该有助于您更接近目标。您没有定义名称,并且json_decoding有点奇怪:

<?php
     error_reporting(-1);
     ini_set('display_errors', 'On');
     $result = file_get_contents('http://tinyurl.com/q4smyod'); 
     $name = 'test2';
     $result = json_decode($result, true);

     $decoded = base64_encode($result['screenshot']['data']);
     file_put_contents($name.'.jpg',$decoded);

?>

-1
投票

目前,我正在使用Google Page Speed API通过Web URL捕获图像并将其保存到我指定的位置。这可以正常工作。请看一看。进行注释以易于理解。

import urllib2
import json
import base64
import sys
import requests
import os
import errno

#   The website's URL as an Input
site = #specify the URL here
imagePath = #specify your path to save the image

#   The Google API.  Remove "&strategy=mobile" for a desktop screenshot
api = "https://www.googleapis.com/pagespeedonline/v1/runPagespeed?screenshot=true&strategy=mobile&url=" + urllib2.quote(site)

#   Get the results from Google
try:
    site_data = json.load(urllib2.urlopen(api))
except urllib2.URLError:
    print "Unable to retreive data"
    sys.exit()

try:
    screenshot_encoded =  site_data['screenshot']['data']
except ValueError:
    print "Invalid JSON encountered."
    sys.exit()

#   Google has a weird way of encoding the Base64 data
screenshot_encoded = screenshot_encoded.replace("_", "/")
screenshot_encoded = screenshot_encoded.replace("-", "+")

#   Decode the Base64 data
screenshot_decoded = base64.b64decode(screenshot_encoded)

if not os.path.exists(os.path.dirname(impagepath)):
    try:
        os.makedirs(os.path.dirname(impagepath))
        except  OSError as exc:
            if exc.errno  != errno.EEXIST:
                raise

#   Save the file
with open(imagePath, 'w') as file_:
    file_.write(screenshot_decoded)
© www.soinside.com 2019 - 2024. All rights reserved.