Browse Source

Mise au point des prévisions AccuWeather.

Utilisation des nouvelles conversions disponibles dans wwo et suppression de la fonction spécifique devenue inutile.
Mise au point des modèles de prévision 12h et 24h t de leurs CSS.
Amélioration de la visibilité de l'icone verglas d'AccuWeather.
On passe la configuration de Rainette après la fonction maj_plugin en espérant que cela suffise pour que _DIR_PLUGIN_RAINETTE soit disponible.
Correction de la description du plugin.
Amélioration de la démo.
master
Eric Lupinacci 3 months ago
parent
commit
d4888806b4
13 changed files with 96 additions and 112 deletions
  1. +6
    -1
      demo/rainette.html
  2. +12
    -3
      inc/meteo_charger.php
  3. +3
    -3
      inc/rainette_normaliser.php
  4. +5
    -7
      lang/paquet-rainette_fr.php
  5. +0
    -2
      modeles/previsions_12h.html
  6. +6
    -5
      modeles/previsions_24h.html
  7. +4
    -4
      rainette.css
  8. +5
    -5
      rainette_administrations.php
  9. +33
    -30
      services/accuweather.php
  10. +14
    -14
      services/accuweather.yaml
  11. +0
    -36
      services/wwo.php
  12. +8
    -2
      services/wwo.yaml
  13. BIN
      themes/accuweather/original/24.png

+ 6
- 1
demo/rainette.html View File

@ -76,11 +76,16 @@
[(#MODELE{rainette_previsions,lieu=#GET{lieu},premier_jour=0,sous_modele=previsions_24h, service=#GET{service}})]
</div>
[<div class="clearfix">
<h3 class="h3">Affichage debug du tableau des pr&eacute;visions</h3>
<h3 class="h3">Affichage debug du tableau des pr&eacute;visions 24h</h3>
<p>Seul le jour suivant le jour courant est affich&eacute; \(index \[1\] du sous-tableau \[donnees\]\). La p&eacute;riodicit&eacute; utilis&eacute;e est celle par d&eacute;faut pour le service concern&eacute;.</p>
<br />
(#GET{lieu}|rainette_debug_afficher_cache{previsions, #GET{service}})
</div>]
<div class="clearfix">
<h3 class="h3">Utilisation du mod&eacute;le <strong>rainette_previsions 12h</strong>, pour le jour courant et le lendemain (premier_jour=0, nombre_jours=2)</h3>
[(#MODELE{rainette_previsions,lieu=#GET{lieu},premier_jour=0,nombre_jours=2,sous_modele=previsions_12h, service=#GET{service}})]
</div>
</div>
<h2 class="h2">2.0 - COMPARAISON DES DONNEES DE CHAQUE SERVICE</h2>


+ 12
- 3
inc/meteo_charger.php View File

@ -34,10 +34,10 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* - `1`, les prévisions de la journée pour chaque heure
* - `0`, pour les modes `conditions` et `infos`
* @param string $service Le nom abrégé du service :
* - `owm` pour Open Weather Map, la valeur par défaut car elle propose un plan gratuit
* - `owm` pour OpenWeather, la valeur par défaut car elle propose un plan gratuit
* - `weatherbit` pour Weatherbit.io
* - `wstack` pour WeatherStack qui a remplacé APIXU
* - `darksky` pour Dark Sky
* - `weatheapi` pour WeatherAPI
* - `accuweather` pour AccuWeather
* - `wwo` pour World Weather Online
*
* @return array Le contenu du fichier cache contenant les données à jour demandées.
@ -171,6 +171,15 @@ function inc_meteo_charger_dist($lieu, $mode = 'conditions', $periodicite = 0, $
// -2- complément du tableau avec les données propres à chaque service
// -3- complément du tableau avec les données communes à tous les services
foreach ($flux as $_index_jour => $_flux_jour) {
// Pour les prévisions, certains services proposent les flux heure non pas en index numérique
// mais en index alpha comme 'day' ou 'night'.
// Pour ces services, il est nécessaire de réorganiser le flux jour pour que les flux heure
// soient adressables et numériques.
$arranger = "${service}_flux2${mode}";
if (function_exists($arranger)) {
$_flux_jour = $arranger($_flux_jour, $periodicite, $configuration);
}
// Pour les informations et les conditions les données récupérées concernent toute la même "période".
// Par contre, pour les prévisions on distingue 2 type de données :
// - celles du jour indépendamment de la période horaire


+ 3
- 3
inc/rainette_normaliser.php View File

@ -525,11 +525,11 @@ function langue_determiner($configuration_service) {
/**
* @param $service
* @param $mode
* @param $bloc
*
* @return array
*/
function configuration_service_lire($service, $mode) {
function configuration_service_lire($service, $bloc) {
// Lecture de la configuration du service.
include_spip('inc/config');
@ -537,7 +537,7 @@ function configuration_service_lire($service, $mode) {
// On renvoie le bloc du mode concerné et le bloc général du service.
return
array_merge($configuration_service[$mode], $configuration_service['service']);
array_merge($configuration_service[$bloc], $configuration_service['service']);
}
/**


+ 5
- 7
lang/paquet-rainette_fr.php View File

@ -8,15 +8,13 @@ if (!defined('_ECRIRE_INC_VERSION')) {
$GLOBALS[$GLOBALS['idx_lang']] = array(
// R
'rainette_description' => 'Cette nouvelle version de Rainette permet de choisir son service météo parmi Weather.com, Wunderground, World Weather Online ou Open Weather Map. Une configuration est disponible pour chaque service en particulier pour saisir une clé d\'enregistrement. Les affichages proposées par cette version sont incompatibles avec ceux des branches v1 et v2.
'rainette_description' => 'Cette nouvelle version de Rainette permet de choisir son service météo parmi OpenWeather, Weatherbit.io, WeatherAPI, AccuWeather ou World Weather Online. Une configuration est disponible pour chaque service en particulier pour saisir une clé d\'enregistrement. Les affichages proposées par cette version sont incompatibles avec ceux des branches v1 et v2.
Ce plugin permet d\'afficher les conditions et les prévisions météorologiques d\'une ville donnée à partir du flux fourni par un des services méteorologiques supportés.
Il ne stocke aucune information en base de données ni ne gère le choix des villes.
Ce plugin permet d\'afficher les conditions et les prévisions météorologiques d\'un lieu donné à partir du flux fourni par un des services méteorologiques supportés.
Il ne stocke aucune information en base de données ni ne gère le choix des lieux.
L\'affichage des données météorologiques se fait principalement via l\'utilisation de modèles dans les squelettes. Le plugin propose des
modèles par défaut comme {{rainette_previsions}} et {{rainette_conditions}}. Il est possible aussi d\'afficher les informations sur la ville choisie soit via le modèle {{rainette_infos}},
soit via la balise <code>#RAINETTE_INFOS</code>. Tous les affichages proposés par Rainette sont personnalisables (icônes, libellés, unités, présentation...).
Une page « Meteo » compatible avec les squelettes Z est disponible : elle propose les conditions et prévisions d\'une ville donnée.',
modèles par défaut comme {{rainette_previsions}} et {{rainette_conditions}}. Il est possible aussi d\'afficher les informations sur le lieu choisi soit via le modèle {{rainette_infos}},
soit via la balise <code>#RAINETTE_INFOS</code>. Tous les affichages proposés par Rainette sont personnalisables (icônes, libellés, unités, présentation...).',
'rainette_slogan' => 'La météo au quotidien',
);

+ 0
- 2
modeles/previsions_12h.html View File

@ -60,8 +60,6 @@
</BOUCLE_cellules>
</div>
<div class="maj">
<:rainette:derniere_maj|ucfirst:>&nbsp;:
[&nbsp;(#VALEUR{derniere_maj}|nom_jour)][&nbsp;(#VALEUR{derniere_maj}|affdate_heure)]
<INCLURE{fond=modeles/inc-credits,
classe_div=prev2x12h,
env} />


+ 6
- 5
modeles/previsions_24h.html View File

@ -16,8 +16,8 @@
-->]
<BOUCLE_previsions_24h(DATA) {source table, #ENV{donnees}}{par cle}{#ENV{premier_jour}, #ENV{nombre_jours}}>
#SET{index_heure, 0}
[(#ENV{extras/service}|=={weather}|et{#CLE|=={0}}|et{#VALEUR{heure/#GET{index_heure}/icone}|=={''}}|oui) #SET{index_heure, 1}]
#SET{periode, #VALEUR{heure/#GET{index_heure}/periode}}
[(#GET{periode}|=={1}|et{#CLE|=={0}}|oui)#SET{index_heure, 1}]
<div class="rainette_previsions_24h">
<div class="jour">[(#VALEUR{date}|nom_jour|ucfirst)]</div>
<div class="date">[(#VALEUR{date}|affdate_jourcourt)]</div>
@ -25,10 +25,11 @@
<div class="icone">[(#VALEUR{heure/#GET{index_heure}/icone}|rainette_afficher_icone{petit})]</div>
<div class="resume">[(#VALEUR{heure/#GET{index_heure}/resume}|rainette_afficher_resume)]</div>
<div class="t_reelle">
[(#GET{periode}|=={0}|oui)
[<:rainette:temperature_max|ucfirst:>
&nbsp;(#VALEUR|table_valeur{temperature_max, '', #EVAL{true}}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}})]]
[(#GET{periode}|=={1}|oui)<:rainette:nuit|ucfirst:>]
[(#GET{periode}|=={0}|ou{#GET{periode}|=={1}|et{#CLE|>{0}}}|oui)
[<:rainette:temperature_max|ucfirst:>
&nbsp;(#VALEUR|table_valeur{temperature_max, '', #EVAL{true}}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}})]
]
[(#GET{periode}|=={1}|et{#CLE|=={0}}|oui)<:rainette:nuit|ucfirst:>]
[<br/><:rainette:temperature_min|ucfirst:>
&nbsp;(#VALEUR|table_valeur{temperature_min, '', #EVAL{true}}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}})<br/>]
</div>


+ 4
- 4
rainette.css View File

@ -6,7 +6,7 @@
.rainette_credits.infos a {padding-left: 0; padding-right: 0; text-align: left;}
.rainette_credits.condtr {}
.rainette_credits.prev24h {margin-bottom: 0.5em;}
.rainette_credits.prev2x12h {}
.rainette_credits.prev2x12h {margin: 0}
/* INFOS: Styles utilises par le modele rainette_infos */
.rainette_infos {
@ -88,7 +88,7 @@
.rainette_previsions_12h {
float: left;
border: 0.2em solid #dddddd;
width: 54.2em;
width: 53.9em;
margin: 0.5em 0 0 0;
line-height: normal;
}
@ -123,7 +123,7 @@
float: left; width: 24em; margin: 0.5em 1em 1em 1em;
}
.rainette_previsions_12h .icone {
float: left; width: 11em; height:11em; padding: 0 1em 0 1em;
float: left; width: 10em; height:11em; padding: 0 1em 0 1em;
}
.rainette_previsions_12h .t_reelle {
width: 10em;
@ -131,7 +131,7 @@
font-weight: bold;
font-size: 1em;
color: #333333;
margin: 1em 0 0 1em;
margin-top: 1em;
}
.rainette_previsions_12h .t_reelle span {font-size: 3em;}
.rainette_previsions_12h .details {


+ 5
- 5
rainette_administrations.php View File

@ -19,14 +19,14 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* @return void
**/
function rainette_upgrade($nom_meta_base_version, $version_cible) {
$maj = array();
// Initialisation de la configuration : c'est la seule chose à faire à chaque mise à jour de schéma.
$maj['create'] = array();
rainette_configurer();
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
// Initialisation de la configuration : c'est la seule chose à faire à chaque mise à jour de schéma.
rainette_configurer();
}
@ -51,7 +51,7 @@ function rainette_vider_tables($nom_meta_base_version) {
// - la meta de stockage des informations de dernière exécution de chaque service
effacer_meta('rainette_execution');
// - la configuration utilisateur de chaque service
effacer_meta('rainette');
// effacer_meta('rainette');
// - la meta de schéma
effacer_meta($nom_meta_base_version);
}
@ -68,7 +68,7 @@ function rainette_configurer() {
ecrire_config("rainette_config", $configuration);
// La configuration de chaque service est stockée dans un fichier YAML dont le nom équivaut à l'id du service.
if ($fichiers_yaml = glob(_DIR_PLUGIN_RAINETTE . '/services/*.yaml')) {
if ($fichiers_yaml = glob(_DIR_PLUGIN_RAINETTE . 'services/*.yaml')) {
foreach ($fichiers_yaml as $_fichier) {
// On détermine l'id du service
$service = strtolower(basename($_fichier, '.yaml'));


+ 33
- 30
services/accuweather.php View File

@ -121,6 +121,39 @@ function accuweather_complement2conditions($tableau, $configuration) {
}
/**
* Modifie le flux jour des prévisions issu directement du service pour qu'il puisse être conforme
* à la logique de normalisation qui s'en suivra.
*
* Pour AccuWeather, pour la périodicité 12h on modifie les index 'Day' et 'Night' qui contiennent les flux
* horaires par un tableau de base 'hourly' dont les index sont numériques : 0 jour et 1 nuit.
*
* @api
*
* @param array $flux Flux jour non normalisé provenant du service
* @param int $periodicite Périodicité horaire des prévisiosns (24, 12, 6, 3 ou 1)
* @param array $configuration Configuration complète du service, statique et utilisateur.
*
* @return array Flux jour modifié
*/
function accuweather_flux2previsions($flux, $periodicite, $configuration) {
if (
$flux
and $periodicite === 12
) {
// On extrait les index 'Day' et 'Night' que l'on affecte à un index 'hourly' et on les supprime.
$flux['Hourly'] = array(
$flux['Day'],
$flux['Night']
);
unset($flux['Day'], $flux['Night']);
}
return $flux;
}
/**
* Complète par des données spécifiques au service le tableau des conditions issu
* uniquement de la lecture du flux.
@ -142,12 +175,6 @@ function accuweather_complement2conditions($tableau, $configuration) {
function accuweather_complement2previsions($tableau, $configuration, $index_periode) {
if (($tableau) and ($index_periode > -1)) {
// Convertir les informations exprimées en système métrique dans le systeme US si la
// configuration le demande
if ($configuration['unite'] == 's') {
metrique2imperial_accuweather($tableau);
}
// Compléter le tableau standard avec les états météorologiques calculés
etat2resume_accuweather($tableau, $configuration);
}
@ -162,30 +189,6 @@ function accuweather_complement2previsions($tableau, $configuration, $index_peri
* ---------------------------------------------------------------------------------------------
*/
/**
* @param array $tableau
*
* @return void
*/
function metrique2imperial_accuweather(&$tableau) {
include_spip('inc/rainette_convertir');
// Seules la température, la température ressentie et la vitesse du vent sont fournies dans
// les deux systèmes.
// Etant donnée que les tableaux sont normalisés, ils contiennent toujours les index de chaque
// donnée météo, il est donc inutile de tester leur existence.
$tableau['visibilite'] = ($tableau['visibilite'])
? kilometre2mile($tableau['visibilite'])
: '';
$tableau['pression'] = ($tableau['pression'])
? millibar2inch($tableau['pression'])
: '';
$tableau['precipitation'] = ($tableau['precipitation'])
? millimetre2inch($tableau['precipitation'])
: '';
}
/**
* Calcule les états en fonction des états météorologiques natifs fournis par le service.
*


+ 14
- 14
services/accuweather.yaml View File

@ -165,12 +165,12 @@ previsions:
#periode_maj: 14400
#format_flux: 'json'
periodicites:
24: { max_jours: 5 }
12: { max_jours: 5 }
periodicite_defaut: 24
periodicite_defaut: 12
cle_base: [ 'DailyForecasts' ]
cle_heure: [ ]
structure_heure: false
# La clé heure est construite (fonction accuweather_flux2service) car elle n'est pas conforme à ce qui est attendu par le mash-up
cle_heure: [ 'Hourly' ]
structure_heure: true
donnees:
date:
cle: [ 'Date' ]
@ -187,15 +187,15 @@ previsions:
temperature_min:
cle: [ 'Temperature', 'Minimum', 'Value' ]
vitesse_vent:
cle: [ 'Day', 'Wind', 'Speed', 'Value' ]
cle: [ 'Wind', 'Speed', 'Value' ]
angle_vent:
cle: [ 'Day', 'Wind', 'Direction', 'Degrees' ]
cle: [ 'Wind', 'Direction', 'Degrees' ]
direction_vent:
cle: [ 'Day', 'Wind', 'Direction', 'English' ]
cle: [ 'Wind', 'Direction', 'English' ]
risque_precipitation:
cle: [ 'Day', 'PrecipitationProbability' ]
cle: [ 'PrecipitationProbability' ]
precipitation:
cle: [ 'Day', 'TotalLiquid', 'Value' ]
cle: [ 'TotalLiquid', 'Value' ]
humidite:
cle: [ ]
point_rosee:
@ -205,15 +205,15 @@ previsions:
visibilite:
cle: [ ]
nebulosite:
cle: [ 'Day', 'CloudCover' ]
cle: [ 'CloudCover' ]
indice_uv:
cle: [ 'AirAndPollen', 5, 'Value' ]
cle: [ ]
code_meteo:
cle: [ 'Day', 'Icon' ]
cle: [ 'Icon' ]
icon_meteo:
cle: [ 'Day', 'Icon' ]
cle: [ ]
desc_meteo:
cle: [ 'Day', 'IconPhrase' ]
cle: [ 'IconPhrase' ]
trad_meteo:
cle: [ ]
jour_meteo:


+ 0
- 36
services/wwo.php View File

@ -108,12 +108,6 @@ function wwo_erreur_verifier($erreur) {
function wwo_complement2conditions($tableau, $configuration) {
if ($tableau) {
// Convertir les informations exprimées en système métrique dans le systeme US si la
// configuration le demande
if ($configuration['unite'] == 's') {
metrique2imperial_wwo($tableau);
}
// Compléter le tableau standard avec les états météorologiques calculés
etat2resume_wwo($tableau, $configuration);
}
@ -143,12 +137,6 @@ function wwo_complement2conditions($tableau, $configuration) {
function wwo_complement2previsions($tableau, $configuration, $index_periode) {
if (($tableau) and ($index_periode > -1)) {
// Convertir les informations exprimées en système métrique dans le systeme US si la
// configuration le demande
if ($configuration['unite'] == 's') {
metrique2imperial_wwo($tableau);
}
// Compléter le tableau standard avec les états météorologiques calculés
etat2resume_wwo($tableau, $configuration);
}
@ -163,30 +151,6 @@ function wwo_complement2previsions($tableau, $configuration, $index_periode) {
* ---------------------------------------------------------------------------------------------
*/
/**
* @param array $tableau
*
* @return void
*/
function metrique2imperial_wwo(&$tableau) {
// Seules la température, la température ressentie et la vitesse du vent sont fournies dans
// les deux systèmes.
// Etant donnée que les tableaux sont normalisés, ils contiennent toujours les index de chaque
// donnée météo, il est donc inutile de tester leur existence.
include_spip('inc/rainette_convertir');
$tableau['visibilite'] = ($tableau['visibilite'])
? kilometre2mile($tableau['visibilite'])
: '';
$tableau['pression'] = ($tableau['pression'])
? millibar2inch($tableau['pression'])
: '';
$tableau['precipitation'] = ($tableau['precipitation'])
? millimetre2inch($tableau['precipitation'])
: '';
}
/**
* Calcule les états en fonction des états météorologiques natifs fournis par le service.
*


+ 8
- 2
services/wwo.yaml View File

@ -137,17 +137,20 @@ conditions:
direction_vent:
cle: [ 'winddir16Point' ]
precipitation:
cle: [ 'precipMM' ]
cle: [ 'precip' ]
suffixe_unite: { id_cle: 0, m: 'MM', s: 'Inches' }
humidite:
cle: [ 'humidity' ]
point_rosee:
cle: [ ]
pression:
cle: [ 'pressure' ]
suffixe_unite: { id_cle: 0, m: '', s: 'Inches' }
tendance_pression:
cle: [ ]
visibilite:
cle: [ 'visibility' ]
suffixe_unite: { id_cle: 0, m: '', s: 'Miles' }
nebulosite:
cle: [ 'cloudcover' ]
indice_uv:
@ -204,7 +207,8 @@ previsions:
risque_precipitation:
cle: [ 'chanceofrain' ]
precipitation:
cle: [ 'precipMM' ]
cle: [ 'precip' ]
suffixe_unite: { id_cle: 0, m: 'MM', s: 'Inches' }
humidite:
cle: [ 'humidity' ]
point_rosee:
@ -212,8 +216,10 @@ previsions:
suffixe_unite: { id_cle: 0, m: 'C', s: 'F' }
pression:
cle: [ 'pressure' ]
suffixe_unite: { id_cle: 0, m: '', s: 'Inches' }
visibilite:
cle: [ 'visibility' ]
suffixe_unite: { id_cle: 0, m: '', s: 'Miles' }
nebulosite:
cle: [ 'cloudcover' ]
indice_uv:


BIN
themes/accuweather/original/24.png View File

Before After
Width: 75  |  Height: 45  |  Size: 1.7 KiB Width: 75  |  Height: 45  |  Size: 3.4 KiB

Loading…
Cancel
Save