Quantcast
Channel: Active questions tagged rest - Stack Overflow
Viewing all articles
Browse latest Browse all 3753

Amazon Product Advertising API does not return rating and reviews

$
0
0

I am exploring the Amazon Product advertisement API(PA 5). I am using the GetItems method. The API does not return ratings and reviews count. I have used amazon's scratchpad platform as well as PHP code for doing the same but no luck. I only got generic responses from Amazon's customer support as they say that one has to refer to online forums regarding this and they cannot provide a solution/explanation as to why the following data is not being returned.

Here is the JSON response I am getting with scratchpad.

{"ItemIds": ["B085WLFSJ1" ],"Resources": ["CustomerReviews.Count" ],"PartnerType": "Associates","Marketplace": "www.amazon.com","Operation": "GetItems"}

Here is the PHP code I am using

<?php$serviceName="ProductAdvertisingAPI";$region="us-east-1";$accessKey="myaccesskey";$secretKey="mysecretkey";$payload="{"        ." \"ItemIds\": ["        ."  \"B083JKTMYQ\""        ." ],"        ." \"Resources\": ["        ."  \"CustomerReviews.Count\","        ."  \"CustomerReviews.StarRating\","        ."  \"Images.Primary.Small\","        ."  \"Images.Primary.Medium\","        ."  \"Images.Primary.Large\","        ."  \"Images.Variants.Small\","        ."  \"Images.Variants.Medium\","        ."  \"Images.Variants.Large\""        ." ],"        ." \"PartnerTag\": \"sleephall08-20\","        ." \"PartnerType\": \"Associates\","        ." \"Marketplace\": \"www.amazon.com\""        ."}";$host="webservices.amazon.com";$uriPath="/paapi5/getitems";$awsv4 = new AwsV4 ($accessKey, $secretKey);$awsv4->setRegionName($region);$awsv4->setServiceName($serviceName);$awsv4->setPath ($uriPath);$awsv4->setPayload ($payload);$awsv4->setRequestMethod ("POST");$awsv4->addHeader ('content-encoding', 'amz-1.0');$awsv4->addHeader ('content-type', 'application/json; charset=utf-8');$awsv4->addHeader ('host', $host);$awsv4->addHeader ('x-amz-target', 'com.amazon.paapi5.v1.ProductAdvertisingAPIv1.GetItems');$headers = $awsv4->getHeaders ();$headerString = "";foreach ( $headers as $key => $value ) {    $headerString .= $key . ': ' . $value . "\r\n";}$params = array ('http' => array ('header' => $headerString,'method' => 'POST','content' => $payload        )    );$stream = stream_context_create ( $params );$fp = @fopen ( 'https://'.$host.$uriPath, 'rb', false, $stream );if (! $fp) {    throw new Exception ( "Exception Occured" );}$response = @stream_get_contents ( $fp );if ($response === false) {    throw new Exception ( "Exception Occured" );}echo $response;class AwsV4 {    private $accessKey = null;    private $secretKey = null;    private $path = null;    private $regionName = null;    private $serviceName = null;    private $httpMethodName = null;    private $queryParametes = array ();    private $awsHeaders = array ();    private $payload = "";    private $HMACAlgorithm = "AWS4-HMAC-SHA256";    private $aws4Request = "aws4_request";    private $strSignedHeader = null;    private $xAmzDate = null;    private $currentDate = null;    public function __construct($accessKey, $secretKey) {        $this->accessKey = $accessKey;        $this->secretKey = $secretKey;        $this->xAmzDate = $this->getTimeStamp ();        $this->currentDate = $this->getDate ();    }    function setPath($path) {        $this->path = $path;    }    function setServiceName($serviceName) {        $this->serviceName = $serviceName;    }    function setRegionName($regionName) {        $this->regionName = $regionName;    }    function setPayload($payload) {        $this->payload = $payload;    }    function setRequestMethod($method) {        $this->httpMethodName = $method;    }    function addHeader($headerName, $headerValue) {        $this->awsHeaders [$headerName] = $headerValue;    }    private function prepareCanonicalRequest() {        $canonicalURL = "";        $canonicalURL .= $this->httpMethodName . "\n";        $canonicalURL .= $this->path . "\n" . "\n";        $signedHeaders = '';        foreach ( $this->awsHeaders as $key => $value ) {            $signedHeaders .= $key . ";";            $canonicalURL .= $key . ":" . $value . "\n";        }        $canonicalURL .= "\n";        $this->strSignedHeader = substr ( $signedHeaders, 0, - 1 );        $canonicalURL .= $this->strSignedHeader . "\n";        $canonicalURL .= $this->generateHex ( $this->payload );        return $canonicalURL;    }    private function prepareStringToSign($canonicalURL) {        $stringToSign = '';        $stringToSign .= $this->HMACAlgorithm . "\n";        $stringToSign .= $this->xAmzDate . "\n";        $stringToSign .= $this->currentDate . "/" . $this->regionName . "/" . $this->serviceName . "/" . $this->aws4Request . "\n";        $stringToSign .= $this->generateHex ( $canonicalURL );        return $stringToSign;    }    private function calculateSignature($stringToSign) {        $signatureKey = $this->getSignatureKey ( $this->secretKey, $this->currentDate, $this->regionName, $this->serviceName );        $signature = hash_hmac ( "sha256", $stringToSign, $signatureKey, true );        $strHexSignature = strtolower ( bin2hex ( $signature ) );        return $strHexSignature;    }    public function getHeaders() {        $this->awsHeaders ['x-amz-date'] = $this->xAmzDate;        ksort ( $this->awsHeaders );        // Step 1: CREATE A CANONICAL REQUEST        $canonicalURL = $this->prepareCanonicalRequest ();        // Step 2: CREATE THE STRING TO SIGN        $stringToSign = $this->prepareStringToSign ( $canonicalURL );        // Step 3: CALCULATE THE SIGNATURE        $signature = $this->calculateSignature ( $stringToSign );        // Step 4: CALCULATE AUTHORIZATION HEADER        if ($signature) {            $this->awsHeaders ['Authorization'] = $this->buildAuthorizationString ( $signature );            return $this->awsHeaders;        }    }    private function buildAuthorizationString($strSignature) {        return $this->HMACAlgorithm . " " . "Credential=" . $this->accessKey . "/" . $this->getDate () . "/" . $this->regionName . "/" . $this->serviceName . "/" . $this->aws4Request . "," . "SignedHeaders=" . $this->strSignedHeader . "," . "Signature=" . $strSignature;    }    private function generateHex($data) {        return strtolower ( bin2hex ( hash ( "sha256", $data, true ) ) );    }    private function getSignatureKey($key, $date, $regionName, $serviceName) {        $kSecret = "AWS4" . $key;        $kDate = hash_hmac ( "sha256", $date, $kSecret, true );        $kRegion = hash_hmac ( "sha256", $regionName, $kDate, true );        $kService = hash_hmac ( "sha256", $serviceName, $kRegion, true );        $kSigning = hash_hmac ( "sha256", $this->aws4Request, $kService, true );        return $kSigning;    }    private function getTimeStamp() {        return gmdate ( "Ymd\THis\Z" );    }    private function getDate() {        return gmdate ( "Ymd" );    }}?><?php$curl = curl_init();curl_setopt_array($curl, [  CURLOPT_URL => "https://get.scrapehero.com/amz/product-reviews/?x-api-key=q9LJPUmr7e/TtEi/noQ0NeJ9kO/JGMEGctsDH/oK&asin=B07NFTVP7P&country_code=US&page=1&sort=top",  CURLOPT_RETURNTRANSFER => true,  CURLOPT_ENCODING => "",  CURLOPT_MAXREDIRS => 10,  CURLOPT_TIMEOUT => 30,  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,  CURLOPT_CUSTOMREQUEST => "GET",]);$response = curl_exec($curl);$err = curl_error($curl);curl_close($curl);if ($err) {  echo "cURL Error #:" . $err;} else {  echo $response;}?>

Any help regarding this would be great.


Viewing all articles
Browse latest Browse all 3753

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>