Amazon API并不总是返回产品值。

时间:2017-03-29 22:16:27

标签: wordpress amazon-product-api

我正在Wordpress上构建一个网站,该网站将在输入Amazon ASIN后使用Amazon API来获取价格,标题和图片链接。

我使用我找到的脚本(粘贴在下面),但它只能在6次中有5次使用。 API经常会以0.00的价格返回价格并清空标题和图片链接。

我有什么遗失的吗?我准备使用CRON作业定期在我的网站上自动更新产品,但有了这个bug,一些产品将被“重置”到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;
        }
    }

?>

1 个答案:

答案 0 :(得分:0)

嗯,这似乎是亚马逊产品API的一个问题。如果你多次提出相同的请求,那么它应该总是工作或根本不工作。

您可以在Amazon Product API论坛上询问此问题:https://forums.aws.amazon.com/forum.jspa?forumID=9

您还可以更新代码,以便在Amazon API响应中缺少标题时不会更新产品价格