2016-11-16 5 views
0

私はこの機能をGoogleシートに実装しようとしていますが、93行目の"不正な形式のXML構文 "カスタムのGoogleシート関数を返す "最後に行なわれたXML構文(最後の行) - PHPスクリプト

このコードを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; 
} 
} 

?> 
+0

おそらく、スクリプトの最後に?>は必要ありません。 – randominstanceOfLivingThing

+0

お返事ありがとう!編集のために! スクリプトの最後に?>を削除しようとしましたが、構文エラーではない前に}を返します。このコードをGoogleシートのコードエディタに貼り付けます。ツール - >スクリプトエディタ – pleasepleasehelpme

+0

スクリプトがhtml内にある場合は、が必要です。しかし、それはPHPインタープリタによって実行され、あなたはそれを必要としません。コードを削除した後にコードが機能しましたか?> – randominstanceOfLivingThing

答えて

0

https代わりのhttpを使用して正規のURLを提供してみてください。

スクリプト、外部スタイルシート、およびXmlHttpRequestsでのようにHTTPS required for active content

"Active" contentで述べたようにはHTTPSではなく、HTTPの上にロードする必要があります。

希望はあなたのために働く!

+0

あなたの返信ありがとう!私はコード内でhttpsに変更し、それでも動作しませんでした。私はそれが私のスクリプトで別の問題を解決したと思う。私はここから何をすべきか分からず、どんな助けも非常に感謝しています。私はこの世にはとても新しい – pleasepleasehelpme

関連する問題