RFE27
Posts: 15
Joined: Tue May 28, 2019 8:49 am

Affficher les prévisions météo france

Sun Aug 18, 2019 1:02 pm

Bonjour. J'ai un raspberry 3B+ avec raspbian que je programme en Python 3.
Je fais un réveil et j'aimerais afficher les prévisions météo pour les prochaines 24 heures dans un Frame tkinter.
Je préférerais utiliser les données de météo france si possible.
J'ai trouvé ce widget qui correspond exactement à ce que je veux afficher:
http://www.meteofrance.com/meteo-widget
mais est-ce qu'il y a un moyen simple de l'intégrer dans un Frame Tkinter ?

Sinon, comment faire ?
Merci pour les réponses.


iznobe
Posts: 383
Joined: Sun Feb 05, 2017 4:14 pm
Location: Avignon , FRANCE

Re: Affficher les prévisions météo france

Mon Aug 19, 2019 3:58 pm


RFE27
Posts: 15
Joined: Tue May 28, 2019 8:49 am

Re: Affficher les prévisions météo france

Mon Aug 19, 2019 5:30 pm

Merci pour les réponses, mais j'ai l'impression que tkinterhtml ne gère pas le javascript, alors que le widget météo France est en javascript.
D'autres pistes ?

RFE27
Posts: 15
Joined: Tue May 28, 2019 8:49 am

Re: Affficher les prévisions météo france

Sun Aug 25, 2019 3:51 pm

Finalement, je me réponds à moi-même si ça peut servir à quelqu'un:
j'ai utilisé beautifulsoup4 pour parser le html de la page web de météofrance et j'ai récupéré les données dont j'ai besoin.
A+

RomGuich
Posts: 1
Joined: Fri Feb 07, 2020 8:06 am

Re: Affficher les prévisions météo france

Fri Feb 07, 2020 8:41 am

Bonjour,
je m'intéresse actuellement à la conception d'un miroir connecté affichant entre autre la Météo.
Je souhaiterais également utiliser les données de Météo France et les afficher dans une fenêtre Tkinter.

RFE 27 pouvez vous donner quelques informations supplémentaire sur l'utilisation de beautifulsoup4 pour parser le html de la page web de météo france? Notamment quelles types d'informations sont récupérées? Quelles sont celles à utiliser?

Je vous remercie par avance pour votre réponse.

totoharibo
Posts: 4329
Joined: Thu Jan 24, 2013 8:43 am

Re: Affficher les prévisions météo france

Fri Feb 07, 2020 12:08 pm

en console c'est marrant (faut la faire assez grande : la fenêtre)
curl wttr.in

RFE27
Posts: 15
Joined: Tue May 28, 2019 8:49 am

Re: Affficher les prévisions météo france

Sat Feb 08, 2020 7:28 pm

Bonjour RomGuich.
Sur météo France, je récupère la météo et la température des heures à venir pour ma ville (mais on peut aussi récupérer la vitesse du vent ou la météo des prochains jours...): je génère une liste de dictionnaires en utilisant beautifulsoup:

[{'heure_fin': 22, 'meteo': ' Éclaircies ', 'temperature': ' 7°C ', 'heure_debut': 19}, {'heure_fin': 1, 'meteo': ' Éclaircies ', 'temperature': ' 5°C ', 'heure_debut': 22}, {'heure_fin': 4, 'meteo': ' Très nuageux ', 'temperature': ' 5°C ', 'heure_debut': 1}, {'heure_fin': 7, 'meteo': ' Éclaircies ', 'temperature': ' 4°C ', 'heure_debut': 4}, {'heure_fin': 10, 'meteo': ' Éclaircies ', 'temperature': ' 4°C ', 'heure_debut': 7}, {'heure_fin': 13, 'meteo': ' Éclaircies ', 'temperature': ' 6°C ', 'heure_debut': 10}, {'heure_fin': 16, 'meteo': ' Éclaircies ', 'temperature': ' 11°C ', 'heure_debut': 13}, {'heure_fin': 19, 'meteo': ' Très nuageux ', 'temperature': ' 12°C ', 'heure_debut': 16}]

J'ai écrit une classe qui permet de récupérer le contenu de certaines balises du html de la page de météo france de ma ville:

Code: Select all

# -*- coding: utf-8 -*-
"""
Meteo France raining forecast.
"""

import re
import requests
from bs4 import BeautifulSoup



WEATHER_FORECAST_URL = 'http://www.meteofrance.com/previsions-meteo-france/{}/{}'


class meteofranceError(Exception):
    """Raise when errors occur while fetching or parsing MeteoFrance data"""
    pass


class meteofranceClient():
    """Client to fetch and parse data from Meteo-France"""
    def __init__(self, update=False):
        """Initialize the client object."""
        self.postal_code = '21200'
        self._city_slug = 'beaune'
        self._weather_html_soup = False
        self._insee_code = "210540"
        self._type = None
        self._data = []
        if update:
            self.update()

    def update(self):
        """Fetch new data and format it"""
        self._fetch_foreacast_data()
        self._format_data()



    def _fetch_foreacast_data(self):
        """Get the forecast and current weather from Meteo-France."""

        url = WEATHER_FORECAST_URL.format(self._city_slug, self.postal_code)

        try:
            result = requests.get(url, timeout=10)
            if result.status_code == 200:
                soup = BeautifulSoup(result.text, 'html.parser')
                if soup.find(class_="day-summary-label") is not None:
                    self._weather_html_soup = soup
                    self._parse_insee_code(result.text)
                    return
            raise meteofranceError("Error while fetching weather forecast")
        except Exception as err:
            raise meteofranceError(err)


    def _parse_insee_code(self, html_content):
        insee_code = re.findall('codeInsee:"([^"]*)"', html_content)
        if len(insee_code) is not 0:
            self._insee_code = insee_code[0]


    def _format_data(self):
        """Format data from JSON and HTML returned by Meteo-France."""
        try:
            #self._data["fetched_at"] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

            soup = self._weather_html_soup
            if soup is not False:
                previsions_horaires = soup.find(class_="prevision-horaire")
                #On récupère l'heure de début (qui est avant l'heure d'accès aux données car on obtient en premier la météo actuelle
                #Les heures vont ensuite de 3 en 3
                heure_debut = int(re.sub("[^0-9\-]","",previsions_horaires.find(class_="active").find(class_="time-range-trigger").find("time").string))
                #Pour chaque tranche de 3 heures, on accède aux données (météo, température)
                contenu_previsions_horaires = previsions_horaires.find_all(class_="content")
                for contenu in contenu_previsions_horaires:
                    if contenu.find(class_="day-data"):
                        dico_tranche_3_heures = dict()
                        dico_tranche_3_heures["heure_debut"] = heure_debut
                        heure_debut = (heure_debut+3) %24
                        dico_tranche_3_heures["heure_fin"] = heure_debut
                        dico_tranche_3_heures["meteo"] = contenu.find(class_="day-summary-label").string
                        dico_tranche_3_heures["temperature"] = contenu.find(class_="day-summary-temperature").string
                        self._data.append(dico_tranche_3_heures)

        except Exception as err:
            raise meteofranceError("Error while formatting datas: {}".format(err))


    def get_data(self):
        """Return formatted data of current forecast"""
        return self._data

if __name__ == '__main__':
    client = meteofranceClient(True)
    print(client.get_data())



Je me suis inspiré de ce site: https://pypi.org/project/meteofrance/#files

On peut ensuite ajouter des icônes (nuages, soleil...) en fonction de la météo...
A+

Vince84
Posts: 29
Joined: Wed Jan 10, 2018 9:12 am

Re: Affficher les prévisions météo france

Sat Feb 08, 2020 8:49 pm

Bonjour,
serait-il possible d'avoir le code de tout ton projet ?

merci

RFE27
Posts: 15
Joined: Tue May 28, 2019 8:49 am

Re: Affficher les prévisions météo france

Sun Feb 09, 2020 10:46 am

Oui, c'est de l'open source ;)

http://maths-info.pagesperso-orange.fr/ ... Reveil.zip

Par contre, je n'ai pas encore fini (manque de temps). Mon réveil (RPi avec écran tactile) marche en réseau avec un PC. J'ai presque fini l'IHM sur le PC qui permet de régler entre autres les alarmes, le réseau fonctionne, mais l'IHM sur le RPi n'a pas été faite.
Pour faire fonctionner ce que j'ai fait, il faut installer une partie du code sur un RPi et la connexion réseau doit fonctionner avant que l'IHM PC s'affiche.

Si ça peut aider... ;)

totoharibo
Posts: 4329
Joined: Thu Jan 24, 2013 8:43 am

Re: Affficher les prévisions météo france

Sun Feb 09, 2020 5:43 pm

j'ai ça qui donne le temps actuel en synthèse audio (sur ma radio je n'ai pas d'écran juste un écran, une interface IR et une LED RVB)
le mpg123 à la fin c'est pour remettre la radio

Code: Select all

meteo()
107 {
108 #a besoin du paquet html2text
109 #lit l ameteo et traite
110 #http://rp5.ru/docs/xml/fr?id=5020
111 #ligne complète avec previsions au dessous
112 #necessite le package html2text
113 #echo "#http://rp5.ru/Temps_%C3%A0_Saint-Denis,_%C3%8Ele-de-France"
114 kill $(ps ax |awk '$5 ~ /mpg123/ {printf "%s ",$1}')
115 wget  -q -O - http://cunimb.net/decodemet.php?station=LFPB| html2text -width 400 > /tmp/mto.txt
116 awk '/vent/{sub($1,"",$0);vent=$0}; /température/ {sub($1,"",$0);gsub("-","moins ",$0);temp=$0}/humidité/ {humid= $    0} END{tout=vent ", " temp humid; gsub("  " "",tout);print tout}' /tmp/mto.txt > /tmp/meteo.txt
117 
118 pico2wave -l fr-FR -w /tmp/xxx.wav "$(cat /tmp/meteo.txt)"
119 aplay /tmp/xxx.wav
120 mpg123    -m ${radios[$j]} &
121 }
122 

RFE27
Posts: 15
Joined: Tue May 28, 2019 8:49 am

Re: Affficher les prévisions météo france

Sun Feb 09, 2020 6:22 pm

OK.
Mon but était aussi d'avoir les prévisions de météo france, qui sont certainement plus fiables.

totoharibo
Posts: 4329
Joined: Thu Jan 24, 2013 8:43 am

Re: Affficher les prévisions météo france

Mon Feb 10, 2020 3:55 pm

ce sont les relevés cycliques automatiques des aéroports (toutes les 3 heures je crois)
pas fiable :lol:

Météo France n'est pas obligatoirement le meilleur (Cocoricouac comme dirait le canard.)

Vu aucun endroit chez M&téo France où c'est utilisable à moins d'afficher des cartes.

J'avais recherché en son temps mais je n'avais rien trouvé de mieux.

jelopo
Posts: 1531
Joined: Wed Oct 17, 2012 7:53 pm

Re: Affficher les prévisions météo france

Mon Feb 10, 2020 5:41 pm

Bonjour,

Pour info, j'utilise le 2 services gratuits de l'API de openweathermap. Je trouve cela très facile à utiliser.

https://openweathermap.org/price

A+

Vince84
Posts: 29
Joined: Wed Jan 10, 2018 9:12 am

Re: Affficher les prévisions météo france

Thu Feb 13, 2020 8:00 am

Merci pour ton code.

J'essaye de faire un tableau de bord avec météo, agenda, bouton ouverture portail/garage.
J'hésite entre du code python + IHM (??? je ne sais pas encore laquelle) ou du Home Assistant (automatisation). je trouve home assistant un peu compliqué, j'ai du mal à tout comprendre.

Return to “Français”