Rainette v3+, une évolution majeure

Ce plugin est une évolution majeure du plugin Rainette v1 et permet d’afficher les conditions et les prévisions météorologiques d’un lieu donné à partir d’un web service météorologique. Cette version supporte plusieurs services météo fournissant une API pour les conditions temps réel et les prévisions.

Il est clairement conseillé de migrer les versions v1 et v2 vers cette nouvelle version v3, la seule maintenue aujourd’hui.

De la v1 à la v3 ou v4

Les problèmes de la version v1

Depuis quelques années, Weather.com® - qui était le service unique utilisé par Rainette v1 - avait perdu en fiabilité, du moins pour les lieux à « faible popularité ». Il a été récemment arrêté après des années de bons services.

Il a donc été nécessaire de faire évoluer Rainette pour pallier au problème posé par Weather® et permettre à tous de disposer d’une météo locale.

Incompatibilité avec la version v1

La version v3 est un refactoring complet de la version v1 (et aussi v2). Outre l’utilisation transparente de divers services météo elle amène une grande facilité de configuration de nouveaux services, une cohérence plus importante dans l’API et les modèles et des prévisions horaires en plus des prévisions jour.

La version v3 n’assure donc aucune compatibilité avec les versions précédentes mais la migration reste simple comme on le verra plus avant dans l’article.

Caractéristiques minimales

La v3 demande d’avoir au minimum php 5.3.0 et ne fonctionne qu’en spip 3.1 et 3.2 !

La v4 elle est compatible avec spip 4 uniquement.

Extension de la liste des services météo

La principale évolution a donc consisté à acquérir et restituer les données météo fournies par différents services et permettre ainsi à chaque utilisateur de choisir le meilleur flux correspondant à sa localisation.

Suite à une petite étude des flux disponibles, la liste des services proposant une API de récupération des données météo retenus dans la version v3 de Rainette est donnée ci-dessous. Cette liste évolue rapidement, la tension mercantile sur ces services étant forte. Certains deviennent payants et d’autres disparaissent comme notre vieux compagnon Weather®.

  • OpenWeather, toujours gratuit et devenu le service par défaut de Rainette ;
  • Weatherbit.io, propose un plan gratuit ;
  • WeatherAPI, propose un plan gratuit ;
  • World Weather Online, uniquement payant mais toujours aussi performant ;
  • AccuWeather, propose un plan gratuit limité mais ce service historique est l’un des plus performants et complets ;
  • Météo Concept, propose un plan gratuit pour la France et quelques localités limitrophes en Belgique, au Luxembourg et en Andorre ;
  • Open-Meteo, dont le code est open-source (Github) et qui fournit un plan gratuit pour une utilisation non commerciale ou personnelle. Une bonne alternative à OpenWeather qui ne demande aucune inscription ;
  • APIXU, a disparu au profit de WeatherStack ;
  • WeatherStack qui finalement n’a pas été retenu étant donné la pauvreté de son offre gratuite et le prix de ses offres payantes ;
  • Weather Underground, ne fournit plus d’API ;
  • Weather.com®, a fermé définitivement.

Tous les services proposés sauf Open-Meteo, utilisent une clé d’inscription pour repérer les utilisations de leur flux.

Il est aujourd’hui conseillé d’utiliser le service OpenWeather qui est proposé par défaut. Open-Meteo, Weatherbit.io et WeatherAPI sont de bonnes alternatives qui proposent encore des options gratuites satisfaisantes. En version payante, le service World Weather Online est toujours d’excellente qualité et AccuWeather est le plus complet.

Configuration

Contrairement à la version v1, chaque service de Rainette v3 possède une configuration qu’il est impératif de positionner avant utilisation. Cette configuration permet de définir la clé d’inscription, le système d’unité et le type de résumé/icône (fourni par le service ou converti vers celui de Weather.com®).

Les services

Les services proposés dans la version actuelle sont connus du plugin par leur alias qui sont les suivants :

  • OpenWeather : owm ;
  • Weatherbit.io : weatherbit ;
  • WeatherAPI : weatherapi ;
  • World Weather Online : wwo ;
  • AccuWeather : accuweather.
  • Météo Concept : meteoconcept.
  • Open-Meteo : openmeteo.

Les alias permettent d’identifier le service dans l’appel des modèles.

Mise en œuvre du plugin

L’indication du lieu

Chaque service possède sa propre liste de format pour indiquer le lieu. Rainette v3 ne retient pas toutes les possibilités mais uniquement les formes suivantes (l’id Weather® n’est plus utilisé par les services actuellement proposés) :

  • le nom d’une ville complétée éventuellement par le pays ville,pays comme Paris,France ou Paris,FR ;
  • l’ID d’une ville de plus de 1000 habitants qui est un nombre entier (2988507 pour Paris), disponible à partir de la version 3.10.1. Il est possible de trouver la correspondance sur le site d’opendatasoft. Pour le service AccuWeather l’ID est spécifique et peut être récupéré via une requête spécifique de l’API (à lancer sur le site lui-même) ;
  • des coordonnées géographiques sous la forme latitude,longitude sachant que latitude et longitude sont exprimées en nombre réel avec un point pour séparer les décimales (45.7 par exemple) ;
  • le code INSEE d’une commune française ;
  • et une adresse IP.

Le mapping avec les services est le suivant :

ServicesVille, PaysCoordonnéesID VilleIPINSEE
OpenWeather x (code pays) x x
Weatherbit.io x (code pays) x x
WeatherAPI x x x
World Weather Online x x x
AccuWeather x
Météo Concept x x
Open-Meteo x

Unité

Quelque soit le service utilisé il est possible d’obtenir les données météorologiques dans le système métrique ou impérial US. La plupart du temps le service fournit la conversion mais quand ce n’est pas le cas, Rainette convertit de lui-même la donnée concernée.

Traduction

Certains services proposent une traduction du résumé météorologique dans une liste de langues. Dans ce cas, Rainette propose soit d’utiliser ce résumé (ce qui est conseillé) soit d’utiliser une conversion vers le résumé de Weather.com® qui lui est traduit en quelques langues par le plugin depuis sa création.

Actuellement tous les services proposés fournissent des traductions : il est donc conseillé de les utiliser. Sans précision dans l’appel du modèle, la langue du site est utilisée. Si cette langue n’est pas fournie par le service une configuration permet de choisir une langue alternative « proche ».

Les modèles

Le nom des modèles conditions, prévisions et informations n’ont pas été modifiés entre la v1 et cette v3. Néanmoins, les paramètres ont été modifiés, en particulier pour fournir le service à utiliser. Les appels sont fournis ci-dessus :

Modèle rainette_infos ou rainette_conditions
1. lieu obligatoire, désigne le lieu sous une forme qui dépend du service.
2. sous_modele facultatif, détermine la présentation des données temps réel. La valeur par défaut correspond au sous-modèle fourni par Rainette, à savoir, conditions_tempsreel.
3. service facultatif, désigne le service à utiliser. La valeur par défaut correspond à owm.
Modèle rainette_previsions
1. lieu obligatoire, désigne le lieu sous une forme qui dépend du service.
2. sous_modele facultatif, détermine la présentation des données prévisionnelles sur plusieurs jours. La valeur par défaut correspond au sous-modèle fourni par Rainette, à savoir, previsions_24h
3. premier_jour facultatif, désigne le premier jour de prévision (0 par défaut pour le jour courant).
4. nombre_jours facultatif, indique le nombre de jours de prévision (tous les jours possibles par défaut) à afficher à partir du premier_jour.
5. periodicite facultatif, fournit la périodicité des données de 1h à 24h pour les prévisions (la valeur par défaut dépend du service)
6. service facultatif, désigne le service à utiliser. La valeur par défaut correspond à owm.

Un modèle erreur permet d’afficher un problème de chargement des données mais cela reste transparent pour l’utilisateur. Les tableaux précédents permettent de facilement migrer de la v1 à la v3 pour ceux qui n’ont pas définis de sous-modèles propres.

Les sous-modèles

Les sous-modèles ont été complètement revus même si leur nom a été conservé ainsi que la fonctionnalité de base. Un sous-modèle de prévisions au format tabulaire a aussi été ajouté.

Un bloc de crédits a été inséré systématiquement pour chaque sous-modèle et chaque service. Il est important de respecter ces termes si vous devez définir vos propres sous-modèles.

Les filtres utilisés dans les sous-modèles ont été renommés et les paramètres d’utilisation ont parfois changé. Cela rend donc les modèles v3 incompatibles avec les modèles v1. Néanmoins, si vous utilisez les sous-modèles Rainette de base vous ne verrez pas de différence. Par contre, si vous avez défini vos propres sous-modèles, il est très facile de les adapter en consultant le tableau de correspondance des fonctions de l’API Rainette au paragraphe suivant et en regardant le code des sous-modèles v3 de Rainette.

L’API fonctionnelle

L’API fonctionnelle a évoluée entre la v1 et la v3. Pour que vous puissiez facilement adapter vos propres modèles voici le tableau de correspondance :

Filtre v1Filtre v3Utilisation
rainette_icone_meteo rainette_afficher_icone Affiche l’icone météo correspondant au résumé
rainette_resume_meteo rainette_afficher_resume Affiche le texte du résumé dans la langue choisie
rainette_afficher_tendance rainette_afficher_tendance Affiche la tendance de pression
rainette_afficher_direction rainette_afficher_direction Affiche la direction du vent
rainette_afficher_unite rainette_afficher_unite Affiche l’unité d’une donnée
rainette_croaaaaa_previsions rainette_coasser Appelle le sous-modèle de prévisions, de conditions ou d’informations choisi.
rainette_croaaaaa_conditions
rainette_croaaaaa_infos

Pour comprendre l’utilisation exacte de ces fonctions il est conseillé de lire le code des sous-modèles de Rainette voire de consulter la documentation du code du plugin https://code.plugins.spip.net/rainette/.

La gestion des icônes

Les services actuels peuvent parfois fournir via l’API un icône adapté à chaque résumé météo natif. Dans ce cas, ce mode d’affichage est celui proposé par défaut par Rainette. En outre, certains services proposent un ensemble de thèmes d’icônes directement accessibles via l’API. Le choix d’un thème est disponible dans la page de configuration du service.

Depuis la version 3.5.0, Rainette propose aussi deux autres possibilités pour afficher un icône météo :

  • utiliser un icône d’un thème installé en local et compatible avec le service concerné.
  • utiliser un icône d’un thème weather.com® installé en local. Ceci est particulièrement intéressant car il existe de nombreux jeux d’icônes pour weather.com®.
    Ces thèmes locaux sont installés dans themes/nom_du_service/nom_du_theme.

Rainette embarque un seul thème par service qui en propose. Le plugin Thèmes pour Rainette fournit de nombreux thèmes supplémentaires et une interface de visualisation. Tous ces paramètres sont modifiables dans la configuration de Rainette.

Les crédits

Il est important de respecter les crédits de chaque service lors de l’affichage de vos propres modèles comme cela est fait pour les modèles fournis par Rainette. Pour cela Rainette fournit un modèle de crédits nommé inc-credits.html que vous devez inclure dans vos modèles de la façon suivantes :

#INCLURE{fond=modeles/inc-credits,
	classe_div=condtr,
	env}

Le paramètre classe_div prend des valeurs différentes suivant le modèle Rainette utilisé et permet d’affecter une classe CSS au bloc englobant les crédits.

La standardisation des données

Rainette compile les données issues des différents service dans un tableau qui possède pour chaque mode une structure standard afin d’utiliser les modèles d’affichage de la même manière quelque soit le service.

Chaque tableau est propre à un mode mais possède un agencement commun sous la forme d’un tableau associatif et arborescent dont le premier niveau est composé des deux index suivants :

  • [’donnees’] : tableau associatif des données météorologiques pour les modes « conditions », « infos » ou « previsions »..
  • [’extras’] : tableau associatif qui contient les crédits, la configuration statique et dynamique positionnée par l’utilisateur et le code d’erreur éventuel.

Pour les modes conditions et infos, l’ensemble des données météorologiques sont directement incluses sous l’index [’donnees’].

Pour le mode prévisions, la structure est plus complexe. Tout d’abord , le premier niveau sous l’index [’donnees’] correspond au jour de la prévision, soit de 0 pour le jour courant à n pour le dernier jour proposé (varie suivant le service). Pour chaque jour, la structure distingue :

  • les données commune du jour comme la date, les heures de lever et coucher du soleil, les températures minimale et maximale de la journée ;
  • les données heure incluses dans l’index [’heure’]. Ces données sont indexées numériquement de 0 à n suivant la périodicité choisie. Pour une périodicité de 24h il n’existe qu’un index [0], pour une périodicité de 12h il existe deux index [0] et [1] etc. Sous chacun de ces index on retrouve une liste standard de données météorologiques.

L’article de la Taverne https://blog.smellup.net/spip.php?a... décrit la structure de données exacte pour chaque mode.

Démo de Rainette

Une page de démo complète est disponible à l’adresse ?page=demo/rainette. N’hésitez pas à l’utiliser pour comparer les services sur votre lieu préféré (les clés d’enregistrement doivent avoir été saisies pour les services concernés).

Historique des modifications majeures

  • 4.1.10 : Ajout du service Open-Meteo et de la donnée « rafales de vent »
  • 4.1.8 : Robustifier le code pour PHP 8.2 et passage des caches en JSON
  • 4.1.2 : Version spip 4 et ajout du service Météo Concept
  • 3.2.1 : Déplacement du cache de tmp/cache vers local/cache-rainette/ afin d’éviter de supprimer les caches Rainette lors d’un vidage du cache SPIP. Cette fonction est utile pour limiter les appels aux services qui sont de plus en plus réglementés.
  • 3.3.2 : Ajout du traitement et de l’affichage des erreurs renvoyées par les services eux-mêmes.
  • 3.3.3 : Introduction d’un filtre sur l’envoi des requêtes afin de ne jamais dépasser les seuils autorisés par les services pour une unité de temps donnée.
  • 3.4.4 : Ajout du service Weatherbit.io et amélioration de la configuration des services .
  • 3.5.0 : Ajout de la gestion des thèmes d’icônes pour tous les services.
  • 3.6.0 : Passage à Cache Factory pour la gestion des caches Rainette.
  • 3.7.0 : Ajout du service WeatherStack censé remplacer APIXU mais qui sera finalement supprimé.
  • 3.8.0 : Nettoyage dans les services ; Weather®, APIXU sont désactivés, OpenWeatherMap devient le service par défaut et beaucoup de corrections dans les services (versions successives 3.8.z)
  • 3.8.7 : Ajout de la nébulosité utilisable dans les modèles
  • 3.9.0 : Suppression du service WeatherStack qui est un vrai foutage de gueule !
  • 3.10.0 : Ajout du service WeatherAPI
  • 3.10.1 : Ajout du city id pour identifier le lieu des services OpenWeather et Weatherbit.io
  • 3.11.0 : Mise en conformité avec la version multi-config de Cache Factory
  • 3.11.1 : Correction des limites de requêtes pour certains services
  • 3.12.0 : Passage de la configuration des services en YAML. Rainette nécessite maintenant le plugin YAML 2.0.11 au minimum.
  • 3.12.1 : Ajout d’un bouton pour recharger la configuration YAML des services si besoin et ajout du service AccuWeather.

Discussion

2 discussions

  • 2

    Bonjour

    Je viens de tester le nouveau service Open Météo et je constate que la ville ne s’affiche pas, contrairement à d’autres services.

    • Oui c’est normal, si tu regardes comment spécifier le lieu seul les coordonnées géographiques sont possibles. De fait, je ne connais pas la ville précisément et le service ne renvoie rien de plus clair non plus. C’est donc à toi dans l’affichage de le prévoir éventuellement.

    • Ah oui, je n’avais pas fait attention au tableau de mapping avec les services.
      Désolé pour le bruit.

    Répondre à ce message

  • 4

    Bonjour à tous,
    J’observe sur le site d’une commune qui utilise votre plugin des erreurs d’affichage sur les prévisions, y compris dans ma page de démo :

    Le service OpenWeather ne fournit actuellement aucune prévision météorologique sur le lieu Paris,France.
    Veuillez consulter le message du service ci-dessous.
    (401 - Invalid API key. Please see https://openweathermap.org/faq#error401 for more info.)

    Observez-vous ces erreurs vous aussi ?
    Comment faire pour les corriger ?
    J’ai désactivé/réactivé ma clé OpenWeather, j’ai testé avec une nouvelle clé, j’ai vérifié que j’appelle les bons modèles dans mon code mais rien n’y fait.
    Un grand merci pour votre aide !

    • Bonjour,

      Je viens de faire le test avec Paris à partir de la démo, les conditions et les prévisions fonctionnent parfaitement.

    • Merci beaucoup Éric, ça vient donc de chez moi 🤔 Les conditions fonctionnent mais pas les prévisions.
      Je vais contacter les recherches.
      Bonne soirée !

    • Il semblerait que ma clé API de OpenWeather ne me permette plus d’accéder aux prévisions. J’ai in compte gratuit, Est-ce que toi Eric, tu payes un abonnement ?
      Merci d’avance

    • Non j’ai un compte gratuit créé il y a longtemps. Je ne vois pas ce qui peut provoquer cette invalidation de la clé.

      Tu l’as correctement copiée en config ?

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom