Browse Source

Pleins de modifications pour faire fonctionner les prévisions

svn/root/tags/v3.10.0
eric@smellup.net 5 years ago
parent
commit
720d8e7970
15 changed files with 316 additions and 175 deletions
  1. +22
    -16
      inc/charger_meteo.php
  2. +47
    -42
      inc/debusquer.php
  3. +6
    -4
      inc/phraser.php
  4. +10
    -18
      lang/paquet-rainette_fr.php
  5. +16
    -16
      modeles/conditions_tempsreel.html
  6. +5
    -5
      modeles/inc-credits.html
  7. +6
    -5
      modeles/infos_ville.html
  8. +12
    -10
      modeles/previsions_24h.html
  9. +15
    -7
      modeles/rainette_previsions.html
  10. +147
    -36
      rainette_fonctions.php
  11. +10
    -5
      rainette_pipelines.php
  12. +5
    -4
      services/owm.php
  13. +4
    -3
      services/weather.php
  14. +4
    -2
      services/wunderground.php
  15. +7
    -2
      services/wwo.php

+ 22
- 16
inc/charger_meteo.php View File

@ -194,9 +194,6 @@ function inc_charger_meteo_dist($lieu, $mode = 'conditions', $periodicite = 0, $
}
// 3- Compléments standard communs à tous les services mais fonction du mode
if ($mode != 'conditions') {
$donnees['max_previsions'] = $configuration['max_previsions'];
}
if ($mode == 'conditions') {
// Calcul du risque uv à partir de l'indice uv si celui-ci est fourni
include_spip('inc/convertir');
@ -216,25 +213,34 @@ function inc_charger_meteo_dist($lieu, $mode = 'conditions', $periodicite = 0, $
}
}
// 4- Compléments standard à tous les services et tous les modes
$extra = array();
$extra['credits'] = $configuration['credits'];
$extra['config'] = $configuration_utilisateur;
$extra['erreur'] = '';
$extra['lieu'] = $lieu;
$extra['mode'] = $mode;
$extra['periodicite'] = $periodicite;
$extra['service'] = $service;
$extras = array();
$extras['credits'] = $configuration['credits'];
$extras['config'] = $configuration_utilisateur;
$extras['erreur'] = '';
$extras['lieu'] = $lieu;
$extras['mode'] = $mode;
$extras['periodicite_cache'] = $periodicite;
$extras['service'] = $service;
// On range les données et les extras dans un tableau associatif à deux entrées ('donnees', 'extras')
if ($tableau) {
$tableau = array_merge(array($extra), $tableau);
// Pour les modes "conditions" et "infos" l'ensemble des données météo est accessible sous
// l'index 'donnees'. Il faut donc supprimer l'index 0 provenant du traitement commun avec
// les prévisions.
// Pour les prévisions l'index 0 à n désigne le jour, il faut donc le conserver
$tableau = array(
'donnees' => ($mode != 'previsions' ? array_shift($tableau) : $tableau),
'extras' => $extras
);
} else {
// Traitement des erreurs de flux. On positionne toujours les bloc extra contenant l'erreur à l'index 0,
// le bloc des données qui est mis à tableau vide dans ce cas à l'index 1.
$extra['erreur'] = 'chargement';
$tableau[0] = $extra;
$tableau[1] = array();
$extras['erreur'] = 'chargement';
$tableau = array(
'donnees' => array(),
'extras' => $extras
);
}
// Pipeline de fin de chargement des données météo. Peut-être utilisé :


+ 47
- 42
inc/debusquer.php View File

@ -1,29 +1,35 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
if (!defined('_RAINETTE_DEBUG'))
define ('_RAINETTE_DEBUG', false);
if (!defined('_RAINETTE_DEBUG')) {
define('_RAINETTE_DEBUG', false);
}
if (!defined('_RAINETTE_DEBUG_PREVISIONS'))
if (!defined('_RAINETTE_DEBUG_PREVISIONS')) {
define('_RAINETTE_DEBUG_PREVISIONS', 'index:date:lever_soleil:coucher_soleil:vitesse_vent:angle_vent:direction_vent:temperature_max:temperature_min:
risque_precipitation:precipitation:humidite:pression:code_meteo:icon_meteo:desc_meteo:periode:icone:resume');
if (!defined('_RAINETTE_DEBUG_CONDITIONS'))
}
if (!defined('_RAINETTE_DEBUG_CONDITIONS')) {
define('_RAINETTE_DEBUG_CONDITIONS',
'Donn&#233;es d\'observation:derniere_maj/station
'Donn&#233;es d\'observation:derniere_maj/station
|Temp&#233;ratures:temperature_reelle/temperature_ressentie
|Donn&#233;es an&#233;mom&#233;triques:vitesse_vent/angle_vent/direction_vent
|Donn&#233;es atmosph&#233;riques:humidite/point_rosee/pression/tendance_pression/visibilite
|&#201;tats m&#233;t&#233orologiques natifs:code_meteo/icon_meteo/desc_meteo
|&#201;tats m&#233;t&#233orologiques calcul&#233;s:icone/resume/periode');
if (!defined('_RAINETTE_DEBUG_INFOS'))
}
if (!defined('_RAINETTE_DEBUG_INFOS')) {
define('_RAINETTE_DEBUG_INFOS',
'Lieu:ville/region
'Lieu:ville/region
|Coordonn&#233;es:longitude/latitude
|D&#233;mographie:population');
if (!defined('_RAINETTE_DEBUG_TYPE_UNITE'))
}
if (!defined('_RAINETTE_DEBUG_TYPE_UNITE')) {
define('_RAINETTE_DEBUG_TYPE_UNITE',
'population:population
'population:population
|temperature:temperature_reelle,temperature_ressentie,point_rosee,temperature_max,temperature_min
|vitesse:vitesse_vent
|angle:angle_vent,longitude,latitude
@ -32,13 +38,14 @@ if (!defined('_RAINETTE_DEBUG_TYPE_UNITE'))
|distance:visibilite
|precipitation:precipitation
|indice:indice_uv');
}
function rainette_dbg_afficher_cache($lieu, $mode='previsions', $service='weather') {
function rainette_dbg_afficher_cache($lieu, $mode = 'previsions', $service = 'weather') {
$debug = '';
// Recuperation du tableau des conditions courantes
if (_RAINETTE_DEBUG AND function_exists('bel_env')) {
if (_RAINETTE_DEBUG and function_exists('bel_env')) {
$charger = charger_fonction('charger_meteo', 'inc');
$nom_fichier = $charger($lieu, $mode, $service);
if ($nom_fichier) {
@ -50,12 +57,11 @@ function rainette_dbg_afficher_cache($lieu, $mode='previsions', $service='weathe
if ($mode == 'previsions') {
// Pour les prévisions les informations communes sont stockées dans un index
// supplémentaire en fin de tableau
$index = count($tableau)-1;
$index = count($tableau) - 1;
$tableau[$index]['lieu'] = $lieu;
$tableau[$index]['mode'] = $mode;
$tableau[$index]['service'] = $service;
}
else {
} else {
$tableau['lieu'] = $lieu;
$tableau['mode'] = $mode;
$tableau['service'] = $service;
@ -69,40 +75,44 @@ function rainette_dbg_afficher_cache($lieu, $mode='previsions', $service='weathe
}
function rainette_dbg_comparer_services($mode='conditions', $jeu=array()) {
function rainette_dbg_comparer_services($mode = 'conditions', $jeu = array()) {
$debug = array();
if (!$mode)
if (!$mode) {
$mode = 'conditions';
}
$donnees = constant('_RAINETTE_DEBUG_' . strtoupper($mode));
$donnees = explode(':', $donnees);
if ($donnees) {
if (!$jeu)
if (!$jeu) {
$jeu = array(
'weather' => 'FRXX0076',
'owm' => 'Paris,Fr',
'wwo' => 'Paris,France',
'wunderground' => 'Paris,France');
'weather' => 'FRXX0076',
'owm' => 'Paris,Fr',
'wwo' => 'Paris,France',
'wunderground' => 'Paris,France'
);
}
// Recuperation du tableau des conditions courantes
foreach($jeu as $_service => $_lieu) {
foreach ($jeu as $_service => $_lieu) {
$charger = charger_fonction('charger_meteo', 'inc');
$nom_fichier = $charger($_lieu, $mode, $_service);
if ($nom_fichier) {
$contenu = '';
lire_fichier($nom_fichier,$contenu);
lire_fichier($nom_fichier, $contenu);
$tableau = unserialize($contenu);
if ($tableau) {
foreach($tableau as $_donnee => $_valeur) {
foreach ($tableau as $_donnee => $_valeur) {
$type = gettype($tableau[$_donnee]);
$debug[$_donnee][$_service]['valeur'] = $_valeur;
$debug[$_donnee][$_service]['type'] = $type;
if ($_donnee != 'erreur')
if ($_donnee != 'erreur') {
$debug[$_donnee][$_service]['erreur'] = ($type === 'NULL') ? 'nonapi' : ($_valeur === '' ? 'erreur' : '');
else
} else {
$debug[$_donnee][$_service]['erreur'] = $_valeur ? 'erreur' : '';
}
}
}
}
@ -113,7 +123,7 @@ function rainette_dbg_comparer_services($mode='conditions', $jeu=array()) {
}
function rainette_dbg_afficher_donnee($donnee, $valeur, $type_php, $service='weather') {
function rainette_dbg_afficher_donnee($donnee, $valeur, $type_php, $service = 'weather') {
static $types_unite = array();
$texte = '';
@ -122,7 +132,7 @@ function rainette_dbg_afficher_donnee($donnee, $valeur, $type_php, $service='wea
foreach ($config_types as $_config_type) {
list($type, $donnees) = explode(':', trim($_config_type));
foreach (explode(',', $donnees) as $_donnee) {
$types_unite[$_donnee] = $type;
$types_unite[$_donnee] = $type;
}
}
}
@ -131,25 +141,20 @@ function rainette_dbg_afficher_donnee($donnee, $valeur, $type_php, $service='wea
if ($type_php === 'NULL') {
$texte = '<del>API</del>';
$type_php = '';
}
elseif ($valeur === '') {
if ($donnee != 'erreur')
$texte = 'Indisponible';
else {
} elseif ($valeur === '') {
if ($donnee != 'erreur') {
$texte = 'Indisponible';
} else {
$texte = $valeur ? $valeur : 'Ok';
}
}
elseif ($type_php === 'array') {
} elseif ($type_php === 'array') {
foreach ($valeur as $_cle => $_valeur) {
$texte .= ($texte ? '<br />' : '') . "<strong>${_cle}</strong> : " . ((gettype($_valeur) === NULL) ? '<del>API</del>' : $_valeur);
$texte .= ($texte ? '<br />' : '') . "<strong>${_cle}</strong> : " . ((gettype($_valeur) === null) ? '<del>API</del>' : $_valeur);
}
}
else {
$texte = $type_donnee ? rainette_afficher_unite($valeur, $type_donnee, -1, $service) : $valeur;
} else {
$texte = $type_donnee ? rainette_afficher_unite($valeur, $type_donnee, -1, $service) : $valeur;
}
$texte .= "<br /><em>${type_php}</em>";
return $texte;
}
?>

+ 6
- 4
inc/phraser.php View File

@ -1,13 +1,16 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* @param string $url
* @param string $utiliser_namespace
*
* @return array
*/
function url2flux_xml($url, $utiliser_namespace='false') {
function url2flux_xml($url, $utiliser_namespace = 'false') {
// Acquisition des données spécifiées par l'url
include_spip('inc/distant');
@ -23,6 +26,7 @@ function url2flux_xml($url, $utiliser_namespace='false') {
/**
* @param string $url
*
* @return array
*/
function url2flux_json($url) {
@ -36,5 +40,3 @@ function url2flux_json($url) {
return $json;
}
?>

+ 10
- 18
lang/paquet-rainette_fr.php View File

@ -1,30 +1,22 @@
<?php
// This is a SPIP language file -- Ceci est un fichier langue de SPIP
// Ceci est un fichier langue de SPIP -- This is a SPIP language file
/// Fichier produit par PlugOnet
// Module: paquet-rainette
// Langue: fr
// Date: 05-08-2012 17:10:32
// Items: 2
if (!defined('_ECRIRE_INC_VERSION')) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
$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, Open Weather Map ou Yahoo. 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 de la branche v1.
// 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.
Ce plugin permet d\'afficher les conditions et les prévisions météorologiques d\'une ville donnée à partir du flux xml fourni par un des services méteorologiques supportés.
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.
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 {{RAINETTE_INFOS}}. 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 à 10 jours d\'une ville donnée.
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...).
Essayez la page de démo {demo/rainette.html} pour des exemples d\'utilisation.',
'rainette_slogan' => 'La météo au quotidien',
Une page « Meteo » compatible avec les squelettes Z est disponible : elle propose les conditions et prévisions d\'une ville donnée.',
'rainette_slogan' => 'La météo au quotidien',
);
?>

+ 16
- 16
modeles/conditions_tempsreel.html View File

@ -6,19 +6,19 @@
<div class="rainette_conditions">
<div class="statut">
<div class="cadre">
<div class="icone">[(#ENV{icone}|rainette_afficher_icone{grand})]</div>
<div class="t_reelle">[(#ENV{temperature_reelle}|rainette_afficher_unite{temperature, -1, #ENV{service, weather}})]</div>
<div class="t_ressentie"><:rainette:temperature_ressentie:>&nbsp;:[&nbsp;(#ENV{temperature_ressentie}|rainette_afficher_unite{temperature, -1, #ENV{service, weather}})]<br/></div>
<div class="icone">[(#ENV{donnees/icone}|rainette_afficher_icone{grand})]</div>
<div class="t_reelle">[(#ENV{donnees/temperature_reelle}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}})]</div>
<div class="t_ressentie"><:rainette:temperature_ressentie:>&nbsp;:[&nbsp;(#ENV{donnees/temperature_ressentie}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}})]<br/></div>
<br style="clear:both" />
<div class="resume">[(#ENV{resume}|rainette_afficher_resume)]</div>
<div class="resume">[(#ENV{donnees/resume}|rainette_afficher_resume)]</div>
</div>
<div class="maj">
<:rainette:derniere_maj|ucfirst:>&nbsp;:[&nbsp;(#ENV{derniere_maj, #VAL{Y-m-d H:i:s}|date}|affdate_heure)]<br/>
[<:rainette:station_observation|ucfirst:>&nbsp;:&nbsp;(#ENV{station})]
[(#ENV{station}|non)
<:rainette:derniere_maj|ucfirst:>&nbsp;:[&nbsp;(#ENV{donnees/derniere_maj, #VAL{Y-m-d H:i:s}|date}|affdate_heure)]<br/>
[<:rainette:station_observation|ucfirst:>&nbsp;:&nbsp;(#ENV{donnees/station})]
[(#ENV{donnees/station}|non)
[<:rainette:lieu|ucfirst:>&nbsp;:&nbsp;
(#RAINETTE_INFOS{#ENV{lieu}, ville, #ENV{service, weather}})
[, (#RAINETTE_INFOS{#ENV{lieu}, pays, #ENV{service, weather}})]
(#RAINETTE_INFOS{#ENV{extras/lieu}, ville, #ENV{extras/service}})
[, (#RAINETTE_INFOS{#ENV{extras/lieu}, pays, #ENV{extras/service}})]
]
]
</div>
@ -26,17 +26,17 @@
<ul class="details">
<li><span><:rainette:vent|ucfirst:></span>
[(#ENV{vitesse_vent}|rainette_afficher_unite{vitesse, -1, #ENV{service, weather}})]
[ - (#ENV{direction_vent}|rainette_afficher_direction)]</li>
[(#ENV{donnees/vitesse_vent}|rainette_afficher_unite{vitesse, -1, #ENV{extras/service}})]
[ - (#ENV{donnees/direction_vent}|rainette_afficher_direction)]</li>
<li><span><:rainette:humidite|ucfirst:></span>
[(#ENV{humidite}|rainette_afficher_unite{pourcentage, -1, #ENV{service, weather}})]</li>
[(#ENV{donnees/humidite}|rainette_afficher_unite{pourcentage, -1, #ENV{extras/service}})]</li>
<li><span><:rainette:pression|ucfirst:></span>
[(#ENV{pression}|rainette_afficher_unite{pression, -1, #ENV{service, weather}})]
[ (#ENV{tendance_pression}|rainette_afficher_tendance{icone})]</li>
[(#ENV{donnees/pression}|rainette_afficher_unite{pression, -1, #ENV{extras/service}})]
[ (#ENV{donnees/tendance_pression}|rainette_afficher_tendance{icone})]</li>
[<li><span><:rainette:point_rosee|ucfirst:></span>
(#ENV{point_rosee}|rainette_afficher_unite{temperature, -1, #ENV{service, weather}})</li>]
(#ENV{donnees/point_rosee}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}})</li>]
[<li><span><:rainette:visibilite|ucfirst:></span>
(#ENV{visibilite}|rainette_afficher_unite{distance, -1, #ENV{service, weather}})</li>]
(#ENV{donnees/visibilite}|rainette_afficher_unite{distance, -1, #ENV{extras/service}})</li>]
</ul>
#INCLURE{fond=modeles/inc-credits,


+ 5
- 5
modeles/inc-credits.html View File

@ -2,13 +2,13 @@
Cette inclusion permet d'insérer de façon standard les crédits de chaque service dans les modèles de Rainette
-->
]
#SET{nom_service, #VAL{rainette:titre_service_}|concat{#ENV{service}}|_T}
#SET{nom_service, #VAL{rainette:titre_service_}|concat{#ENV{extras/service}}|_T}
<div class="rainette_credits[ (#ENV{classe_div})]">
[<a href="(#ENV{credits/lien})"[ title=(#ENV{credits/titre})][ class=(#ENV{classe})] target="_blank">
[(#ENV{credits/logo}|oui)
[(#CHEMIN_IMAGE{#ENV{credits/logo}}|balise_img{'logo service'})]
[<a href="(#ENV{extras/credits/lien})"[ title=(#ENV{extras/credits/titre})][ class=(#ENV{classe})] target="_blank">
[(#ENV{extras/credits/logo}|oui)
[(#CHEMIN_IMAGE{#ENV{extras/credits/logo}}|balise_img{'logo service'})]
]
[(#ENV{credits/logo}|non)
[(#ENV{extras/credits/logo}|non)
[(#ENV{texte, info}|=={info}|oui)<:rainette:info_credits{service=#GET{nom_service}}:>]
[(#ENV{texte, info}|=={service}|oui)#GET{nom_service}]
]


+ 6
- 5
modeles/infos_ville.html View File

@ -1,14 +1,15 @@
[(#REM)<!--
Ce sous-modele est celui utilise par defaut par Rainette pour presenter les conditions temps reel d'une ville
Il est appelee par le filtre rainette_coasser
Il est appelee par le filtre rainette_coasser.
Il n'est pas besoin d'utiliser des valeurs par défaut pour la balise #ENV car cela est géré en amont par le filtre.
-->
]
<div class="rainette_infos">
<h2 class="ville">[(#ENV{ville})[, (#ENV{pays})]]</h2>
<h2 class="ville">[(#ENV{donnees/ville})[, (#ENV{donnees/pays})]]</h2>
<ul class="coordonnees">
<li><:rainette:longitude|ucfirst:>&nbsp;:[&nbsp;(#ENV{longitude}|rainette_afficher_unite{angle, 2, #ENV{service, weather}})</li>]
<li><:rainette:latitude|ucfirst:>&nbsp;:[&nbsp;(#ENV{latitude}|rainette_afficher_unite{angle, 2, #ENV{service, weather}})</li>]
[<li><:rainette:region|ucfirst:>&nbsp;:&nbsp;(#ENV{region})</li>]
<li><:rainette:longitude|ucfirst:>&nbsp;:[&nbsp;(#ENV{donnees/longitude}|rainette_afficher_unite{angle, 2, #ENV{extras/service}})</li>]
<li><:rainette:latitude|ucfirst:>&nbsp;:[&nbsp;(#ENV{donnees/latitude}|rainette_afficher_unite{angle, 2, #ENV{extras/service}})</li>]
[<li><:rainette:region|ucfirst:>&nbsp;:&nbsp;(#ENV{donnees/region})</li>]
</ul>
#INCLURE{fond=modeles/inc-credits,


+ 12
- 10
modeles/previsions_24h.html View File

@ -4,37 +4,38 @@
Les données heure sont toujours rangées dans l'index horaire 0
-->]
#SET{periode, 0}
<BOUCLE_previsions_24h(DATA) {source table, #ENV{donnees}}{par cle}{#ENV{premier_jour}, #ENV{nombre_jours}}>
<div class="rainette_previsions_24h">
<div class="jour">[(#ENV{date}|nom_jour|ucfirst)]</div>
<div class="date">[(#ENV{date}|affdate_jourcourt)]</div>
<div class="jour">[(#VALEUR{date}|nom_jour|ucfirst)]</div>
<div class="date">[(#VALEUR{date}|affdate_jourcourt)]</div>
<div class="contenu">
<div class="icone">[(#ENV{#GET{periode}/icone}|rainette_afficher_icone{petit})]</div>
<div class="resume">[(#ENV{#GET{periode}/resume}|rainette_afficher_resume)]</div>
<div class="icone">[(#VALEUR{#GET{periode}/icone}|rainette_afficher_icone{petit})]</div>
<div class="resume">[(#VALEUR{#GET{periode}/resume}|rainette_afficher_resume)]</div>
<div class="t_reelle">
[[(#GET{periode}|=={0}|?{<:rainette:temperature_max|ucfirst:>, <:rainette:nuit|ucfirst:>})]
&nbsp;(#ENV{#GET{periode}/temperature_max}|rainette_afficher_unite{temperature, -1, #ENV{service, weather}})<br/>]
&nbsp;(#VALEUR{#GET{periode}/temperature_max}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}})<br/>]
[<:rainette:temperature_min|ucfirst:>
&nbsp;(#ENV{#GET{periode}/temperature_min}|rainette_afficher_unite{temperature, -1, #ENV{service, weather}})<br/>]
&nbsp;(#VALEUR{#GET{periode}/temperature_min}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}})<br/>]
</div>
<div class="details">
<ul>
[<li>
<span><:rainette:vent|ucfirst:></span><br />
(#ENV{#GET{periode}/vitesse_vent}|rainette_afficher_unite{vitesse, -1, #ENV{service, weather}})
(#VALEUR{#GET{periode}/vitesse_vent}|rainette_afficher_unite{vitesse, -1, #ENV{extras/service}})
</li>]
[<li>
<span><:rainette:precipitation|ucfirst:></span><br />
(#ENV{#GET{periode}/precipitation}|rainette_afficher_unite{precipitation, -1, #ENV{service, weather}})
(#VALEUR{#GET{periode}/precipitation}|rainette_afficher_unite{precipitation, -1, #ENV{extras/service}})
</li>
#SET{pluie, oui}]
[(#GET{pluie}|non)
[<li>
<span><:rainette:risque_precipitation|ucfirst:></span><br />
(#ENV{#GET{periode}/risque_precipitation}|rainette_afficher_unite{pourcentage, -1, #ENV{service, weather}})
(#VALEUR{#GET{periode}/risque_precipitation}|rainette_afficher_unite{pourcentage, -1, #ENV{extras/service}})
</li>]]
[<li>
<span><:rainette:humidite|ucfirst:></span><br />
(#ENV{#GET{periode}/humidite}|rainette_afficher_unite{pourcentage, -1, #ENV{service, weather}})
(#VALEUR{#GET{periode}/humidite}|rainette_afficher_unite{pourcentage, -1, #ENV{extras/service}})
</li>]
</ul>
</div>
@ -44,3 +45,4 @@
classe_div=prev24h,
env}
</div>
</BOUCLE_previsions_24h>

+ 15
- 7
modeles/rainette_previsions.html View File

@ -1,12 +1,20 @@
[(#REM) <!-- Afficher les previsions meteo
- code : le lieu pour lequel on affiche les données méteo
- type : 1_jour (affichage de 24h uniquement) ou x_jours (affichage de x jours)
- jour : le numéro du jour en 1_jour ou le nombre de jours en x_jours
- sous_modele : le sous-modele Rainette ou personnalisé
- service : le service méteo utilisé (weather, wwo, wunderground, owm)
-->]
[(#ENV{code}|rainette_coasser_previsions{
#ENV{type, 1_jour},
#ENV{jour,0},
#ENV{sous_modele,previsions_12h},
#ENV{service, weather}})]
#SET{options, #ARRAY}
[(#ENV{periodicite}|oui)
[(#SET{options, #GET{options}|array_merge{#ARRAY{periodicite, #ENV{periodicite}}}})]
]
[(#ENV{premier_jour}|oui)
[(#SET{options, #GET{options}|array_merge{#ARRAY{premier_jour, #ENV{premier_jour}}}})]
]
[(#ENV{nombre_jours}|oui)
[(#SET{options, #GET{options}|array_merge{#ARRAY{nombre_jours, #ENV{nombre_jours}}}})]
]
[(#ENV{code}|rainette_coasser{
previsions,
#ENV{sous_modele, previsions_12h},
#ENV{service, weather},
#GET{options}})]

+ 147
- 36
rainette_fonctions.php View File

@ -44,25 +44,28 @@ function balise_RAINETTE_INFOS($p) {
*/
function calculer_infos($lieu, $type, $service) {
// Traitement des cas ou les arguments sont vides
if (!$lieu) {
return '';
}
if (!$service) {
$service = 'weather';
}
// Initialisation du retour
$info = '';
$charger = charger_fonction('charger_meteo', 'inc');
$nom_fichier = $charger($lieu, 'infos', 0, $service);
lire_fichier($nom_fichier, $tableau);
if (!isset($type) or !$type) {
return $tableau;
} else {
list(, $donnees) = unserialize($tableau);
$info = $donnees[strtolower($type)];
// Traitement des cas ou les arguments sont vides
if ($lieu) {
if (!$service) {
$service = 'weather';
}
return $info;
// Récupération des informations sur le lieu
$charger = charger_fonction('charger_meteo', 'inc');
$nom_cache = $charger($lieu, 'infos', 0, $service);
lire_fichier($nom_cache, $contenu_cache);
if (!isset($type) or !$type) {
$info = $contenu_cache;
} else {
$tableau = unserialize($contenu_cache);
$info = $tableau['donnees'][strtolower($type)];
}
}
return $info;
}
// Filtres du plugin utilisables dans les squelettes et modeles
@ -293,8 +296,8 @@ function rainette_coasser_previsions($lieu, $type = '1_jour', $jour = 0, $modele
// Recuperation du tableau des prévisions pour tous les jours disponibles
$charger = charger_fonction('charger_meteo', 'inc');
$nom_fichier = $charger($lieu, 'previsions', $periodicite, $service);
lire_fichier($nom_fichier, $tableau);
$nom_cache = $charger($lieu, 'previsions', $periodicite, $service);
lire_fichier($nom_cache, $tableau);
$tableau = unserialize($tableau);
// Détermination de l'index final contenant les extra (erreur, date...)
@ -366,38 +369,146 @@ function rainette_coasser($lieu, $mode = 'conditions', $modele = 'conditions_tem
// Initialisation du retour
$texte = '';
$tableau = array();
// Détermination de la périodicité en fonction du mode et du modèle demandés
$type_modele = 0;
$periodicite = 0;
$erreur = '';
if ($mode == 'previsions') {
$periodicite = 24;
// Identification de la périodicité à partir du nom du modèle. Cela évite une configuration compliquée.
if (preg_match(',_(1|12|24)h,is', $modele, $match)) {
$type_modele = intval($match[1]);
// On verifie que la périodicité demandée explicitement dans l'appel du modèle est ok
if (isset($options['periodicite'])) {
$periodicite_explicite = intval($options['periodicite']);
if (periodicite_compatible($type_modele, $periodicite_explicite)) {
$periodicite = $periodicite_explicite;
} else {
$erreur = 'modele_periodicite';
}
} else {
// Dans ce cas, il faut choisir une périodicité en fonction du type du modèle et du service.
$periodicite = trouver_periodicite($type_modele, $service);
if (!$periodicite) {
$erreur = 'modele_service';
}
}
} else {
// On ne connait pas le type du modèle, donc sa compatibilité.
// Si la périodicité est passée en argument on l'utilise sans se poser de question.
// Sinon c'est une erreur car on ne sait pas quelle périodicité est requise
if (isset($options['periodicite'])) {
$periodicite = intval($options['periodicite']);
} else {
$erreur = 'modele_inutilisable';
}
}
}
// Récupération du tableau des données météo
$charger = charger_fonction('charger_meteo', 'inc');
$nom_cache = $charger($lieu, $mode, $periodicite, $service);
lire_fichier($nom_cache, $contenu_cache);
$tableau = unserialize($contenu_cache);
if ($erreur) {
// On prépare un contexte extras minimal pour traiter les erreurs du modèle de façon standard
$extras['erreur'] = $erreur;
$extras['lieu'] = $lieu;
$extras['mode'] = $mode;
$extras['periodicite'] = $periodicite;
$extras['service'] = $service;
} else {
// Récupération du tableau des données météo
$charger = charger_fonction('charger_meteo', 'inc');
$nom_cache = $charger($lieu, $mode, $periodicite, $service);
lire_fichier($nom_cache, $contenu_cache);
$tableau = unserialize($contenu_cache);
// Séparation des données communes liées au service et au mode et des données météorologiques
$extras = $tableau['extras'];
$erreur = $extras['erreur'];
if (!$erreur and ($mode == 'previsions')) {
// Adaptation des données en fonction de la demande et de la périodicité modèle-cache
$nb_index = count($tableau['donnees']);
$jour1 = 0;
if (isset($options['premier_jour'])) {
$jour1 = intval($options['premier_jour']) < $nb_index
? intval($options['premier_jour'])
: $nb_index -1;
}
$nb_jours = $nb_index - $jour1;
if (isset($options['nombre_jours'])) {
$nb_jours = ($jour1 + intval($options['nombre_jours']) <= $nb_index)
? intval($options['nombre_jours'])
: $nb_index - $jour1;
}
// Séparation des données communes liées au service et au mode et des données météorologiques
$extras = array_shift($tableau);
$tableau['premier_jour'] = $jour1;
$tableau['nombre_jours'] = $nb_jours;
}
}
// Affichage du message d'erreur ou des données
if ($extras['erreur']) {
if ($erreur) {
$texte = recuperer_fond('modeles/erreur', $extras);
} else {
// Pour les modes "conditions" et "infos" l'ensemble des données météo et extra sont des index
// associatifs du tableau. On supprime les index [0] et [1].
if ($mode != 'previsions') {
$donnees = array_shift($tableau);
$contexte = array_merge($donnees, $extras);
} else {
$index_debut = $options['premier_jour'];
}
$texte = recuperer_fond("modeles/$modele", $contexte);
// Appel du modèle avec le contexte complet
$texte = recuperer_fond("modeles/$modele", $tableau);
}
return $texte;
}
function trouver_periodicite($type_modele, $service) {
static $compatibilite_type_periodicite =array(
24 => array(24, 12),
12 => array(12),
1 => array(1,3,6)
);
// Périodicité initialisée à "non trouvée"
$periodicite = 0;
if (isset($compatibilite_type_periodicite[$type_modele])) {
// Acquérir la configuration statique du service pour connaitre les périodicités horaires supportées
// pour le mode prévisions
include_spip("services/${service}");
$configurer = "${service}_service2configuration";
$configuration = $configurer('previsions');
$periodicites_service = array_keys($configuration['previsions']['periodicites']);
$periodicites_modele = $compatibilite_type_periodicite[$type_modele];
foreach ($periodicites_modele as $_periodicite_modele) {
if (in_array($_periodicite_modele, $periodicites_service)) {
$periodicite = $_periodicite_modele;
break;
}
}
}
return $periodicite;
}
function periodicite_compatible($type_modele, $periodicite) {
static $compatibilite_type_periodicite =array(
24 => array(24, 12),
12 => array(12),
1 => array(1,3,6)
);
// Périodicité initialisée à "non trouvée"
$compatible = false;
if (isset($compatibilite_type_periodicite[$type_modele])
and in_array($periodicite, $compatibilite_type_periodicite[$type_modele])) {
$compatible = true;
}
return $compatible;
}
include_spip('inc/debusquer');

+ 10
- 5
rainette_pipelines.php View File

@ -1,18 +1,23 @@
<?php
if (!defined("_ECRIRE_INC_VERSION")) return;
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
// Insertion des css de Rainette
function rainette_insert_head_css($flux){
function rainette_insert_head_css($flux) {
static $done = false;
if (!$done) {
$done = true;
$flux .= '<link rel="stylesheet" href="' . find_in_path('rainette.css') . '" type="text/css" media="all" />';
}
return $flux;
}
function rainette_insert_head($flux){
$flux .= rainette_insert_head_css($flux); // au cas ou il n'est pas implemente
function rainette_insert_head($flux) {
// au cas ou il n'est pas implemente
$flux .= rainette_insert_head_css($flux);
return $flux;
}
?>

+ 5
- 4
services/owm.php View File

@ -33,11 +33,12 @@ $GLOBALS['rainette_owm_config']['service'] = array(
'lien' => 'http://openweathermap.org/',
),
'previsions' => array(
'max_jours' => 16,
'periodicites' => array(24, 3),
'defaut' => 24
'periodicites' => array(
24 => array('max_jours' => 16),
3 => array('max_jours' => 5)
),
'defaut' => 24
),
'max_previsions' => 16,
'langue_service' => 'EN'
);


+ 4
- 3
services/weather.php View File

@ -29,9 +29,10 @@ $GLOBALS['rainette_weather_config']['service'] = array(
'lien' => 'http://www.weather.com/',
),
'previsions' => array(
'max_jours' => 10,
'periodicites' => array(12),
'defaut' => 12
'periodicites' => array(
12 => array('max_jours' => 10)
),
'defaut' => 12
),
'max_previsions' => 10,
'langue_service' => ''


+ 4
- 2
services/wunderground.php View File

@ -32,8 +32,10 @@ $GLOBALS['rainette_wunderground_config']['service'] = array(
'lien' => 'http://www.wunderground.com/',
),
'previsions' => array(
'max_jours' => 10,
'periodicites' => array(24, 1),
'periodicites' => array(
24 => array('max_jours' => 10),
1 => array('max_jours' => 10)
),
'defaut' => 24
),
'max_previsions' => 10,


+ 7
- 2
services/wwo.php View File

@ -32,8 +32,13 @@ $GLOBALS['rainette_wwo_config']['service'] = array(
'lien' => 'http://www.worldweatheronline.com/',
),
'previsions' => array(
'max_jours' => 15,
'periodicites' => array(24, 12, 6, 3, 1),
'periodicites' => array(
24 => array('max_jours' => 15),
12 => array('max_jours' => 15),
6 => array('max_jours' => 15),
3 => array('max_jours' => 15),
1 => array('max_jours' => 15)
),
'defaut' => 24
),
'max_previsions' => 15,


Loading…
Cancel
Save