2017-03-29 1 views
1

Ich baue eine Website auf Wordpress, die Amazon API verwenden wird, um Preis, Titel und Bild Link nach der Eingabe von Amazon ASIN zu greifen.Amazon API gibt nicht immer Produktwerte zurück.

Ich habe es mit dem Skript arbeiten I (klebte unten) gefunden haben, aber es funktioniert nur etwa 5 von 6 mal. Hin und wieder gibt die API den Preis als 0.00 zurück und leerer Titel und Bildlink.

Gibt es etwas, das mir fehlt? Ich war bereit, CRON-Job zu verwenden, um Produkte auf meiner Website regelmäßig zu aktualisieren, aber mit diesem Fehler werden einige Produkte auf "0.00" zurückgesetzt.

Jede Hilfe wäre willkommen.

Code hier:

<?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; 
     } 
    } 

?> 

Antwort

0

Nun, scheint es ein Problem mit Amazon Produkt-API zu sein. Wenn Sie dieselbe Anfrage mehrmals stellen, sollte es entweder immer funktionieren oder gar nicht funktionieren.

können Sie fragen, auf Amazon Produkt API-Foren über das Problem: https://forums.aws.amazon.com/forum.jspa?forumID=9

Sie können auch Ihren Code aktualisieren, damit es nicht den Produktpreis nicht aktualisiert, wenn der Titel von Amazon API-Antwort fehlt

Verwandte Themen