自定义谷歌工作表功能返回“非法形成的XML语法。(最后一行) - PHP脚本

时间:2016-11-16 00:22:53

标签: php xml google-sheets-api

我一直在尝试在google工作表中实现此功能,但是它仍然在第93行返回“非法形成的xml语法”,最后一行是“?>”。我附上了没有我个人信息的代码。

我将这段代码粘贴到Google工作表的代码编辑器中,编码为工具 - >脚本编辑器,有谁知道我需要改变什么?

如果有人可以帮我弄清楚我在将自定义功能代码实现到google工作表中的错误,我们将不胜感激!

代码开始:(抱歉,我无法弄清楚如何正确输入)

<?php


// Region code and Product ASIN
$response = getAmazonPrice("com", "B00KQPGRRE");

function getAmazonPrice($region, $asin) {

$xml = aws_signed_request($region, array(
    "Operation" => "ItemLookup",
    "ItemId" => $asin,
    "IncludeReviewsSummary" => False,
    "ResponseGroup" => "Medium,OfferSummary",
));

$item = $xml->Items->Item;
$title = htmlentities((string) $item->ItemAttributes->Title);
$url = htmlentities((string) $item->DetailPageURL);
$image = htmlentities((string) $item->MediumImage->URL);
$price = htmlentities((string) $item->OfferSummary->LowestNewPrice->Amount);
$code = htmlentities((string) $item->OfferSummary->LowestNewPrice->CurrencyCode);
$qty = htmlentities((string) $item->OfferSummary->TotalNew);

if ($qty !== "0") {
    $response = array(
        "code" => $code,
        "price" => number_format((float) ($price / 100), 2, '.', ''),
        "image" => $image,
        "url" => $url,
        "title" => $title
    );
}

return $response;
}

function getPage($url) {

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$html = curl_exec($curl);
curl_close($curl);
return $html;
}

function aws_signed_request($region, $params) {

$public_key = "PUBLIC_KEY";
$private_key = "PRIVATE_KEY";

$method = "GET";
$host = "ecs.amazonaws." . $region;
$host = "webservices.amazon." . $region;
$uri = "/onca/xml";

$params["Service"] = "AWSECommerceService";
$params["AssociateTag"] = "affiliate-20"; // Put your Affiliate Code here
$params["AWSAccessKeyId"] = $public_key;
$params["Timestamp"] = gmdate("Y-m-d\TH:i:s\Z");
$params["Version"] = "2011-08-01";

ksort($params);

$canonicalized_query = array();
foreach ($params as $param => $value) {
    $param = str_replace("%7E", "~", rawurlencode($param));
    $value = str_replace("%7E", "~", rawurlencode($value));
    $canonicalized_query[] = $param . "=" . $value;
}

$canonicalized_query = implode("&", $canonicalized_query);

$string_to_sign = $method . "\n" . $host . "\n" . $uri . "\n" . $canonicalized_query;
$signature = base64_encode(hash_hmac("sha256", $string_to_sign, $private_key, True));
$signature = str_replace("%7E", "~", rawurlencode($signature));

$request = "http://" . $host . $uri . "?" . $canonicalized_query . "&Signature=" . $signature;
$response = getPage($request);

var_dump($response);

$pxml = @simplexml_load_string($response);
if ($pxml === False) {
    return False;// no xml
} else {
    return $pxml;
}
}

?>

1 个答案:

答案 0 :(得分:0)

请尝试使用https提供规范网址,而不是使用http

HTTPS required for active content

中所述
  

"Active" content类似脚本,外部样式表和 XmlHttpRequests必须通过HTTPS加载,而不是HTTP

希望对你有用!