IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

API, JSON et recherches


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut API, JSON et recherches
    Bonsoir,

    Le jeu Path of Exile met à disposition une API qui répertorie les objets du jeu mis en vente:

    http://www.pathofexile.com/api/public-stash-tabs/?id=

    Cette API nous renvoie un fichier JSON qui pour simplifier contient une toute petite partie des ces objets ainsi qu'un "next_change_id" qui permet d'obtenir un autre fichier JSON avec une autre partie des objets et un nouveau "next_change_id", ainsi de suite jusqu'à ce que l'API ne renvoie plus rien.

    J'ai réaliser un petit script (en PHP) qui affiche les objets souhaités à partir de cette API:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?php
    $limite = 1;
     
    while($limite < 20){ // dans la limite de 20 résultats
     
    $listecode = file_get_contents("http://api.pathofexile.com/public-stash-tabs/?id=" . $liste["next_change_id"] . ""); // On récupère le JSON
    $liste = json_decode($listecode,true); //On décode
     
    foreach($liste["stashes"] as $coffre){ // On recherche dans le JSON
    	if($coffre["public"] == true){ //Si il y a un coffre publique
    		foreach($coffre["items"] as $objet){ // On recherche dans le coffre publique
    			if($objet["typeLine"] == "Recurve Bow"){ //Infos de recherche à préciser ici
    			echo $coffre["accountName"] . "</br>"; // on affiche le propriétaire de l'objet
    			echo "Image: <img src=\"" . $objet["icon"] . "\"/></br>"; // on affiche l'image de l'objet
    			$limite++; // on incrémente le nombre de résultat trouvé
    			}
    		}				
    	}
    }
     
    }//Fin while
     
    ?>
    Le soucis c'est qu'il y a des centaines de millier d'objets et que par conséquent il est impossible de faire transiter toutes ces données à chaque recherche. J'ai dû d'ailleurs limiter mon script à 30 résultats pour ne pas dépasser les 5 secondes de délais.

    Je dois donc trouver un moyen de contourner ce problème mais j'avoue ne pas avoir d'idées précises.

    J'ai pensé créer un fichier JSON géant et le mettre automatiquement à jour avec les nouvelles entrées toutes les minutes, le problème c'est que les objets déjà présents qui seraient vendus et/ou retirés resteraient dans le liste.

    Je suis assez perdu je dois dire, donc si quelqu'un a une idée je suis tout ouïe.

    Cordialement.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Vous parlez d'un soucis mais vous n'expliquez pas en quoi il consiste.
    Que cherchez vous à faire qui demande de récupérer tous les objets en vente ?

  3. #3
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Je cherche à faire un formulaire qui détaille les spécificités de l'objet recherché qui renverrait la liste de tous les objets en vente correspondants à cette recherche comme le fait ce site:

    http://poe.trade/

    Le problème de mon script c'est qu'il doit demander tous les fichiers JSON à chaque recherche, chaque fichier faisant 4Mo il doit bien y en avoir pour plusieurs Go en tout.

    Je dois donc trouver un moyen d'avoir "une copie" des ces fichiers en local et que cette copie soit mise à jour toutes les minutes avec l'ajout des nouveaux objets et la suppression des anciens.

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    la documentation a l'air de dire qu'il n'y a pas besoin de tout récupérer à chaque fois
    http://www.pathofexile.com/developer...lic-stash-tabs

    mais je ne connais pas le jeu donc je ne comprends pas exactement comment ça fonctionne. un "stash" se traduit par une cachette donc je suppose qu'il peut y avoir plusieurs objets par cachette ?
    mais qu'est ce qu'un "tab" ?
    et j'ai lancé plusieurs requêtes et j'ai remarqué que souvent le retour se limite à 1275 cachettes. est ce que ça correspond à quelques choses dans le jeu ? par exemple que seules 1275 ventes peuvent se faire et s'il y en a plus, les joueurs doivent attendre pour pouvoir vendre un nouvel objet ?

    de plus sur le site poe.trade, il y a une date indiquant le temps depuis lequel l'objet est en vente mais dans les données en retour, il n'y pas de date indiquée donc il y a peut-être d'autres sources d'informations

  5. #5
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Chaque joueur dispose d'un coffre dans le jeu pour y ranger ses objets (Stash).
    Chaque coffre comporte plusieurs onglet (Tab) qui peuvent être privé ou public. Si l'onglet est public les objets à l'intérieur sont en vente et on peut leur attribuer un prix si on le souhaite.

    Donc 1275 Stash correspond à 1275 joueurs.

    Donc non il n'y a pas de limite d'objet en vente.

    Pour la date sur POE Trade je pense qu'ils l'ajoutent tout simplement au moment où l'objet est listé.

    Je pense que POE Trade fait une requête toutes les minutes environ à partir du dernier ID (donc qui ne renvoie donc que les Stash qui ont été modifiés durant cette minute) et met à jour sa BDD local en ajoutant la date. Quand un joueur lance une recherche, leur site renvoie les 99 objets les plus récents correspondants à cette recherche.

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    si 1275 est le nombre limite de joueur cela veut dire que la requête renvoie tous les résultats en une seule fois
    donc l'identifiant "next_change_id" sert juste à savoir s'il y a eu des modifications et si vous voulez utiliser les derniers résultats, il suffit de faire la recherche sur le dernier identifiant. et à ce moment vous aurez alors tous les objets en vente actuellement

    par contre depuis 2 heures je parcours les identifiants et j'ai du surement faire plus de 1 000 requêtes donc si j'arrive au bout je vous ferais signe

  7. #7
    Candidat au Club
    Homme Profil pro
    sans emploi
    Inscrit en
    Août 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Août 2014
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    1275 c'est surement la limite par fichier, pour avoir les 1275 suivants il faut utiliser l'ID et ainsi de suite.

    J'ai trouvé ce site en fouillant bien:

    http://poe.ninja/stats

    Si je comprends bien il nous dit qu'il y a 216 000 000 de coffres, donc avec 1275 coffres à chaque fois qu'il faudrait 170 000 requêtes pour tout obtenir. Dans les faits, seuls les objets des dix derniers jours sont réellement intéressants. Du coup il "suffit" de mettre à jour régulièrement un fichier local et de limiter la recherche à 100 résultats et aux objets de moins de 7 jours pour le pas chercher indéfiniment.

    Dans tous les cas je vous remercie de m'aider.

    EDIT:

    Je pense avoir trouver une partie de la solution, à savoir l'exécution automatique du script. Pour ça je pense utiliser Cron qui est disponible avec mon hébergement. Du coup j'ai créé le sujet dans javascript à cause du JSON mais PHP serait peut-être plus adapté.

Discussions similaires

  1. Impossibilité d'utiliser l'API JSON dans une servlet
    Par SpeedOverflow dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 21/12/2011, 09h40
  2. API pour la recherche des sites à partir de leur propriétaire
    Par namasante dans le forum Développement Web en Java
    Réponses: 15
    Dernier message: 20/07/2011, 19h30
  3. API JSON Lib - Erreur java.lang.NoSuchMethod
    Par Marvelll dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 29/01/2010, 11h04
  4. API moteur de recherche
    Par Terminator dans le forum Général Java
    Réponses: 6
    Dernier message: 24/02/2009, 17h31
  5. [Framework] API JSON
    Par ouioui2000 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 20/03/2006, 11h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo