Amazon WS - Récupérer le prix d'un produit

  • Auteur de la discussion Auteur de la discussion Nilav
  • Date de début Date de début
Nouveau WRInaute
Bonsoir,

Je suis inscrit à AWS, j'ai mon identifiant et ma clé secrète. Après des heures de recherche, j'ai trouvé comment créer une signature nécessaire pour faire les requêtes en utilisant un script trouvé sur le net. Toutefois, j'ai deux problèmes, l'un que je pense pouvoir régler seul, il me sort le XML directement sur ma page mais ça, c'est parce que le script lui dit de le faire.
En revanche, mon vrai problème, c'est que le XML ne contient pas le prix du produit que je lui ai demandé de récupéré.
En testant les quelques liens qu'il fournit, notamment les images, j'ai pu constater qu'il récupérait le bon produit.

Voici le code que j'utilise
Code:
<?
$AWSAccessKeyId = "***";
$SecretAccessKey = "***";

$ItemId = "B004ASORCU"; // ASIN
$Timestamp = gmdate("Y-m-d\TH:i:s\Z"); 
$Timestamp = str_replace(":", "%3A", $Timestamp);
$ResponseGroup = "ItemAttributes,Offers,Images,Reviews";
$ResponseGroup = str_replace(",", "%2C", $ResponseGroup);

$String = "AWSAccessKeyId=$AWSAccessKeyId&
ItemId=$ItemId&
Operation=ItemLookup&
ResponseGroup=$ResponseGroup&
Service=AWSECommerceService&
Timestamp=$Timestamp&
Version=2009-01-06";

$String = str_replace("\n", "", $String); 

$Prepend = "GET\nwebservices.amazon.com\n/onca/xml\n";
$PrependString = $Prepend . $String;

$Signature = base64_encode(hash_hmac("sha256", $PrependString, $SecretAccessKey, True));  
$Signature = str_replace("+", "%2B", $Signature);
$Signature = str_replace("=", "%3D", $Signature);

$BaseUrl = "http://webservices.amazon.com/onca/xml?";
$SignedRequest = $BaseUrl . $String . "&Signature=" . $Signature;

$XML = simplexml_load_file($SignedRequest);

echo '<a href="'.$SignedRequest.'">XML</a><p>';
print_r ($XML);
?>

Si vous avez quelque chose qui fonctionne, ça m'intéresse, notamment directement de la bibliothèque d'Amazon, je n'ai rien trouvé car tous les liens sur lesquels je tombe sont morts ou ne date pas de la dernière MAJ de l'API. Alors je ne sais pas trop où chercher tellement il y a de contenu.
Concernant mon besoin, je n'ai besoin que d'une seule chose, le prix d'un produit particulier. Même le titre du produit j'm'en fous :mrgreen:

Merci d'avance, en espérant avoir posté au bon endroit.
 
Nouveau WRInaute
Récupéré de l'URL et pas du contenu envoyé sur ma page, ceci dit, c'est le même.
Code:
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<ItemLookupResponse>
<OperationRequest>
<HTTPHeaders>
<Header Name="UserAgent" Value="Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.24 (KHTML, like Gecko) Iron/11.0.700.2 Chrome/11.0.700.2 Safari/534.24"/>
</HTTPHeaders>
<RequestId>4d80ea5a-61b7-4bce-9068-e042076b1107</RequestId>
<Arguments>
<Argument Name="Operation" Value="ItemLookup"/>
<Argument Name="Service" Value="AWSECommerceService"/>
<Argument Name="Signature" Value="82SNA2204yM/3r9Je0NNRsbUyc0KjtN2rlOOSwTIpr0="/>
<Argument Name="Version" Value="2009-01-06"/>
<Argument Name="ItemId" Value="B004ASORCU"/>
<Argument Name="AWSAccessKeyId" Value="AKIAIK3FEN5J57IWVEPA"/>
<Argument Name="Timestamp" Value="2011-07-01T09:14:41Z"/>
<Argument Name="ResponseGroup" Value="ItemAttributes,Offers,Images,Reviews"/>
</Arguments>
<RequestProcessingTime>0.0119760000000000</RequestProcessingTime>
</OperationRequest>
<Items>
<Request>
<IsValid>True</IsValid>
<ItemLookupRequest>
<Condition>New</Condition>
<DeliveryMethod>Ship</DeliveryMethod>
<IdType>ASIN</IdType>
<MerchantId>Amazon</MerchantId>
<OfferPage>1</OfferPage>
<ItemId>B004ASORCU</ItemId>
<ResponseGroup>ItemAttributes</ResponseGroup>
<ResponseGroup>Offers</ResponseGroup>
<ResponseGroup>Images</ResponseGroup>
<ResponseGroup>Reviews</ResponseGroup>
<ReviewPage>1</ReviewPage>
<ReviewSort>-SubmissionDate</ReviewSort>
<VariationPage>All</VariationPage>
</ItemLookupRequest>
</Request>
<Item>
<ASIN>B004ASORCU</ASIN>
<DetailPageURL>
http://www.amazon.com/Top-Spin-2/dp/B004ASORCU%3FSubscriptionId%3DAKIAIK3FEN5J57IWVEPA%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB004ASORCU
</DetailPageURL>
<ItemLinks>
<ItemLink>
<Description>Technical Details</Description>
<URL>
http://www.amazon.com/Top-Spin-2/dp/tech-data/B004ASORCU%3FSubscriptionId%3DAKIAIK3FEN5J57IWVEPA%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB004ASORCU
</URL>
</ItemLink>
<ItemLink>
<Description>Add To Baby Registry</Description>
<URL>
http://www.amazon.com/gp/registry/baby/add-item.html%3Fasin.0%3DB004ASORCU%26SubscriptionId%3DAKIAIK3FEN5J57IWVEPA%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB004ASORCU
</URL>
</ItemLink>
<ItemLink>
<Description>Add To Wedding Registry</Description>
<URL>
http://www.amazon.com/gp/registry/wedding/add-item.html%3Fasin.0%3DB004ASORCU%26SubscriptionId%3DAKIAIK3FEN5J57IWVEPA%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB004ASORCU
</URL>
</ItemLink>
<ItemLink>
<Description>Add To Wishlist</Description>
<URL>
http://www.amazon.com/gp/registry/wishlist/add-item.html%3Fasin.0%3DB004ASORCU%26SubscriptionId%3DAKIAIK3FEN5J57IWVEPA%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB004ASORCU
</URL>
</ItemLink>
<ItemLink>
<Description>Tell A Friend</Description>
<URL>
http://www.amazon.com/gp/pdp/taf/B004ASORCU%3FSubscriptionId%3DAKIAIK3FEN5J57IWVEPA%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB004ASORCU
</URL>
</ItemLink>
<ItemLink>
<Description>All Customer Reviews</Description>
<URL>
http://www.amazon.com/review/product/B004ASORCU%3FSubscriptionId%3DAKIAIK3FEN5J57IWVEPA%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB004ASORCU
</URL>
</ItemLink>
<ItemLink>
<Description>All Offers</Description>
<URL>
http://www.amazon.com/gp/offer-listing/B004ASORCU%3FSubscriptionId%3DAKIAIK3FEN5J57IWVEPA%26tag%3Dws%26linkCode%3Dxm2%26camp%3D2025%26creative%3D386001%26creativeASIN%3DB004ASORCU
</URL>
</ItemLink>
</ItemLinks>
<SmallImage>
<URL>
http://ecx.images-amazon.com/images/I/61HaJ9rvjIL._SL75_.jpg
</URL>
<Height Units="pixels">75</Height>
<Width Units="pixels">65</Width>
</SmallImage>
<MediumImage>
<URL>
http://ecx.images-amazon.com/images/I/61HaJ9rvjIL._SL160_.jpg
</URL>
<Height Units="pixels">160</Height>
<Width Units="pixels">139</Width>
</MediumImage>
<LargeImage>
<URL>
http://ecx.images-amazon.com/images/I/61HaJ9rvjIL.jpg
</URL>
<Height Units="pixels">500</Height>
<Width Units="pixels">435</Width>
</LargeImage>
<ImageSets>
<ImageSet Category="primary">
<SwatchImage>
<URL>
http://ecx.images-amazon.com/images/I/61HaJ9rvjIL._SL30_.jpg
</URL>
<Height Units="pixels">30</Height>
<Width Units="pixels">26</Width>
</SwatchImage>
<SmallImage>
<URL>
http://ecx.images-amazon.com/images/I/61HaJ9rvjIL._SL75_.jpg
</URL>
<Height Units="pixels">75</Height>
<Width Units="pixels">65</Width>
</SmallImage>
<ThumbnailImage>
<URL>
http://ecx.images-amazon.com/images/I/61HaJ9rvjIL._SL75_.jpg
</URL>
<Height Units="pixels">75</Height>
<Width Units="pixels">65</Width>
</ThumbnailImage>
<TinyImage>
<URL>
http://ecx.images-amazon.com/images/I/61HaJ9rvjIL._SL110_.jpg
</URL>
<Height Units="pixels">110</Height>
<Width Units="pixels">96</Width>
</TinyImage>
<MediumImage>
<URL>
http://ecx.images-amazon.com/images/I/61HaJ9rvjIL._SL160_.jpg
</URL>
<Height Units="pixels">160</Height>
<Width Units="pixels">139</Width>
</MediumImage>
<LargeImage>
<URL>
http://ecx.images-amazon.com/images/I/61HaJ9rvjIL.jpg
</URL>
<Height Units="pixels">500</Height>
<Width Units="pixels">435</Width>
</LargeImage>
</ImageSet>
<ImageSet Category="swatch">
<SwatchImage>
<URL>
http://ecx.images-amazon.com/images/I/41LHXv0oGIL._SL30_.jpg
</URL>
<Height Units="pixels">30</Height>
<Width Units="pixels">24</Width>
</SwatchImage>
<SmallImage>
<URL>
http://ecx.images-amazon.com/images/I/41LHXv0oGIL._SL75_.jpg
</URL>
<Height Units="pixels">75</Height>
<Width Units="pixels">59</Width>
</SmallImage>
<ThumbnailImage>
<URL>
http://ecx.images-amazon.com/images/I/41LHXv0oGIL._SL75_.jpg
</URL>
<Height Units="pixels">75</Height>
<Width Units="pixels">59</Width>
</ThumbnailImage>
<TinyImage>
<URL>
http://ecx.images-amazon.com/images/I/41LHXv0oGIL._SL110_.jpg
</URL>
<Height Units="pixels">110</Height>
<Width Units="pixels">87</Width>
</TinyImage>
<MediumImage>
<URL>
http://ecx.images-amazon.com/images/I/41LHXv0oGIL._SL160_.jpg
</URL>
<Height Units="pixels">160</Height>
<Width Units="pixels">127</Width>
</MediumImage>
<LargeImage>
<URL>
http://ecx.images-amazon.com/images/I/41LHXv0oGIL.jpg
</URL>
<Height Units="pixels">500</Height>
<Width Units="pixels">396</Width>
</LargeImage>
</ImageSet>
</ImageSets>
<ItemAttributes>
<Binding>Blu-ray</Binding>
<EAN>5026555402750</EAN>
<PackageDimensions>
<Height Units="hundredths-inches">63</Height>
<Length Units="hundredths-inches">669</Length>
<Weight Units="hundredths-pounds">22</Weight>
<Width Units="hundredths-inches">528</Width>
</PackageDimensions>
<PackageQuantity>1</PackageQuantity>
<Platform>PlayStation 3</Platform>
<ProductGroup>Video Games</ProductGroup>
<ProductTypeName>ABIS_VIDEO_GAMES</ProductTypeName>
<Title>Top Spin 2</Title>
</ItemAttributes>
<OfferSummary>
<TotalNew>0</TotalNew>
<TotalUsed>0</TotalUsed>
<TotalCollectible>0</TotalCollectible>
<TotalRefurbished>0</TotalRefurbished>
</OfferSummary>
<Offers>
<TotalOffers>0</TotalOffers>
<TotalOfferPages>0</TotalOfferPages>
</Offers>
</Item>
</Items>
</ItemLookupResponse>

Merci pour ton aide :)
 
WRInaute accro
Tu fais une requête sur Amazon US pour un produit qui n'y est pas disponible (mais qui est disponible sur Amazon.fr, qui est celui qui t'intéresse, je suppose). Il faut que tu interroges le serveur .fr et pas le .com...

Note que tu te plains que les exemples que tu as trouvés sont pour des vieilles versions, mais ton code n'est pas du tout à jour non plus (il n'utilise même pas le bon domaine), et en plus il me semble excessivement mal écrit, tous ces str_replace "custom" c'est assez horrible, ce serait nettement plus simple, et plus sûr, d'utiliser urlencode sur chaque paramètre.

Jacques.
 
Nouveau WRInaute
jcaron a dit:
Tu fais une requête sur Amazon US pour un produit qui n'y est pas disponible (mais qui est disponible sur Amazon.fr, qui est celui qui t'intéresse, je suppose). Il faut que tu interroges le serveur .fr et pas le .com...

Note que tu te plains que les exemples que tu as trouvés sont pour des vieilles versions, mais ton code n'est pas du tout à jour non plus (il n'utilise même pas le bon domaine), et en plus il me semble excessivement mal écrit, tous ces str_replace "custom" c'est assez horrible, ce serait nettement plus simple, et plus sûr, d'utiliser urlencode sur chaque paramètre.

Jacques.
Merci, je m'en étais aperçu avant ce week-end et avait corrigé. Pour la propreté du code, je ne suis pas expert et s'il n'est pas à jour, je veux bien un lien, même sur le site d'Amazon qui présenterait l'outil. En attendant, je m'occuperai déjà du urlencode. :)

Concernant le "il n'utilise même pas le bon domaine", à la décharge du codeur, il était anglo-saxon, il n'allait donc pas chercher sur la version FR.
 
WRInaute accro
Au delà du pays, le domaine utilisé correspond à une vieille version. D'ailleurs la version de l'API demandée (qui date de 2009) est très loin d'être la dernière.

Pourquoi ne pas télécharger le SDK PHP disponible sur le site Amazon?

Jacques.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut