2017-03-29 12 views
1

아마존 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

글쎄, 아마존 제품 API에 문제가 될 것으로 보인다. 동일한 요청을 여러 번하면 항상 작동하거나 전혀 작동하지 않아야합니다.

당신은 문제에 대해 아마존 제품 API 포럼에 요청할 수 있습니다 : 제목 아마존 API 응답에서 누락 된 경우는 제품 가격을 업데이트하지 않도록 https://forums.aws.amazon.com/forum.jspa?forumID=9

당신은 또한 당신의 코드를 업데이트 할 수 있습니다