Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2010, 14h28   #1
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 61
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 61
Points : 10
Points : 10
Par défaut SOAP et Amazone

Salut à tous,

Je cherche en vain un petit script pour récupérer les info d'un livre sur amazone connaissant son ISBN. J'ai vu pas mal d'exemple, mais rien ne marche

A la suite des exemples que j'ai pu glaner je me pose plusieurs questions :

Faut-il s'enregistrer auprès d'Amazone pour faire une requête SOAP sur leur web service.

J'ai vu qu'il existait une librairie NUSOAP, est-ce que cette librairie fait la même chose que l'extension php5 php_soap.dll. Est-ce que leur code sont compatible ?

J'ai vu qu'il existait plusieurs fonction dans la classe soap

ASINSearchRequest, BrowseNodeSearchRequest... ou sont implémenté ces fonctions dans la dll soap de php5 ?

Plusieurs adresses URL pour le client soap de amazone semblent être en vigueur ? http://soap.amazon.com/schemas2/AmazonWebServices.wsdl, http://soap.amazon.com/schemas3/AmazonWebServices.wsdl...

Bref je patauge un peu un script simple qui marche serait la bienvenue

Merci beaucoup
The Jos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 03h02   #2
Modérateur
 
Avatar de Overcrash
 
Homme Ludovic
Etudiant en Architecture Logicielle et responsable CRM (Salesforce)
Inscription : mai 2008
Messages : 734
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Âge : 23
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Etudiant en Architecture Logicielle et responsable CRM (Salesforce)
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 734
Points : 1 103
Points : 1 103
Envoyer un message via Skype™ à Overcrash
Bonsoir,

File le code si tu veux que l'on t'aide
__________________
---
Overcrash

Je suis souvent disponible ici : Chat dvp
Je ne lis pas les codes qui ne sont pas indentés.
Merci de les messages utiles en cliquant en bas à droite du message
Overcrash est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2010, 22h38   #3
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 61
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 61
Points : 10
Points : 10
Bonsoir à tous,

Sorry pour le up, je comprends...

Pour le code le voici

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function get_book_amazon_isbn($isbn)
{
   $client = new SoapClient ('http://soap.amazon.com/schemas2/AmazonWebServices.wsdl');
 
   $params   = array(
    'asin'	   => "$isbn",
    'mode'         => 'books',
    'sort'         => '+title',
    'type'         => 'lite',
    'tag'          => 'trachtenberg-20',
    'devtag'       => 'XXXXXXXXXXXXXX',
    'locale'	   => 'fr'
   );
   $return=$client->ASINSearchRequest($params);
   return($return);
}
J'ai essayé aussi cela

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function get_book_amazon_isbn($isbn)
{
 
   $client = new SoapClient ('http://soap.amazon.com/schemas2/AmazonWebServices.wsdl');
 
//$params['Service'] = 'AWSECommerceService';
$params['AWSAccessKeyId'] = 'Mon code Amazone'; // cle obtenue apres inscription sur aws.amazon.com
//$params['AssociateTag'] = 'creationdesit-21';
 
 
 
   $params   = array(
    'asin'	   => "$isbn",
    'mode'         => 'books',
    'sort'         => '+title',
    'type'         => 'lite',
    'tag'          => 'trachtenberg-20',
    'devtag'       => 'XXXXXXXXXXXXXX',
    'locale'	   => 'fr'
   );
   $return=$client->ASINSearchRequest($params);
   return($return);
}
Mais cela ne donne rien erreur : Uncaught SoapFault exception: [HTTP] Gone
J'ai essayé avec la librairie NUSOAP idem
The Jos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 14h52   #4
Modérateur
 
Avatar de Overcrash
 
Homme Ludovic
Etudiant en Architecture Logicielle et responsable CRM (Salesforce)
Inscription : mai 2008
Messages : 734
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Âge : 23
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Etudiant en Architecture Logicielle et responsable CRM (Salesforce)
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 734
Points : 1 103
Points : 1 103
Envoyer un message via Skype™ à Overcrash
Bonjour,

Tu es sur de ton lien ?

Code :
$client = new SoapClient ('http://soap.amazon.com/schemas2/AmazonWebServices.wsdl');
__________________
---
Overcrash

Je suis souvent disponible ici : Chat dvp
Je ne lis pas les codes qui ne sont pas indentés.
Merci de les messages utiles en cliquant en bas à droite du message
Overcrash est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 14h56   #5
Membre à l'essai
 
Inscription : août 2010
Messages : 116
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 116
Points : 22
Points : 22
J'espère que t'a pas oublier de spécifier le isbn ?!

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$isbn = "xxxxxx";
function get_book_amazon_isbn($isbn)
{
 
   $client = new SoapClient ('http://soap.amazon.com/schemas2/AmazonWebServices.wsdl');
 
//$params['Service'] = 'AWSECommerceService';
$params['AWSAccessKeyId'] = 'Mon code Amazone'; // cle obtenue apres inscription sur aws.amazon.com
//$params['AssociateTag'] = 'creationdesit-21';
 
 
 
   $params   = array(
    'asin'	   => "$isbn",
    'mode'         => 'books',
    'sort'         => '+title',
    'type'         => 'lite',
    'tag'          => 'trachtenberg-20',
    'devtag'       => 'XXXXXXXXXXXXXX',
    'locale'	   => 'fr'
   );
   $return=$client->ASINSearchRequest($params);
   return($return);
}
Stalk3R est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 15h01   #6
Membre à l'essai
 
Inscription : août 2010
Messages : 116
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 116
Points : 22
Points : 22
Sinon tu peut essayer ça:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
/**
 * Query Amazon about a particular book by ISBN and obtain metadata.
 * The author disclaims all copyright and places this in the public domain.
 *
 * Amazon's Terms of Use for this service require you to:
 * - Send no more than 1 request every second
 * - Direct traffic to them in some way. You can use the URL provided in the
 *   resulting metadata to achieve this.
 */
class ISBN {
  function getMetadataFromIsbn($isbn) {
    // Get your own accesskey at http://aws.amazon.com/
    $awsAccessKeyID = 'YOUR_ACCESS_KEY_ID_HERE';
    $awsSecretKey = 'YOUR_SECRET_KEY_HERE';
    $awsAssociateTag = 'YOUR_ASSOCIATE_TAG_HERE';
 
    $host = 'ecs.amazonaws.com';
    $path = '/onca/xml';
 
    $args = array(
      'AssociateTag' => $awsAssociateTag,
      'AWSAccessKeyId' => $awsAccessKeyID,
      'IdType' => 'ISBN',
      'ItemId' => $isbn,
      'Operation' => 'ItemLookup',
      'ResponseGroup' => 'Medium',
      'SearchIndex' => 'Books',
      'Service' => 'AWSECommerceService',
      'Timestamp' => gmdate('Y-m-d\TH:i:s\Z'),
      'Version'=> '2009-01-06'
    );
 
    ksort($args);
    $parts = array();
    foreach(array_keys($args) as $key) {
      $parts[] = $key . "=" . $args[$key];
    }
 
    // Construct the string to sign
    $stringToSign = "GET\n" . $host . "\n" . $path . "\n" . implode("&", $parts);
    $stringToSign = str_replace('+', '%20', $stringToSign);
    $stringToSign = str_replace(':', '%3A', $stringToSign);
    $stringToSign = str_replace(';', urlencode(';'), $stringToSign);
 
    // Sign the request
    $signature = hash_hmac("sha256", $stringToSign, $awsSecretKey, TRUE);
 
    // Base64 encode the signature and make it URL safe
    $signature = base64_encode($signature);
    $signature = str_replace('+', '%2B', $signature);
    $signature = str_replace('=', '%3D', $signature);
 
    // Construct the URL
    $url = 'http://' . $host . $path . '?' . implode("&", $parts) . "&Signature=" . $signature;
    $rawData = file_get_contents($url);
 
    $metadata = simplexml_load_string($rawData);
    if (isset($metadata->Items->Request->Errors)) {
      return $metadata->Items->Request->Errors;
    } else {
      return $metadata->Items->Item;
    }
  }
}
?>
Stalk3R est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 15h09   #7
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 61
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 61
Points : 10
Points : 10
J'ai essayer aussi avec

http://soap.amazon.com/schemas3/AmazonWebServices.wsdl
que l'on trouve sur certains script, avec http://ecs.amazonaws.com/AWSECommerc...ceService.wsdl

Mais rien ne change. C bizarre quand même on trouve de la docs sur SOAP mais d'un ésotérisme caractérisé.
The Jos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 15h10   #8
Candidat au titre de Membre du Club
 
Inscription : décembre 2006
Messages : 61
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 61
Points : 10
Points : 10
Merci beaucoup pour vos réponses, j'essaye tout ça et je vous tiens au courant

Merci encore !
The Jos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2010, 15h11   #9
Membre à l'essai
 
Inscription : août 2010
Messages : 116
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 116
Points : 22
Points : 22
OK

SiNon Tu ne peut pas directement parser la page ?
Stalk3R est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2010, 14h14   #10
Invité de passage
 
Inscription : décembre 2010
Messages : 1
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 1
Points : 1
Points : 1
Bonjour

Je suis moi-même en train d'essayer de coder un truc comme ça (je dis "essayer" et "un truc" car je ne suis absolument pas un spécialiste du php et en informatique, je suis un amateur).
Je souhaite rechercher des livres dans les bases de données d'amazon pour constituer une liste complète des bouquins de ma bibliothèque (avec leur 4eme de couverture...).
Pour l'instant, amazon me répond que ma requete est mal signée.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
	<!-- cette page sert à traiter les infos de recherches de livres -->
       <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   </head>
	<?php
 
	  // la base de la requete
	  $auteur = $_POST['auteur'];
	  $niveau = "Medium"; 		//le niveau de la recherche dans Amazon...
	  $titre  = $_POST['titre'];
	  //$type	 = $_POST['type'];
	  $type = "Books";
 
	 // identifiants amazon secrets
	  $Id_Amazon = "XXXXXXXXX";
	  $Amazon_secret ="XXXXXXXXXXXXXX";
 
	  // la base de l'url est le truc qu'il faudra modifier si le site change...
	  $method = "GET";
	  $zone = "fr";
	  $host = "ecs.amazonaws.". $zone;
 
	  // construction de la requete
	  $operation = "ItemSearch";
	  $service = "AWSECommerceService";
	  $reponse="ItemAttributes"; 		// ce qu'on veut qu'amazon renvoie
	  $recherche='Author='.$auteur; 	// la liste des trucs recherchés (auteur, titre...)
	$time=time();
	$version="2010-10-01";			// version de l'api d'amazon
 
// ce gros bloc est l'ensemble de la requete.
	$requete ='AWSAccessKeyId='.$Id_Amazon.'&Version='.$version.'&Operation='.$operation.'&SearchIndex='.$type.$recherche.'&ResponseGroup='.$reponse.'&Timestamp='.$time;
	$to_sign ="$method\n".$host."\n"."/onca/xml\n".$requete;
 
// la signature est un hash_hmac et doit etre encodée pour enlever + =...
	$Sig = rawurlencode(base64_encode(hash_hmac('sha256', $to_sign, $Amazon_secret, true)));
	$url = 'http://'.$host.'/onca/xml?'.$requete.'&Signature='.$Sig;
	echo $url;
 
	//récupération de la réponse d'Amazon
	$contenu = file_get_contents($url);
	$xml     = simplexml_load_string($contenu);
	$nombre_resul = $xml->Items->TotalResults;
	echo $nombre_resul;
	?>
    <body>
 
    </body>
</html>
Et je reçois ça :
Code :
1
2
<?xml version="1.0"?>
<ItemSearchErrorResponse xmlns="http://ecs.amazonaws.com/doc/2010-10-01/"><Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message></Error><RequestID>24448f5e-035d-4b71-b883-f914d21288e3</RequestID></ItemSearchErrorResponse>
The Jos, quelle est l'utilité finale de ton script ? Que cherche-tu à faire ?
22decembre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/12/2010, 23h00   #11
Modérateur
 
Avatar de Overcrash
 
Homme Ludovic
Etudiant en Architecture Logicielle et responsable CRM (Salesforce)
Inscription : mai 2008
Messages : 734
Détails du profil
Informations personnelles :
Nom : Homme Ludovic
Âge : 23
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Etudiant en Architecture Logicielle et responsable CRM (Salesforce)
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mai 2008
Messages : 734
Points : 1 103
Points : 1 103
Envoyer un message via Skype™ à Overcrash
Citation:
Envoyé par Stalk3R Voir le message
OK

SiNon Tu ne peut pas directement parser la page ?
Nop le but est de passer par le protocole SOAP,

Mais le soucis est au niveau de la requête a amazon il renvoi une erreur de signature.
__________________
---
Overcrash

Je suis souvent disponible ici : Chat dvp
Je ne lis pas les codes qui ne sont pas indentés.
Merci de les messages utiles en cliquant en bas à droite du message
Overcrash est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h07.


 
 
 
 
Partenaires

Hébergement Web