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

Fermé
Skysynth - 5 mai 2019 à 15:41
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 16 mai 2019 à 21:24
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.
A voir également:

4 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
5 mai 2019 à 23:49
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
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
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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
16 mai 2019 à 21:10
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
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
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
16 mai 2019 à 21:24
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