2017-03-29 4 views
1

Amazon ASINを入力した後、Amazon APIを使用して価格、タイトル、画像リンクを取得するサイトをWordpressに構築しています。Amazon APIは必ずしも製品の値を返すわけではありません。

私が見つけた(以下に貼り付けた)スクリプトで作業しましたが、6回のうち約5回しか動作しません。たびにAPIは価格を0.00として返し、空のタイトルと画像リンクを返します。

紛失しているものがありますか?私は定期的に私のウェブサイト上で製品を自動更新するCRON仕事を使用する準備ができましたが、このバグではいくつかの製品は0.00の価格にかなり "リセット"されます。

ご協力いただければ幸いです。ここ

コード:

<?php 

     $amazon_asin = get_post_meta(get_the_ID(), 'amazon_asin', true); 
     $response = getAmazonPrice("co.uk", $amazon_asin); 

    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 = get_option('public_key'); 
     $private_key = get_option('private_key'); 

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

     $params["Service"] = "AWSECommerceService"; 
     $params["AssociateTag"] = get_option('associate_tag'); // 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

まあ、Amazonの商品APIに問題があるようです。同じリクエストを何回か行う場合は、常に動作するか、まったく動作しなくてはなりません。

あなたは、問題についてのアマゾン商品APIフォーラムで尋ねることができます:https://forums.aws.amazon.com/forum.jspa?forumID=9

タイトルはアマゾンのAPIレスポンス

から欠落している場合、それは製品価格が更新されないので、あなたはまた、あなたのコードを更新することができます