Utiliser le service web amazon

Petit nouveau ! | 7 Messages

13 nov. 2010, 22:39

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

13 nov. 2010, 23:47

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.
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 nov. 2010, 23:56

Est ce que la directive allow_url_fopen de ton php.ini est bien activée ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 7 Messages

14 nov. 2010, 13:09

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/

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

14 nov. 2010, 13:40

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
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 7 Messages

14 nov. 2010, 14:05

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 !

Petit nouveau ! | 7 Messages

14 nov. 2010, 16:51

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);

ViPHP
ViPHP | 5462 Messages

14 nov. 2010, 20:39

t'as version de php est trop ancienne

Petit nouveau ! | 7 Messages

14 nov. 2010, 23:21

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....

ViPHP
ViPHP | 5462 Messages

14 nov. 2010, 23:37

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 ?

Petit nouveau ! | 7 Messages

15 nov. 2010, 02:49

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...

ViPHP
ViPHP | 5462 Messages

15 nov. 2010, 10:50

dans ton phpinfo a quoi correspond display_errors, error_reporting et allow_url_fopen

Petit nouveau ! | 7 Messages

17 nov. 2010, 22:06

Tout me parait ok de ce point du vue