Page 1 sur 1

Utiliser le service web amazon

Posté : 13 nov. 2010, 22:39
par KotBD
Salut,

j'ai un programme de gestion de livre. Ce programme me permet normalement d'importer des données d'amazon en scannant juste
le code barre de la BD. Seulement, lorsque je scanne (ou même rentre à la mains le code barre), il m'indique une erreur.

Voici le code que j'ai :
<?php
$codebarre=$_POST['codebarre'];
$devid="Mon identifiant Amazon";
$xml_content = file_get_contents("http://webservices.amazon.fr/onca/xml?ResponseGroup=Large&Service=AWSECommerceService&SubscriptionId=".$devid."&Operation=ItemSearch&Keywords=".$codebarre."&SearchIndex=Books&ItemPage=1");
$xml = new SimpleXMLElement($xml_content);
echo "Code barre : ".$codebarre."<br>";
$scenariste=$xml->Items->Item->ItemAttributes->Author[0];
echo "Scenariste : ".$scenariste."<br>";
$dessinateur=$xml->Items->Item->ItemAttributes->Author[1];
echo "Dessinateur : ".$dessinateur."<br>";
$editeur=$xml->Items->Item->ItemAttributes->Publisher;
echo "Maison d'édition : ".$editeur."<br>";
$titre=$xml->Items->Item->ItemAttributes->Title;
echo "Titre : ".$titre."<br>";
$t = explode(": ", $titre);
$t1 = explode(",", $titre);
$t2 = explode(" ", $titre);
$titreserie=$t1[0];
$titrealbum=$t[1];
echo "Titre de la série : ".$titreserie."<br>";
echo "Titre de l'album : ".$titrealbum."<br>";
Et voici le message d'erreur que j'ai :
Warning: file_get_contents(http://webservices.amazon.fr/onca/xml?Service=AWSECommerceService &SubscriptionId=Identifiant Amazon &Operation=ItemLookup &IdType=ASIN &ItemId=0553212788 &MerchantId=All &ResponseGroup=Large) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/kotbd/bedetheque/ajouterbd2.php on line 126

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /home/kotbd/bedetheque/ajouterbd2.php:127 Stack trace: #0 /home/kotbd/bedetheque/ajouterbd2.php(127): SimpleXMLElement->__construct('') #1 /home/kotbd/bedetheque/body.php(35): include('/home/kotbd/bed...') #2 /home/kotbd/bedetheque/index.php(62): include('/home/kotbd/bed...') #3 {main} thrown in /home/kotbd/bedetheque/ajouterbd2.php on line 127
J'ai essayé de remplacer directement le début du code par celui proposé sur le site d'amazon :
http://docs.amazonwebservices.com/AWSEc ... OfEcs.html
http://webservices.amazon.fr/onca/xml? [...] mmerceService
&SubscriptionId=[your subscription ID here]
&Operation=ItemLookup &IdType=ASIN &ItemId=0486411214
&ResponseGroup=Medium,OfferFull
Mais sans plus de résultat

Merci d'avance pour votre aide.

Re: Utiliser le service web amazon

Posté : 13 nov. 2010, 23:47
par @rthur
Bonjour,
[function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
Cela veut dire que l'url que tu passes en paramètre de ta fonction file_get_contents() pointe vers une page inexistante.

Fait un print de cette url et teste là dans un navigateur.

Re: Utiliser le service web amazon

Posté : 13 nov. 2010, 23:56
par Ryle
Est ce que la directive allow_url_fopen de ton php.ini est bien activée ?

Re: Utiliser le service web amazon

Posté : 14 nov. 2010, 13:09
par KotBD
Bonjour,
merci pour vos réponses rapides.

Tout d'abord pour la directive de mon php.ini, elle est est bien sur on !

Deuxièmenent :

Lorsque je rentre par exemple ceci :
comme adresse web j'ai comme message d'erreur :
<?xml version="1.0"?>
<ItemSearchErrorResponse xmlns="http://ecs.amazonaws.com/doc/2005-10-05 ... essage>The request must contain the parameter Signature.</Message></Error><RequestID>d9fc3660-33ae-4363-a0b3-39a7fc575814</RequestID></ItemSearchErrorResponse>

En cherchant donc encore, j'apprends qu'amazon à changer un truc et qu'il faut maintenant être identifier autrement pour accéder à leurs services. Il faut une sorte de signature.
J'arrive sur une page qui prétend pouvoir transformer mon ancien code qui ne fonctionne pas en un nouveau qui lui devrait fonctionner :
Et qui ce matin fonctionne... !! Enfin j'arrive sur une page avec les infos que je cherche
Je remplace le code, mais j'ai toujours la même erreur...
J'aimerais aussi savoir comment faire pour voir notre version de PHP ?

Merci d'avance !

Edit : sinon il propose un code pour je pense avoir une signature "permanente" (j'ai pas tout compris), mais je vois pas trop comment l'intégrer dans mon code.
http://richardcummings.info/the-request ... -requests/

Re: Utiliser le service web amazon

Posté : 14 nov. 2010, 13:40
par @rthur
j'arrive sur une page avec les infos que je cherche
Je remplace le code, mais j'ai toujours la même erreur...
Toujours une erreur 404?

Crée une nouvelle page PHP et mets juste ceci comme code dedans:
<?php
$url='http://webservices.amazon.fr/onca/xml?ResponseGroup=Large&Service=AWSECommerceService&SubscriptionId=AKIAJM3RBY73QQWAFTXA&Operation=ItemSearch&Keywords=9782800115153&SearchIndex=Books&ItemPage=1&Timestamp=2010-11-14T10:57:55.000Z&Signature=IyG7hHtM8p4j7F4367gxLuAwTzEpGw4U4oUtcWjC7%2FM%3D';
print "<a href='".$url."'>".$url."</a><hr />";
print file_get_contents($url);
?>
Qu'obtiens-tu?

Si tu obtiens une erreur 404 et que lorsque tu cliques sur le lien tu obtiens le bon résultat, c'est que tu as un problème de serveur qui doit avoir un soucis de DNS (ou ton éditeur de code qui ne sait pas faire de copier-coller).
Si tu obtiens bien le résultat voulu alors c'est que ton code d'origine corrompt l'url quelque part.
J'aimerais aussi savoir comment faire pour voir notre version de PHP ?
http://fr.php.net/phpinfo

Re: Utiliser le service web amazon

Posté : 14 nov. 2010, 14:05
par KotBD
Bonjour,
merci pour ta réponse rapide.

Effectivement ce n'était pas une erreur 404 mais 400 (enfin voila le message d'erreur :
failed to open stream: HTTP request failed! HTTP/1.1 400).

Lorsque j'utilise ton code,
j'ai la même erreur. Le lien est affiché en haut de la page et lorsque je clique dessus
il y a ce message d'erreur :
<?xml version="1.0"?>
<ItemSearchErrorResponse xmlns="http://ecs.amazonaws.com/doc/2005-10-05 ... ge>Request has expired. Timestamp date is 2010-11-14T10:57:55.000Z.</Message></Error>
Je pense que c'est du au fait que lorsque je transforme automatiquement le code sur la page cité plus haut, le nouveau code n'est valide que pour une certaine durée de temps...!?
Donc à mon avis le code que tu m'as donné au tout à fait correct mais la page à en quelque sorte expiré...

Sur cette page http://richardcummings.info/the-request ... -requests/
il dit comment ajouter une signature mais quand j'essaye de "transformer "
$xml_content = file_get_contents("http://webservices.amazon.fr/onca/xml?ResponseGroup=Large&Service=AWSECommerceService&SubscriptionId=".$devid."&Operation=ItemSearch&Keywords=".$codebarre."&SearchIndex=Books&ItemPage=1");
$xml = new SimpleXMLElement($xml_content);
en
$url=”http://webservices.amazon.fr/onca/xml?ResponseGroup=Large&Service=AWSECommerceService&SubscriptionId=".$devid."&Operation=ItemSearch&Keywords=".$codebarre."&SearchIndex=Books&ItemPage=1”;

//+Toutes les lignes à ajouter

$response = simplexml_load_file($request);
Ca ne fonctionne pas...
D'avance merci !

Re: Utiliser le service web amazon

Posté : 14 nov. 2010, 16:51
par KotBD
Bonjour,
j'ai retesté le code que tu m'avais fournit en générant une nouvelle url sur le site et cela semble fonctionné
lorsque je lance le script j'ai l'adresse url qui apparait en haut puis ensuite les informations sur l'objet recherché aparaisse
sous cette forme
8ead0de-3f7e-49a4-a114-4657b77cfe2a0.0518950000000000TrueNewShip19782800115153AmazonLargeBooks112800115157http://www.amazon.fr/Soda-1-tr%C3%A9passe-Luc- ... rtonnéLuc WarnantPhilippe Tome843'.91497828001151532800115157DupuisFrançaisUnknownFrançaisOriginal Language1095EUREUR 10,95Dupuis4639115779843Book1987-09-16DupuisDupuis1035EUREUR 10,35662EUREUR 6,624900EUREUR 49,00593011A1X6FK5RDHNB96http://www.amazon.fr/gp/help/seller
etc... On voit que les infos sur le livre sont bien là.

Je vais essayer de modifier mon code pour ne pas avoir à générer chaque fois une nouvelle url


EDIT :

J'ai essayé de modifier. Il m'indique un parse erreur sur cette ligne :
$response = simplexml_load_file($xml)
Ok j'avais oublié un point virgule...
Par contre j'ai toute une nouvelle batterie d'erreurs
Que je pense avoir corriger par contre j'ai :
Fatal error: Call to undefined function: hash_hmac() in c:\program files (x86)\easyphp1-8\www\programme bd\bedetheque\ajouterbd2.php on line 133
Je ne vois pas trop ce que je peux faire...
<?
$codebarre=$_POST['codebarre'];
$devid="AKIAJM3RBY73QQWAFTXA";
$url=("http://webservices.amazon.fr/onca/xml?ResponseGroup=Large&Service=AWSECommerceService&SubscriptionId=".$devid."&Operation=ItemSearch&Keywords=".$codebarre."&SearchIndex=Books&ItemPage=1");

$secret = ‘secretkey’;
$host = parse_url($url,PHP_URL_HOST);
$timestamp = gmstrftime(“.%Y-%m-%dT%H:%M:%S.000Z.”);
$url=$url. “&Timestamp=” . $timestamp;
$paramstart = strpos($url,”?”);
$workurl = substr($url,$paramstart+1);
$workurl = str_replace(“,”,”%2C”,$workurl);
$workurl = str_replace(“:”,”%3A”,$workurl);
$params = explode(“&”,$workurl);
sort($params);
$signstr = “GET\n” . $host . “\n/onca/xml\n” . implode(“&”,$params);
$signstr = base64_encode(hash_hmac(‘sha256′, $signstr, $secret, true));
$signstr = urlencode($signstr);
$signedurl = $url . “&Signature=” . $signstr;
$request = $signedurl;

$response = simplexml_load_file($xml);

$xml = new SimpleXMLElement($xml_content);

Re: Utiliser le service web amazon

Posté : 14 nov. 2010, 20:39
par stealth35
t'as version de php est trop ancienne

Re: Utiliser le service web amazon

Posté : 14 nov. 2010, 23:21
par KotBD
J'ai télécharger la dernière version de EasyPhp, j'ai transféré tout mes fichiers dans le dossier www mais lorsque je lance en web local
la première page s'affiche bien mais les liens ne fonctionne plus....

Re: Utiliser le service web amazon

Posté : 14 nov. 2010, 23:37
par stealth35
J'ai télécharger la dernière version de EasyPhp, j'ai transféré tout mes fichiers dans le dossier www mais lorsque je lance en web local
la première page s'affiche bien mais les liens ne fonctionne plus....
t'as une erreur d'affichée ?

Re: Utiliser le service web amazon

Posté : 15 nov. 2010, 02:49
par KotBD
Non aucune. C'est comme si il y avait un lien mais qui ne fonctionne pas. On reste bloqué sur la même page.
Par contre j'ai "isoler" les pages nécessaire, j'ai la case ou entrer le code barre et tout ce qu'il faut (il n'y a juste pas les éléments graphique ce qui est normal
vu qu'on a juste du php dans le script) et là j'ai de nouveau une erreur 404, page non trouvée... mais je sais pas si il fait référence à la page amazon ou à une page php,
bref un peu perdu...

Re: Utiliser le service web amazon

Posté : 15 nov. 2010, 10:50
par stealth35
dans ton phpinfo a quoi correspond display_errors, error_reporting et allow_url_fopen

Re: Utiliser le service web amazon

Posté : 17 nov. 2010, 22:06
par KotBD
Tout me parait ok de ce point du vue