CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[Java] Récupération de données

lightraich
lightraich
Niveau 6
14 février 2012 à 23:49:40

Bonjour à tous,

Je souhaiterais savoir comment on récupère des valeurs à partir d'un site.

Dans le lien web qui se trouve dans le code, j'aimerai récupérer les valeurs de température à toutes les heures soit dans un tableau, soit en les stockant dans une base de données (SQLite).

Voici mon code pour le moment. A savoir que je fonctionne sous NetBeans en Java :
______________________________________________

package internet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class Main {

public static void main(String[] args)
{ String url =
"http://www.meteociel.fr/temps-reel/obs_villes.php
?code2=7118&jour2=1&mois2=0&annee2=2009&envoyer=OK
";
String code = getCode(url);
System.out.println(code);
}

public static String getCode(String url)
{ String code = "";
if(urlExists(url))
{ BufferedReader in = null;
try
{ URL site = new URL(url);
in = new BufferedReader(new InputStreamReader(site.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
{ code = code + "\n" + (inputLine);
}
in.close();
}
catch (IOException ex)
{ System.out.println("Erreur dans l'ouverture de l'URL : " + ex);
}
finally
{ try
{ in.close();
}
catch (IOException ex)
{ System.out.println("Erreur dans la fermeture du buffer : " + ex);
}
}
}
else
{ System.out.println("Le site n'existe pas !");
}
return code;
}

public static boolean urlExists(String url)
{ try
{ URL site = new URL(url);
try
{ site.openStream();
return true;
}
catch (IOException ex)
{ return false;
}
}
catch (MalformedURLException ex)
{ return false;
}
}

}
______________________________________________

Ce code, pour le moment, affiche uniquement le code source de la page demandée.

Voilà, si vous pouvez m'orienter vers une piste, je suis preneur.

Silvermo
Silvermo
Niveau 26
15 février 2012 à 08:14:13

à partir du code source, tu peux récupérer ces valeurs grâce aux expressions régulières, si vraiment y a pas d'API ou de Web Service météo pouvant te procurer ce genre de données :)

lightraich
lightraich
Niveau 6
15 février 2012 à 19:16:32

Je ne vois pas très bien comment, enfin comment ça fonctionne.

Silvermo
Silvermo
Niveau 26
15 février 2012 à 19:42:01

Les expressions régulières te permettent d'extraire un tas d'information à partir d'un texte (ici la source de la page).
Par exemple tu peux extraire toutes les températures par heure, comme tu le souhaites ici, avec très peu de code, mais pour tout l'aspect technique, je te laisse rechercher sur le web par toi-même, te faire un cours serait trop long, sans savoir si ça t'intéresse.

lightraich
lightraich
Niveau 6
15 février 2012 à 19:49:14

Je fais une expression régulière avec "km/h" et je récupère la valeur juste avant?

Je suis un peu perdu ^^

Silvermo
Silvermo
Niveau 26
15 février 2012 à 19:53:24

Oui c'est l'idée

+ d'info sur les expressions régulières en Java :
http://cyberzoide.developpez.com/java/regex/
(le doc date un peu mais ça devrait aider)

lightraich
lightraich
Niveau 6
15 février 2012 à 20:47:50

Re, merci pour ton site :)

J'ai rajouté ceci :

Pattern p = Pattern.compile("km/h ");
Matcher m = p.matcher(code);
int i = 0;
while(m.find()) {
i++;
System.out.println(i + ") Trouvé !");
}
}

J'ai eu 20 "trouvé" ce qui correspond bien aux 20 valeurs de vent que je dois récupérer.

Par contre, je ne sais pas comment lire la valeur avant.
J'ai cherché sur le net mais pas de réponses précises à ce sujet.

Silvermo
Silvermo
Niveau 26
15 février 2012 à 20:55:12

Bien, imaginons que les données se présentent ainsi :
... 16 km/h ...
... 24 km/h ...

Pour compléter ton expressions régulière, qui est actuellement "km/h " , tu peux indiquer à l'expression que tu souhaites récupérer la valeur décimale qui est juste avant "km/h"
Pour ce faire :
1) Compléter ton expression régulière en indiquant que avant "km/h", il y a un nombre.
Exemple : "\d+ km/h" (n'oublie pas qu'en Java, dans une chaine, tu dois échapper les caractères spéciaux avec un backslash, donc ici tu auras plutôt :
"\\d+ km/h"
\d signifie : caractère décimal
le + signifie : il y en a au moins un, il peut y en avoir plus

2) Quand c'est fait, entourer de parenthèses la partie de l'expression régulière qui correspond à ce que tu veux récupérer. On appelle ça des groupes.
Exemple : "(\\d+) km/h"
3) Tu peux récupérer la valeur de ce "groupe" , grâce à la méthode .group(i) de Matcher.
Exemple, dans ton cas, la variable m est une instance de Matcher, et tu peux faire m.group(1) qui récupère le premier groupe trouvé dans l'expression régulière.

Silvermo
Silvermo
Niveau 26
15 février 2012 à 20:56:42

Donc dans le
while (m.find()) {
System.out.println("Trouvé : " + m.group(1) );
}

Du moins dans mes souvenirs c'est ça :oui:

lightraich
lightraich
Niveau 6
15 février 2012 à 21:10:20

Oui c'est ça :)

Cela affiche bien les valeurs que je souhaite.

Je te remercie pour ton aide et le temps que tu m'as consacré.

Silvermo
Silvermo
Niveau 26
15 février 2012 à 21:11:18

De rien ^^ , bonne continuation !
C'est avec grand plaisir que je t'ai répondu !

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment