Par défaut Extraire plusieurs textes d'un site WEB en JAVA

Skysynth -  
KX Messages postés 19031 Statut Modérateur -
Bonjour/Bonsoir !

Je cherche à enregistrer dans un tableau de String de taille 100, tous les pseudos des joueurs présent dans ce club : https://brawlstats.com/club/282YLRCR

Problème étant, il doit se mettre à jour toutes les heures, donc pas moyen de le faire à la mano. Comment faire ? Je ne trouve pas d'ID ou de class qui les distinguent des autres textes.

4 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Le site web exécute une requête à cette API : https://api.brawlstats.com/v6/clubs/profiles/282YLRCR
    C'est elle qui transmet les données, au format JSON, pour remplir le site.
    Un exemple de contenu : https://codebeautify.org/online-json-editor/cb7f92fc
    1
  2. Skysynth
     
    Bonjour,

    C'est génial ! Vous sauriez m'expliquer comment je peux envoyer une requête à cette API via un programme Java et récupérer ces données ?
    0
  3. Skysynth
     
    Bonjour/Bonsoir !

    Alors j'ai pas mal avancé, j'ai contacté un des programmeurs de l'API ( un français très sympathique au passage ) qui m'a tout expliqué.

    J'ai chargé le profile d'un joueur, voici la réponse :

    Code :

    {"tag":"LLUL2Y82","id":{"high":9,"low":2673228},"name":"cassidokan","nameColorCode":"CB5AFF","brawlersUnlocked":20,"victories":2996,"soloShowdownVictories":253,"duoShowdownVictories":194,"totalExp":64168,"expFmt":"948/1130","expLevel":110,"trophies":8773,"highestTrophies":8791,"avatarId":28000004,"avatarUrl":"https://media.githubusercontent.com/media/fourjr/bs-assets/master/player_icons/28000004.png","bestTimeAsBigBrawler":"1m 57s","bestRoboRumbleTime":"6m 9s","hasSkins":true,"club":{"id":{"high":7,"low":473519},"tag":"282YLRCR","name":"Oblivion [FR]","role":"Senior","badgeId":6,"badgeUrl":"https://media.githubusercontent.com/media/fourjr/bs-assets/master/club_badges/clan_badge_02_03.png","members":98,"trophies":945502,"requiredTrophies":9000,"onlineMembers":12},"brawlers":[{"name":"Colt","hasSkin":false,"skin":null,"trophies":529,"highestTrophies":548,"power":10,"rank":20},{"name":"Bull","hasSkin":false,"skin":null,"trophies":505,"highestTrophies":509,"power":7,"rank":20},{"name":"Dynamike","hasSkin":false,"skin":null,"trophies":500,"highestTrophies":500,"power":7,"rank":20},{"name":"Rosa","hasSkin":false,"skin":null,"trophies":500,"highestTrophies":500,"power":5,"rank":20},{"name":"Barley","hasSkin":true,"skin":"Wizard Barley","trophies":481,"highestTrophies":498,"power":7,"rank":19},{"name":"Brock","hasSkin":false,"skin":null,"trophies":460,"highestTrophies":490,"power":8,"rank":19},{"name":"Bo","hasSkin":false,"skin":null,"trophies":460,"highestTrophies":491,"power":7,"rank":19},{"name":"Poco","hasSkin":false,"skin":null,"trophies":427,"highestTrophies":442,"power":7,"rank":18},{"name":"Shelly","hasSkin":false,"skin":null,"trophies":425,"highestTrophies":433,"power":7,"rank":18},{"name":"Jessie","hasSkin":false,"skin":null,"trophies":425,"highestTrophies":440,"power":7,"rank":18},{"name":"El Primo","hasSkin":false,"skin":null,"trophies":424,"highestTrophies":429,"power":7,"rank":18},{"name":"Piper","hasSkin":false,"skin":null,"trophies":424,"highestTrophies":433,"power":6,"rank":18},{"name":"Carl","hasSkin":false,"skin":null,"trophies":422,"highestTrophies":422,"power":5,"rank":18},{"name":"Leon","hasSkin":false,"skin":null,"trophies":420,"highestTrophies":430,"power":5,"rank":18},{"name":"Frank","hasSkin":false,"skin":null,"trophies":410,"highestTrophies":420,"power":6,"rank":18},{"name":"Rico","hasSkin":false,"skin":null,"trophies":401,"highestTrophies":482,"power":8,"rank":19},{"name":"Darryl","hasSkin":false,"skin":null,"trophies":401,"highestTrophies":411,"power":7,"rank":17},{"name":"Nita","hasSkin":false,"skin":null,"trophies":399,"highestTrophies":407,"power":7,"rank":17},{"name":"Penny","hasSkin":false,"skin":null,"trophies":397,"highestTrophies":424,"power":6,"rank":18},{"name":"Pam","hasSkin":false,"skin":null,"trophies":363,"highestTrophies":382,"power":7,"rank":17}]}


    A travers tout ce blabla, j'aimerais pouvoir récupérer par exemple le pseudo du joueur ("name":"cassidokan"), ses trophées actuels("trophies:8773") et pour aller plus loin, pourquoi pas récupérer tous les noms de ses brawlers avec ses trophées.

    Problème étant, je rencontre une erreur IllegalStateException et je n'arrive pas à m'en défaire. Des idées ?
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Bonjour,

      Tu peux utiliser une bibliothèque de manipulation du JSON, par exemple https://search.maven.org/artifact/org.json/json/20180813/bundle

      import org.json.JSONObject;
      
      JSONObject json = new JSONObject("{...}");
      String name = json.getString("name");
      0
  4. Skysynth
     
    Oups ! Je n'ai pas pu envoyer le screen, j'avais pas remarqué, pas grave regarde ce que j'ai fait :

    En enlevant toute la partie obsolète de la requête, voici les lignes importantes qui génère un JSONException : JSONObject ["tag"] not found

     JSONObject json = new JSONObject(response.body());

    System.out.println("name = " + json.get("tag")); // JSONException not found
    System.out.println("trophies = " + json.getInt("trophies"));
    0
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Tu peux utiliser
      json.keySet()
      pour savoir quelles sont les clés sur lesquelles tu peux faire un
      get(key)
      ou même faire json.toString pour vérifier la structure du JSON manipulé.
      0