Partage
  • Partager sur Facebook
  • Partager sur Twitter

Stats à partir de l'API eBay, Help !

[Débutante][JSON][API]

Sujet résolu
    19 juin 2018 à 10:45:05

    Bonjour,

    Je suis en stage de 1ère année de BTS et il n'y a pas de développeur dans la boite donc je suis seule avec mes questions.

    Je tente de mettre en service une api eBay et pour cela j'ai suivi ce tuto : http://developer.ebay.com/DevZone/finding/HowTo/GettingStarted_JS_NV_JSON/GettingStarted_JS_NV_JSON.html

    Si je m'en tiens au tuto cela fonctionne. Mais je voudrais aussi récupérer le prix des produits je n'y parviens pas.

    Voici mon code actuel :

    <?php 
    
    $product = $_POST['product'];
    ?>
    
    <html>
    
    	<head>
    		<title>eBay Search Results</title>
    		<style type="text/css">body { font-family: arial,sans-serif;} </style>
    	</head>
    	
    	<body>
    		
    		<h1>eBay Search Results</h1>
    
    		<div id="results"></div>
    
    
    		<script>
    
    			// Parse the response and build an HTML table to display search results
    			function _cb_findItemsByKeywords(root) {
    			  var items = root.findItemsByKeywordsResponse[0].searchResult[0].item || [];
    			  
    			  var html = [];
    			  html.push('<table width="100%" border="0" cellspacing="0" cellpadding="3"><tbody>');
    			  for (var i = 0; i < items.length; ++i) {
    			    var item     = items[i];
    			    var title    = item.title;
    			    var pic      = item.galleryURL;
    			    var viewitem = item.viewItemURL;
    			    
    			    
    			    if (null != title && null != viewitem) {
    			      html.push('<tr><td>' + '<img src="' + pic + '" border="0">' + '</td>' + 
    			      '<td><a href="' + viewitem + '" target="_blank">' + title + '</a></td><td>'+price+'</td></tr>');
    			    }
    			  }
    			  html.push('</tbody></table>');
    			  document.getElementById("results").innerHTML = html.join("");
    			}  // End _cb_findItemsByKeywords() function
    
    			// Create a JavaScript array of the item filters you want to use in your request
    			var filterarray = [
    			  {"name":"MaxPrice", 
    			   "value":"25", 
    			   "paramName":"Currency", 
    			   "paramValue":"USD"},
    			  {"name":"FreeShippingOnly", 
    			   "value":"true", 
    			   "paramName":"", 
    			   "paramValue":""},
    			  {"name":"ListingType", 
    			   "value":["AuctionWithBIN", "FixedPrice", "StoreInventory"], 
    			   "paramName":"", 
    			   "paramValue":""},
    			  ];
    
    
    			// Define global variable for the URL filter
    			var urlfilter = "";
    
    			// Generates an indexed URL snippet from the array of item filters
    			function  buildURLArray() {
    			  // Iterate through each filter in the array
    			  for(var i=0; i<filterarray.length; i++) {
    			    //Index each item filter in filterarray
    			    var itemfilter = filterarray[i];
    			    // Iterate through each parameter in each item filter
    			    for(var index in itemfilter) {
    			      // Check to see if the paramter has a value (some don't)
    			      if (itemfilter[index] !== "") {
    			        if (itemfilter[index] instanceof Array) {
    			          for(var r=0; r<itemfilter[index].length; r++) {
    			          var value = itemfilter[index][r];
    			          urlfilter += "&itemFilter\(" + i + "\)." + index + "\(" + r + "\)=" + value ;
    			          }
    			        } 
    			        else {
    			          urlfilter += "&itemFilter\(" + i + "\)." + index + "=" + itemfilter[index];
    			        }
    			      }
    			    }
    			  }
    			}  // End buildURLArray() function
    
    			// Execute the function to build the URL filter
    			buildURLArray(filterarray);
    
    			var product = <?php echo json_encode($product); ?>;
    
    			// Construct the request
    			// Replace MyAppID with your Production AppID
    			var url = "http://svcs.ebay.com/services/search/FindingService/v1";
    			    url += "?OPERATION-NAME=findItemsByKeywords";
    			    url += "&SERVICE-VERSION=1.0.0";
    			    url += "&SECURITY-APPNAME=*********************************";
    			    url += "&GLOBAL-ID=EBAY-US";
    			    url += "&RESPONSE-DATA-FORMAT=JSON";
    			    url += "&callback=_cb_findItemsByKeywords";
    			    url += "&REST-PAYLOAD";
    			    url += "&keywords="+encodeURI(product);
    			    url += "&paginationInput.entriesPerPage=3";
    			    url += urlfilter;
    
    
    			// Submit the request 
    			s=document.createElement('script'); // create script element
    			s.src= url;
    			document.body.appendChild(s);
    
    			// Display the request as a clickable link for testing
    			document.write("<a href=\"" + url + "\">" + url + "</a>");
    
    			
    
    
    		   
    		</script>
    
    	</body>
    
    </html>

    et voici un morceau de ma réponse JSON :

    Dont j'ai un peu facilité la lecture avec json formatter :

    J'ai tronqué quelques parties mais la partie qui m'intéresse est donc sellingStatus. Mais je ne sais pas comment récupérer le prix. J'ai essayé toutes les solutions qui me sont venues à l'esprit et rien y fait, soit j'ai une erreur js, soit ma variable est indéfinie, soit cela m'affiche "object Object".

    Quelqu'un pourrait-il m'aider svp ?

    -
    Edité par RomeNag 21 juin 2018 à 16:00:55

    • Partager sur Facebook
    • Partager sur Twitter
      19 juin 2018 à 10:48:36

      Bonjour,

      pourtant, sellingStatus.currentPrice.__value__ devrait bien contenir la valeur, non ?

      Peux-tu montrer ce que tu as fait ?

      (avec quel navigateur testes-tu pour avoir des "object Object" sans leur contenu ?)

      • Partager sur Facebook
      • Partager sur Twitter

      Pas d'aide concernant le code par MP, le forum est là pour ça :)

        19 juin 2018 à 13:10:33

        Je teste sur Firefox.

        Si je met :

        var price = item.sellingStatus.currentPrice.__value__

        J'ai une erreur JS :

        TypeError: item.sellingStatus.currentPrice is undefined

        Une idée ?


        • Partager sur Facebook
        • Partager sur Twitter
          19 juin 2018 à 13:35:29

          Fais un console.log(item.sellingStatus) pour voir le contenu ?
          • Partager sur Facebook
          • Partager sur Twitter

          Pas d'aide concernant le code par MP, le forum est là pour ça :)

            19 juin 2018 à 13:49:49

            Bonjour,

            Je pense qu'il faut accéder à ta variable comme cela :

            item[0].sellingStatus[0].currentPrice[0].__value__

            vu la structure de ton JSON mais si tu pouvais poster un exemple de ton json en code stp ça pourrais aider.

            -
            Edité par FuFurulas 19 juin 2018 à 14:52:30

            • Partager sur Facebook
            • Partager sur Twitter
              19 juin 2018 à 14:04:44

              Ah, bien vu pour le [0] ! C'est en effet probablement ça.
              • Partager sur Facebook
              • Partager sur Twitter

              Pas d'aide concernant le code par MP, le forum est là pour ça :)

                19 juin 2018 à 14:45:47

                Il devrait suffire de parser la réponse et de faire

                var monObj=jsonParsedItem[0].searchResult.selingStatus;
                

                pour obtenir un objet javascript dont les clés sont currentPrice, convertedCurrentPrice, sellingState et timeLeft.

                A voir dans la console avec un console.log(JSON.stringify(monObj))

                • Partager sur Facebook
                • Partager sur Twitter
                  20 juin 2018 à 16:19:12

                  FuFurulas a écrit:

                  Je pense qu'il faut accéder à ta variable comme cela :

                  item[0].sellingStatus[0].currentPrice[0].__value__


                  Top ! C'était bien ça ! Je pensais pourtant avoir essayé toute les solutions ! Merci beaucoup ! Je vais pouvoir continuer !

                  Maintenant il faut que j'arrive à filtrer par vente réussie et c'est pas gagné ^^

                  Bonne fin de journée et merci à tous de vous être penchés sur mon problème !

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 juin 2018 à 17:02:39

                    As-tu testé la proposition de 007julien, qui m'a l'air quand même plus propre ?
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Pas d'aide concernant le code par MP, le forum est là pour ça :)

                      21 juin 2018 à 12:36:19

                      Non je n'ai pas testé, je ne vois pas trop comment faire...

                      J'ai un autre problème depuis en plus, comme je vous l'ai dit je dois essayer de faire des statistiques avec les résultats que j'obtiens. J'ai réussi à trier par vente réussies mais je voudrais pouvoir faire mes stats sur une certaine période. Et ma réponse JSON me donne la date de vente dans un format un peu bizarre :

                      Je pense que "endTime" correspond à la date et l'heure de vente.

                      Mais je voudrais tronquer cette variable pour n'obtenir que la date.

                      J'ai essayé :

                      var endTime		= item.listingInfo[0].endTime;
                      var date 		= endTime.slice(0,10);

                      Mais ça n'a pas l'aire de marcher  : La date s'affiche toujours de la même façon :

                      Et comment je peux faire pour ne sélectionner les ventes que sur une certaine période à partir de cette date tronquée ? Puis-je utiliser les opérateurs > et < comme en SQL ?

                      Pouvez vous m'aider ? Je peux ouvrir un nouveau sujet si vous préférez.

                      Merci d'avance

                      • Partager sur Facebook
                      • Partager sur Twitter
                        21 juin 2018 à 13:24:44

                        Tu peux utiliser l'objet Date de Js pour parser puis formatter la date comme tu veux

                        https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Date

                        let date = new Date('1995-12-17T03:24:00.000Z');
                        console.log(date.getMonth());
                        console.log(date.getFullYear());



                        • Partager sur Facebook
                        • Partager sur Twitter

                        Stats à partir de l'API eBay, Help !

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown