Changeset 94836 in spip-zone


Ignore:
Timestamp:
Jan 31, 2016, 1:59:50 PM (4 years ago)
Author:
eric@…
Message:

Enfin une première version qui fonctionne avec les prévisions.
Pour owm la périodicité 3h n'est finalement pas supportée.
Pour wunderground c'est la périodicté 1h qui n'est abandonnée.
En effet, le tableau retourné ne permet pas de traiter les données de façon standard sans complexifier à outrance le code et la configuration.

Location:
_plugins_/rainette/trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/rainette/trunk/inc/charger_meteo.php

    r94614 r94836  
    169169                                $flux_heure = $_flux_jour;
    170170                                if ((count($periodes_horaires) > 1)     and !empty($configuration['cle_heure'])) {
    171                                         $flux_heure = table_valeur($flux, implode('/', $configuration['cle_heure']), null);
     171                                        $flux_heure = table_valeur($_flux_jour, implode('/', $configuration['cle_heure']), null);
    172172                                }
    173173
     
    178178                                        //    Suivant la période il faut prendre le flux jour ou le flux heure. On calcule donc le flux heure
    179179                                        //    quand c'est nécessaire.
     180                                        $flux_a_normaliser = $_periode == -1
     181                                                ? $_flux_jour
     182                                                : ($configuration['structure_heure'] ? $flux_heure[$_periode] : $flux_heure);
    180183                                        $donnees = service2donnees(
    181184                                                $configuration,
    182185                                                $mode,
    183                                                 ($_periode == -1 ? $_flux_jour : $flux_heure),
     186                                                $flux_a_normaliser,
    184187                                                $_periode);
    185188
     
    207210                                                        $tableau[$_index_jour] = $donnees;
    208211                                                } else {
    209                                                         $tableau[$_index_jour][$_periode] = $donnees;
     212                                                        $tableau[$_index_jour]['heure'][$_periode] = $donnees;
    210213                                                }
    211214                                        }
  • _plugins_/rainette/trunk/inc/normaliser.php

    r94404 r94836  
    5151        // Données d'observation
    5252        'date'                 => array('origine' => 'service', 'type_php' => 'date', 'rangement' => 'jour'),
     53        'heure'                => array('origine' => 'service', 'type_php' => 'heure', 'rangement' => 'heure'),
    5354        // Données astronomiques
    5455        'lever_soleil'         => array('origine' => 'service', 'type_php' => 'date', 'rangement' => 'jour'),
    5556        'coucher_soleil'       => array('origine' => 'service', 'type_php' => 'date', 'rangement' => 'jour'),
    5657        // Températures
    57         'temperature_max'      => array('origine' => 'service', 'type_php' => 'float', 'rangement' => 'heure'),
    58         'temperature_min'      => array('origine' => 'service', 'type_php' => 'float', 'rangement' => 'heure'),
     58        'temperature'          => array('origine' => 'service', 'type_php' => 'float', 'rangement' => 'heure'),
     59        'temperature_max'      => array('origine' => 'service', 'type_php' => 'float', 'rangement' => 'jour'),
     60        'temperature_min'      => array('origine' => 'service', 'type_php' => 'float', 'rangement' => 'jour'),
    5961        // Données anémométriques
    6062        'vitesse_vent'         => array('origine' => 'service', 'type_php' => 'float', 'rangement' => 'heure'),
     
    7981        'periode'              => array('origine' => 'calcul', 'type_php' => 'int', 'rangement' => 'heure'),
    8082        // Informations complémentaires
    81         'max_previsions'       => array('origine' => 'calcul', 'type_php' => 'int', 'rangement' => 'jour'),
    82 );
     83);
     84
     85$GLOBALS['rainette_config']['periodicite'] = array(
     86        24 => array(24, 12),
     87        12 => array(12),
     88        1  => array(1,3,6)
     89);
     90
    8391
    8492
     
    174182                                $fonction = 'donnee2date';
    175183                                break;
     184                        case 'heure':
     185                                $fonction = 'donnee2heure';
     186                                break;
    176187                        default:
    177188                                $fonction = '';
     
    184195
    185196/**
    186  * @param $date_service
     197 * @param $donnee
    187198 *
    188199 * @return string
    189200 */
    190 function donnee2date($date_service) {
    191         if (is_numeric($date_service)) {
    192                 $date = date('Y-m-d H:i:s', $date_service);
     201function donnee2date($donnee) {
     202        if (is_numeric($donnee)) {
     203                $date = date('Y-m-d H:i:s', $donnee);
    193204        } else {
    194                 $date = date_create($date_service);
     205                $date = date_create($donnee);
    195206                if (!$date) {
    196                         $elements_date = explode(' ', $date_service);
     207                        $elements_date = explode(' ', $donnee);
    197208                        array_pop($elements_date);
    198                         $date_service = implode(' ', $elements_date);
    199                         $date = date_create($date_service);
     209                        $donnee = implode(' ', $elements_date);
     210                        $date = date_create($donnee);
    200211                }
    201212                $date = date_format($date, 'Y-m-d H:i:s');
     
    204215        return $date;
    205216}
     217
     218/**
     219 * @param $donnee
     220 *
     221 * @return string
     222 */
     223function donnee2heure($donnee) {
     224        if (is_numeric($donnee)) {
     225                $taille = strlen($donnee);
     226                if ($taille < 3) {
     227                        $m = '00';
     228                        $h = $donnee;
     229                } else {
     230                        $m = substr($donnee, -2);
     231                        $h = strlen($donnee) == 3
     232                                ? substr($donnee, 0, 1)
     233                                : substr($donnee, 0, 2);
     234                }
     235                $heure = "${h}:${m}";
     236        } else {
     237                $heure = $donnee;
     238        }
     239
     240        return $heure;
     241}
     242
     243function trouver_periodicite($type_modele, $service) {
     244
     245        // Périodicité initialisée à "non trouvée"
     246        $periodicite = 0;
     247
     248        if (isset($GLOBALS['rainette_config']['periodicite'][$type_modele])) {
     249                // Acquérir la configuration statique du service pour connaitre les périodicités horaires supportées
     250                // pour le mode prévisions
     251                include_spip("services/${service}");
     252                $configurer = "${service}_service2configuration";
     253                $configuration = $configurer('previsions');
     254                $periodicites_service = array_keys($configuration['previsions']['periodicites']);
     255
     256                $periodicites_modele = $GLOBALS['rainette_config']['periodicite'][$type_modele];
     257                foreach ($periodicites_modele as $_periodicite_modele) {
     258                        if (in_array($_periodicite_modele, $periodicites_service)) {
     259                                $periodicite = $_periodicite_modele;
     260                                break;
     261                        }
     262                }
     263        }
     264
     265        return $periodicite;
     266}
     267
     268
     269function periodicite_compatible($type_modele, $periodicite) {
     270
     271        // Périodicité initialisée à "non trouvée"
     272        $compatible = false;
     273
     274        if (isset($GLOBALS['rainette_config']['periodicite'][$type_modele])
     275        and in_array($periodicite, $GLOBALS['rainette_config']['periodicite'][$type_modele])) {
     276                $compatible = true;
     277        }
     278
     279        return $compatible;
     280}
     281
  • _plugins_/rainette/trunk/modeles/previsions_12h.html

    r94404 r94836  
    11[(#REM)<!--
    2         Ce sous-modele est celui utilise par defaut par Rainette pour presenter les previsions d'un jour d'une ville
    3         Il est appelee par le filtre rainette_coasser_previsions
     2        Ce sous-modele est celui utilise par defaut par Rainette pour presenter les previsions d'une ville
     3        Il est appelee par le filtre rainette_coasser
    44
    5         Ce modèle ne peut être utiliser qu'avec le service weather.com qui propose des données pour la nuit.
    6         L'utiliser avec un autre service renvoie un message d'erreur plutôt qu'un affichage farfelu.
     5        Ce modèle ne peut être utiliser qu'avec un service fournissant des données horaires jour et nuit (periodicité 12h).
    76 -->]
    87
    9 [(#REM) <!-- Erreur, le service ne supporte pas ce modèle -->]
    10 [(#ENV{service, weather}|=={weather}|non)
    11         [(#INCLURE{fond=modeles/erreur,
    12                 service=#ENV{service},
    13                 erreur=affichage,
    14                 mode=modele,
    15                 modele=previsions_12h})]]
    16 
    17 [(#REM) <!-- Service weather, on affiche -->]
    18 [(#ENV{service, weather}|=={weather}|oui)
    19         #SET{gauche, 0}
    20         #SET{droite, 1}
    21         [(#ENV{periode}|=={1}|oui) #SET{gauche, 1}#SET{droite, 2}]
     8<BOUCLE_previsions_12h(DATA) {source table, #ENV{donnees}}{par cle}{#ENV{premier_jour}, #ENV{nombre_jours}}>
    229<div class="rainette_previsions_12h">
    23         <!-- Cellule de gauche:
    24                 - si aujourd'hui alors donnees du matin si l'heure est < 14:00 ou du soir sinon
    25                 - si autre jour alors donnees du matin -->
    26         [<div class="entete">(#ENV{periode}|=={0}|?{<:rainette:jour:>, <:rainette:nuit:>}|ucfirst)</div>]
    27         [<div class="entete">(#ENV{periode}|=={0}|?{<:rainette:nuit:>, <:rainette:demain:>}|ucfirst)</div>]
     10        <div class="entete">
     11                [(#VALEUR{date}|nom_jour|ucfirst)][ (#VALEUR{date}|affdate_jourcourt)][ - (#VALEUR{heure/0/heure})]
     12        </div>
     13        <div class="entete">
     14                <:rainette:nuit|ucfirst:>[ - (#VALEUR{heure/1/heure})]
     15        </div>
    2816        <div class="cadre">
    29                 <div class="cellule gauche">
     17        <BOUCLE_cellules(DATA) {source table, #VALEUR{heure}}{par cle}>
     18                <div class="cellule[ (#CLE|=={0}|?{gauche, droite})]">
    3019                        <div class="contenu">
    31                                 <div class="icone">[(#ENV{#GET{gauche}/icone}|rainette_afficher_icone{grand}|image_reduire{95})]</div>
     20                                <div class="icone">[(#VALEUR{icone}|rainette_afficher_icone{grand}|image_reduire{95})]</div>
    3221                                <div class="t_reelle">
    33                                         [(#ENV{periode}|=={0}|?{<:rainette:temperature_max:>, <:rainette:temperature_min:>}|ucfirst)<br/>]
    34                                         <span>[(#ENV{#GET{gauche}/temperature_max}|rainette_afficher_unite{temperature, -1, #ENV{service, weather}})]</span><br/>
    35                                         [(#ENV{#GET{gauche}/resume}|rainette_afficher_resume)]
     22                                        [(#CLE|=={0}|?{<:rainette:temperature_max:>, <:rainette:temperature_min:>}|ucfirst)<br/>]
     23                                        <span>
     24                                                [(#VALEUR{temperature}|oui)
     25                                                        [(#VALEUR{temperature}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}})]
     26                                                ]
     27                                                [(#VALEUR{temperature}|non)
     28                                                        [(#CLE|=={0}|?{
     29                                                                #_previsions_12h:VALEUR{temperature_max}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}},
     30                                                                #_previsions_12h:VALEUR{temperature_min}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}}
     31                                                        })]
     32                                                ]
     33                                        </span>
     34                                        <br/>
     35                                        [(#VALEUR{resume}|rainette_afficher_resume)]
    3636                                </div>
    3737                                <div class="details">
     
    3939                                                <li>
    4040                                                        <span><:rainette:vent|ucfirst:></span>
    41                                                         [(#ENV{#GET{gauche}/vitesse_vent}|rainette_afficher_unite{vitesse, -1, #ENV{service, weather}})]
    42                                                         [ - (#ENV{#GET{gauche}/direction_vent}|rainette_afficher_direction)]
     41                                                        [(#VALEUR{vitesse_vent}|rainette_afficher_unite{vitesse, -1, #ENV{extras/service}})]
     42                                                        [ - (#VALEUR{direction_vent}|rainette_afficher_direction)]
    4343                                                </li>
    4444                                                <li>
    4545                                                        <span><:rainette:humidite|ucfirst:></span>
    46                                                         [(#ENV{#GET{gauche}/humidite}|rainette_afficher_unite{pourcentage, -1, #ENV{service, weather}})]
     46                                                        [(#VALEUR{humidite}|rainette_afficher_unite{pourcentage, -1, #ENV{extras/service}})]
    4747                                                </li>
    4848                                                <li>
    4949                                                        <span><:rainette:risque_precipitation|ucfirst:></span>
    50                                                         [(#ENV{#GET{gauche}/risque_precipitation}|rainette_afficher_unite{pourcentage, -1, #ENV{service, weather}})]
     50                                                        [(#VALEUR{risque_precipitation}|rainette_afficher_unite{pourcentage, -1, #ENV{extras/service}})]
    5151                                                </li>
    5252                                                <li>
    53                                                         <span>[(#ENV{periode}|=={0}|?{<:rainette:lever_soleil:>, <:rainette:coucher_soleil:>}|ucfirst)]</span>
    54                                                         [(#ENV{periode}|=={0}|?{#ENV{lever_soleil}, #ENV{coucher_soleil}}|affdate{'H\hi'})]
     53                                                        <span>[(#CLE|=={0}|?{<:rainette:lever_soleil:>, <:rainette:coucher_soleil:>}|ucfirst)]</span>
     54                                                        [(#CLE|=={0}|?{#_previsions_12h:VALEUR{lever_soleil}, #_previsions_12h:VALEUR{coucher_soleil}}|affdate{'H\hi'})]
    5555                                                </li>
    5656                                        </ul>
     
    5858                        </div>
    5959                </div>
    60                 <!-- Cellule de droite:
    61                         - si aujourd'hui alors donnees du soir si l'heure est < 14:00 ou du lendemain sinon
    62                         - si autre jour alors donnees du soir -->
    63                 <div class="cellule droite">
    64                         <div class="contenu">
    65                                 <div class="icone">[(#ENV{#GET{droite}/icone}|rainette_afficher_icone{grand}|image_reduire{95})]</div>
    66                                 <div class="t_reelle">
    67                                         [(#ENV{periode}|=={0}|?{<:rainette:temperature_min:>, <:rainette:temperature_max:>}|ucfirst)<br/>]
    68                                         <span>[(#ENV{#GET{droite}/temperature_max}|rainette_afficher_unite{temperature, -1, #ENV{service, weather}})]</span><br/>
    69                                         [(#ENV{#GET{droite}/resume}|rainette_afficher_resume)]
    70                                 </div>
    71                                 <div class="details">
    72                                         <ul>
    73                                                 <li>
    74                                                         <span><:rainette:vent|ucfirst:></span>
    75                                                         [(#ENV{#GET{droite}/vitesse_vent}|rainette_afficher_unite{vitesse, -1, #ENV{service, weather}})]
    76                                                         [ - (#ENV{#GET{droite}/direction_vent}|rainette_afficher_direction)]
    77                                                 </li>
    78                                                 <li>
    79                                                         <span><:rainette:humidite|ucfirst:></span>
    80                                                         [(#ENV{#GET{droite}/humidite}|rainette_afficher_unite{pourcentage, -1, #ENV{service, weather}})]
    81                                                 </li>
    82                                                 <li>
    83                                                         <span><:rainette:risque_precipitation|ucfirst:></span>
    84                                                         [(#ENV{#GET{droite}/risque_precipitation}|rainette_afficher_unite{pourcentage, -1, #ENV{service, weather}})]
    85                                                 </li>
    86                                                 <li>
    87                                                         <span>[(#ENV{periode}|=={0}|?{<:rainette:coucher_soleil:>, <:rainette:lever_soleil:>}|ucfirst)]</span>
    88                                                         [(#ENV{periode}|=={0}|?{#ENV{coucher_soleil}, #ENV{lever_soleil}}|affdate{'H\hi'})]
    89                                                 </li>
    90                                         </ul>
    91                                 </div>
    92                         </div>
    93                 </div>
     60        </BOUCLE_cellules>
    9461        </div>
    9562        <div class="maj">
    9663                <:rainette:derniere_maj|ucfirst:>&nbsp;:
    97                 [&nbsp;(#ENV{derniere_maj}|nom_jour)][&nbsp;(#ENV{derniere_maj}|affdate_heure)]
     64                [&nbsp;(#VALEUR{derniere_maj}|nom_jour)][&nbsp;(#VALEUR{derniere_maj}|affdate_heure)]
    9865                #INCLURE{fond=modeles/inc-credits,
    9966                        classe_div=prev2x12h,
     
    10168        </div>
    10269</div>
    103 ]
     70</BOUCLE_previsions_12h>
  • _plugins_/rainette/trunk/modeles/previsions_24h.html

    r94614 r94836  
    11[(#REM)<!--
    2         Ce sous-modele est celui utilise par defaut par Rainette pour presenter les previsions 24h d'un jour d'une ville.
    3         Il est appelee par le filtre rainette_coasser_previsions.
     2        Ce sous-modele est celui utilise par defaut par Rainette pour presenter les previsions 24h d'une ville.
     3        Il est appelee par le filtre rainette_coasser.
    44        Les données heure sont toujours rangées dans l'index horaire 0
    55 -->]
     6#SET{index_heure, 0}
    67#SET{periode, 0}
    78<BOUCLE_previsions_24h(DATA) {source table, #ENV{donnees}}{par cle}{#ENV{premier_jour}, #ENV{nombre_jours}}>
     
    1011        <div class="date">[(#VALEUR{date}|affdate_jourcourt)]</div>
    1112        <div class="contenu">
    12                 <div class="icone">[(#VALEUR{#GET{periode}/icone}|rainette_afficher_icone{petit})]</div>
    13                 <div class="resume">[(#VALEUR{#GET{periode}/resume}|rainette_afficher_resume)]</div>
     13                <div class="icone">[(#VALEUR{heure/#GET{index_heure}/icone}|rainette_afficher_icone{petit})]</div>
     14                <div class="resume">[(#VALEUR{heure/#GET{index_heure}/resume}|rainette_afficher_resume)]</div>
    1415                <div class="t_reelle">
    1516                        [[(#GET{periode}|=={0}|?{<:rainette:temperature_max|ucfirst:>, <:rainette:nuit|ucfirst:>})]
    16                         &nbsp;(#VALEUR{#GET{periode}/temperature_max}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}})<br/>]
     17                        &nbsp;(#VALEUR{temperature_max}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}})<br/>]
    1718                        [<:rainette:temperature_min|ucfirst:>
    18                         &nbsp;(#VALEUR{#GET{periode}/temperature_min}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}})<br/>]
     19                        &nbsp;(#VALEUR{temperature_min}|rainette_afficher_unite{temperature, -1, #ENV{extras/service}})<br/>]
    1920                </div>
    2021                <div class="details">
     
    2223                                [<li>
    2324                                        <span><:rainette:vent|ucfirst:></span><br />
    24                                         (#VALEUR{#GET{periode}/vitesse_vent}|rainette_afficher_unite{vitesse, -1, #ENV{extras/service}})
     25                                        (#VALEUR{heure/#GET{index_heure}/vitesse_vent}|rainette_afficher_unite{vitesse, -1, #ENV{extras/service}})
    2526                                </li>]
    2627                                [<li>
    2728                                        <span><:rainette:precipitation|ucfirst:></span><br />
    28                                         (#VALEUR{#GET{periode}/precipitation}|rainette_afficher_unite{precipitation, -1, #ENV{extras/service}})
     29                                        (#VALEUR{heure/#GET{index_heure}/precipitation}|rainette_afficher_unite{precipitation, -1, #ENV{extras/service}})
    2930                                </li>
    3031                                #SET{pluie, oui}]
     
    3233                                [<li>
    3334                                        <span><:rainette:risque_precipitation|ucfirst:></span><br />
    34                                         (#VALEUR{#GET{periode}/risque_precipitation}|rainette_afficher_unite{pourcentage, -1, #ENV{extras/service}})
     35                                        (#VALEUR{heure/#GET{index_heure}/risque_precipitation}|rainette_afficher_unite{pourcentage, -1, #ENV{extras/service}})
    3536                                </li>]]
    3637                                [<li>
    3738                                        <span><:rainette:humidite|ucfirst:></span><br />
    38                                         (#VALEUR{#GET{periode}/humidite}|rainette_afficher_unite{pourcentage, -1, #ENV{extras/service}})
     39                                        (#VALEUR{heure/#GET{index_heure}/humidite}|rainette_afficher_unite{pourcentage, -1, #ENV{extras/service}})
    3940                                </li>]
    4041                        </ul>
  • _plugins_/rainette/trunk/rainette.css

    r94404 r94836  
    102102}
    103103.rainette_previsions_12h .entete+.entete {
    104         width: 27.2em;
     104        width: 26.9em;
    105105        border-right: 0;
    106106}
     
    114114}
    115115.rainette_previsions_12h .cellule+.cellule {
    116         width: 27.2em;
     116        width: 26.9em;
    117117        border-width: 0 0 0.1em 0;
    118118}
  • _plugins_/rainette/trunk/rainette_fonctions.php

    r94614 r94836  
    275275/**
    276276 * @param        $lieu
    277  * @param string $type
    278  * @param int    $jour
    279  * @param string $modele
    280  * @param string $service
    281  *
    282  * @return array|string
    283  */
    284 function rainette_coasser_previsions($lieu, $type = '1_jour', $jour = 0, $modele = 'previsions_12h', $service = 'weather') {
    285 
    286         // Initialisation du retour
    287         $texte = '';
    288 
    289         // Définir la périodicité à partir du modèle
    290         // TODO : étudier comment améliorer ce fonctionnement
    291         if (preg_match('#previsions_(\d{1,2})h#is', $modele, $match)) {
    292                 $periodicite = intval($match[1]);
    293         } else {
    294                 $periodicite = 24;
    295         }
    296 
    297         // Recuperation du tableau des prévisions pour tous les jours disponibles
    298         $charger = charger_fonction('charger_meteo', 'inc');
    299         $nom_cache = $charger($lieu, 'previsions', $periodicite, $service);
    300         lire_fichier($nom_cache, $tableau);
    301         $tableau = unserialize($tableau);
    302 
    303         // Détermination de l'index final contenant les extra (erreur, date...)
    304         $index_extra = 0;
    305 
    306         if (($tableau[$index_extra]['erreur'])) {
    307                 // Affichage du message d'erreur
    308                 $texte = recuperer_fond('modeles/erreur', $tableau[$index_extra]);
    309         } else {
    310                 if ($type == '1_jour') {
    311                         // Dans ce cas la variable $jour indique le numéro du jour demandé (0 pour aujourd'hui)
    312                         // Plutôt que de renvoyer une erreur si le numéro du jour est supérieur au nombre de jours en prévisions
    313                         // on renvoie au moins le jour max
    314                         // Sinon, si $jour désigne un jour précis on renvoie une erreur si ce jour ne fait pas partie des
    315                         // prévisions disponibles
    316                         if (($d = intval(strtotime(strval($jour)))) <= 0) {
    317                                 $index_jour = min($jour, $tableau[$index_extra]['max_previsions'] - 1);
    318                         } else {
    319                                 $d = intval(ceil(($d - time()) / (24 * 3600)));
    320                                 if (($d < 0) or ($d >= $tableau[$index_extra]['max_previsions'])) {
    321                                         $tableau[$index_extra]['erreur'] = 'jour';
    322                                         $tableau[$index_extra]['date_erreur'] = affdate($jour);
    323                                         $texte = recuperer_fond('modeles/erreur', $tableau[$index_extra]);
    324 
    325                                         return $texte;
    326                                 }
    327                                 $index_jour = $d;
    328                         }
    329 
    330                         // Si jour=0 (aujourd'hui), on complete par le tableau du lendemain matin
    331                         // afin de gérer le passage des prévisions jour à celles de la nuit
    332                         if ($index_jour == 0) {
    333                                 $tableau[$index_jour]['lever_soleil'] = $tableau[$index_jour + 1]['lever_soleil'];
    334                                 foreach ($tableau[$index_jour][0] as $_cle => $_valeur) {
    335                                         $tableau[$index_jour][2][$_cle] = $tableau[$index_jour + 1][0][$_cle];
    336                                 }
    337                         }
    338 
    339                         // On ajoute les informations extra (date et crédits)
    340                         $contexte = array_merge($tableau[$index_jour], $tableau[$index_extra]);
    341                         $texte = recuperer_fond("modeles/$modele", $contexte);
    342                 } elseif ($type == 'x_jours') {
    343                         // Si le nombre de jours demandés est supérieur à celui possible on ne renvoie pas une erreur
    344                         // mais le nombre de jours maximal
    345                         if ($jour == 0) {
    346                                 $jour = $index_extra;
    347                         }
    348                         $nb_jours = min($jour, $index_extra);
    349 
    350                         for ($i = 0; $i < $nb_jours; $i++) {
    351                                 $contexte = array_merge($tableau[$i], $tableau[$index_extra]);
    352                                 $texte .= recuperer_fond("modeles/$modele", $contexte);
    353                         }
    354                 }
    355         }
    356 
    357         return $texte;
    358 }
    359 
    360 
    361 /**
    362  * @param        $lieu
    363277 * @param string $modele
    364278 * @param string $service
     
    382296
    383297                        // On verifie que la périodicité demandée explicitement dans l'appel du modèle est ok
     298                        include_spip('inc/normaliser');
    384299                        if (isset($options['periodicite'])) {
    385300                                $periodicite_explicite = intval($options['periodicite']);
     
    460375}
    461376
    462 function trouver_periodicite($type_modele, $service) {
    463 
    464         static $compatibilite_type_periodicite =array(
    465                 24 => array(24, 12),
    466                 12 => array(12),
    467                 1  => array(1,3,6)
    468         );
    469 
    470         // Périodicité initialisée à "non trouvée"
    471         $periodicite = 0;
    472 
    473         if (isset($compatibilite_type_periodicite[$type_modele])) {
    474                 // Acquérir la configuration statique du service pour connaitre les périodicités horaires supportées
    475                 // pour le mode prévisions
    476                 include_spip("services/${service}");
    477                 $configurer = "${service}_service2configuration";
    478                 $configuration = $configurer('previsions');
    479                 $periodicites_service = array_keys($configuration['previsions']['periodicites']);
    480 
    481                 $periodicites_modele = $compatibilite_type_periodicite[$type_modele];
    482                 foreach ($periodicites_modele as $_periodicite_modele) {
    483                         if (in_array($_periodicite_modele, $periodicites_service)) {
    484                                 $periodicite = $_periodicite_modele;
    485                                 break;
    486                         }
    487                 }
    488         }
    489 
    490         return $periodicite;
    491 }
    492 
    493 
    494 function periodicite_compatible($type_modele, $periodicite) {
    495 
    496         static $compatibilite_type_periodicite =array(
    497                 24 => array(24, 12),
    498                 12 => array(12),
    499                 1  => array(1,3,6)
    500         );
    501 
    502         // Périodicité initialisée à "non trouvée"
    503         $compatible = false;
    504 
    505         if (isset($compatibilite_type_periodicite[$type_modele])
    506         and in_array($periodicite, $compatibilite_type_periodicite[$type_modele])) {
    507                 $compatible = true;
    508         }
    509 
    510         return $compatible;
    511 }
    512 
    513 
    514377include_spip('inc/debusquer');
  • _plugins_/rainette/trunk/services/owm.php

    r94614 r94836  
    3636                'periodicites' => array(
    3737                        24 => array('max_jours' => 16),
    38                         3  => array('max_jours' => 5)
     38//                      3  => array('max_jours' => 5)
    3939                ),
    4040                'defaut'       => 24
     
    101101//    pas disponibles en JSON
    102102$GLOBALS['rainette_owm_config']['previsions'] = array(
    103         'periode_maj' => 7200,
    104         'format_flux' => 'xml',
    105         'cle_base'    => array('children', 'forecast', 0, 'children', 'time'),
    106         'cle_heure'   => array(),
    107         'donnees'     => array(
     103        'periode_maj'     => 7200,
     104        'format_flux'     => 'xml',
     105        'cle_base'        => array('children', 'forecast', 0, 'children', 'time'),
     106        'cle_heure'       => array(),
     107        'structure_heure' => false,
     108        'donnees'         => array(
    108109                // Données d'observation
    109110                'date'                 => array('cle' => array('attributes', 'day')),
     111                'heure'                => array('cle' => array()),
    110112                // Données astronomiques
    111113                'lever_soleil'         => array('cle' => array()),
    112114                'coucher_soleil'       => array('cle' => array()),
    113115                // Températures
     116                'temperature'          => array('cle' => array()),
    114117                'temperature_max'      => array('cle' => array('children', 'temperature', 0, 'attributes', 'max')),
    115118                'temperature_min'      => array('cle' => array('children', 'temperature', 0, 'attributes', 'min')),
     
    206209                   . '&mode=' . $configuration['format_flux']
    207210                   . '&units=' . ($configuration['unite'] == 'm' ? 'metric' : 'imperial')
    208                    . ($mode == 'previsions' ? '&cnt=' . $configuration['max_previsions'] : '')
     211                   . (($mode == 'previsions') and ($periodicite == 24) ? '&cnt=' . $configuration['previsions']['periodicites'][$periodicite]['max_jours'] : '')
    209212                   . '&lang=' . $code_langue
    210213                   . ($configuration['inscription'] ? '&APPID=' . $configuration['inscription'] : '');
  • _plugins_/rainette/trunk/services/weather.php

    r94614 r94836  
    3535                'defaut'       => 12
    3636        ),
    37         'max_previsions' => 10,
    3837        'langue_service' => ''
    3938);
     
    9493// -- Seules les données non calculées sont configurées.
    9594$GLOBALS['rainette_weather_config']['previsions'] = array(
    96         'periode_maj' => 1800,
    97         'format_flux' => 'xml',
    98         'cle_base'    => array('children', 'dayf', 0, 'children', 'day'),
    99         'cle_heure'   => array('children', 'part'),
    100         'donnees'     => array(
     95        'periode_maj'     => 1800,
     96        'format_flux'     => 'xml',
     97        'cle_base'        => array('children', 'dayf', 0, 'children', 'day'),
     98        'cle_heure'       => array('children', 'part'),
     99        'structure_heure' => true,
     100        'donnees'         => array(
    101101                // Données d'observation
    102102                'date'                 => array('cle' => array('attributes', 'dt')),
     103                'heure'                => array('cle' => array()),
    103104                // Données astronomiques
    104105                'lever_soleil'         => array('cle' => array('children', 'sunr', 0, 'text')),
    105106                'coucher_soleil'       => array('cle' => array('children', 'suns', 0, 'text')),
    106107                // Températures
     108                'temperature'          => array('cle' => array()),
    107109                'temperature_max'      => array('cle' => array('children', 'hi', 0, 'text')),
    108110                'temperature_min'      => array('cle' => array('children', 'low', 0, 'text')),
     
    180182        if ($mode != 'infos') {
    181183                $url .= ($mode == 'previsions')
    182                         ? '&dayf=' . $configuration['previsions']['max_jours']
     184                        ? '&dayf=' . $configuration['previsions']['periodicites'][$periodicite]['max_jours']
    183185                        : '&cc=*';
    184186        }
  • _plugins_/rainette/trunk/services/wunderground.php

    r94614 r94836  
    3535                'periodicites' => array(
    3636                        24 => array('max_jours' => 10),
    37                         1  => array('max_jours' => 10)
     37//                      1  => array('max_jours' => 10)
    3838                ),
    3939                'defaut'            => 24
    4040        ),
    41         'max_previsions' => 10,
    4241        'langue_service' => 'EN'
    4342);
     
    9897// -- Seules les données non calculées sont configurées.
    9998$GLOBALS['rainette_wunderground_config']['previsions'] = array(
    100         'periode_maj' => 1800,
    101         'format_flux' => 'json',
    102         'cle_base'    => array('forecast', 'simpleforecast', 'forecastday'),
    103         'cle_heure'   => array(),
    104         'donnees'     => array(
     99        'periode_maj'     => 1800,
     100        'format_flux'     => 'json',
     101        'cle_base'        => array('forecast', 'simpleforecast', 'forecastday'),
     102        'cle_heure'       => array(),
     103        'structure_heure' => false,
     104        'donnees'         => array(
    105105                // Données d'observation
    106106                'date'                 => array('cle' => array('date', 'epoch')),
     107                'heure'                => array('cle' => array()),
    107108                // Données astronomiques
    108109                'lever_soleil'         => array('cle' => array()),
    109110                'coucher_soleil'       => array('cle' => array()),
    110111                // Températures
     112                'temperature'          => array('cle' => array()),
    111113                'temperature_max'      => array('cle' => array('high', ''), 'suffixe' => array('id_cle' => 1, 'm' => 'celsius', 's' => 'fahrenheit')),
    112114                'temperature_min'      => array('cle' => array('low', ''), 'suffixe' => array('id_cle' => 1, 'm' => 'celsius', 's' => 'fahrenheit')),
     
    201203
    202204        // Determination de la demande
     205        $demande = '';
    203206        switch ($mode) {
    204207                case 'infos':
     
    381384                'chancerain'      => array(39, 45),
    382385                'chancesleet'     => array(39, 45),
    383                 'chancesleet'     => array(41, 46),
     386//              'chancesleet'     => array(41, 46),
    384387                'chancesnow'      => array(41, 46),
    385388                'chancetstorms'   => array(38, 47),
  • _plugins_/rainette/trunk/services/wwo.php

    r94614 r94836  
    4242                'defaut'       => 24
    4343        ),
    44         'max_previsions' => 15,
    4544        'langue_service' => 'en',
    4645);
     
    101100// -- Seules les données non calculées sont configurées.
    102101$GLOBALS['rainette_wwo_config']['previsions'] = array(
    103         'periode_maj' => 14400,
    104         'format_flux' => 'json',
    105         'cle_base'    => array('data', 'weather'),
    106         'cle_heure'   => array(),
    107         'donnees'     => array(
     102        'periode_maj'     => 14400,
     103        'format_flux'     => 'json',
     104        'cle_base'        => array('data', 'weather'),
     105        'cle_heure'       => array('hourly'),
     106        'structure_heure' => true,
     107        'donnees'         => array(
    108108                // Données d'observation
    109109                'date'                 => array('cle' => array('date')),
     110                'heure'                => array('cle' => array('time')),
    110111                // Données astronomiques
    111112                'lever_soleil'         => array('cle' => array('astronomy', 0, 'sunrise')),
    112113                'coucher_soleil'       => array('cle' => array('astronomy', 0, 'sunset')),
    113114                // Températures
     115                'temperature'          => array('cle' => array('temp'), 'suffixe' => array('id_cle' => 0, 'm' => 'C', 's' => 'F')),
    114116                'temperature_max'      => array('cle' => array('maxtemp'), 'suffixe' => array('id_cle' => 0, 'm' => 'C', 's' => 'F')),
    115117                'temperature_min'      => array('cle' => array('mintemp'), 'suffixe' => array('id_cle' => 0, 'm' => 'C', 's' => 'F')),
    116118                // Données anémométriques
    117                 'vitesse_vent'         => array('cle' => array('hourly', 0, 'windspeed'), 'suffixe' => array('id_cle' => 2, 'm' => 'Kmph', 's' => 'Miles')),
    118                 'angle_vent'           => array('cle' => array('hourly', 0, 'winddirDegree')),
    119                 'direction_vent'       => array('cle' => array('hourly', 0, 'winddir16Point')),
     119                'vitesse_vent'         => array('cle' => array('windspeed'), 'suffixe' => array('id_cle' => 0, 'm' => 'Kmph', 's' => 'Miles')),
     120                'angle_vent'           => array('cle' => array('winddirDegree')),
     121                'direction_vent'       => array('cle' => array('winddir16Point')),
    120122                // Données atmosphériques : risque_uv est calculé
    121                 'risque_precipitation' => array('cle' => array('hourly', 0, 'chanceofrain')),
    122                 'precipitation'        => array('cle' => array('hourly', 0, 'precipMM')),
    123                 'humidite'             => array('cle' => array('hourly', 0, 'humidity')),
    124                 'point_rosee'          => array('cle' => array('hourly', 0, 'DewPoint'), 'suffixe' => array('id_cle' => 2, 'm' => 'C', 's' => 'F')),
    125                 'pression'             => array('cle' => array('hourly', 0, 'pressure')),
    126                 'visibilite'           => array('cle' => array('hourly', 0, 'visibility')),
     123                'risque_precipitation' => array('cle' => array('chanceofrain')),
     124                'precipitation'        => array('cle' => array('precipMM')),
     125                'humidite'             => array('cle' => array('humidity')),
     126                'point_rosee'          => array('cle' => array('DewPoint'), 'suffixe' => array('id_cle' => 0, 'm' => 'C', 's' => 'F')),
     127                'pression'             => array('cle' => array('pressure')),
     128                'visibilite'           => array('cle' => array('visibility')),
    127129                'indice_uv'            => array('cle' => array('uvIndex')),
    128130                // Etats météorologiques natifs
    129                 'code_meteo'           => array('cle' => array('hourly', 0, 'weatherCode')),
    130                 'icon_meteo'           => array('cle' => array('hourly', 0, 'weatherIconUrl', 0, 'value')),
    131                 'desc_meteo'           => array('cle' => array('hourly', 0, 'weatherDesc', 0, 'value')),
     131                'code_meteo'           => array('cle' => array('weatherCode')),
     132                'icon_meteo'           => array('cle' => array('weatherIconUrl', 0, 'value')),
     133                'desc_meteo'           => array('cle' => array('weatherDesc', 0, 'value')),
    132134                // Etats météorologiques calculés : icone, resume, periode sont calculés
    133135        ),
     
    241243        } else {
    242244                $url .= '&cc=no&fx=yes'
    243                                 . '&num_of_days=' . $configuration['previsions']['max_jours']
     245                                . '&num_of_days=' . $configuration['previsions']['periodicites'][$periodicite]['max_jours']
    244246                                . '&tp=' . strval($periodicite);
    245247        }
Note: See TracChangeset for help on using the changeset viewer.