Changeset 91455 in spip-zone


Ignore:
Timestamp:
Aug 24, 2015, 9:49:09 AM (6 years ago)
Author:
eric@…
Message:

Correction des prévisions wwo qui ne fonctionnaent plus depuis un changement dans l'API wwo (c'est récurrent et on est jamais prévenu).
En outre, début de refactoring du plugin pour augmenter le niveau de configuration des services et limiter le code redondant et lourdingue.
On commence par wwo en mode infos et conditions.

Location:
_plugins_/rainette/trunk
Files:
1 added
6 edited

Legend:

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

    r89627 r91455  
    4949        // Si ces système d'unité diffèrent il faut renouveler le cache sinon on affichera des données
    5050        // fausses avec une unité correcte et ce jusqu'à la prochaine échéance du cache.
     51        $unite_config = '';
     52        $unite_cache = '';
    5153        if (file_exists($cache) AND ($mode != 'infos')) {
    5254                include_spip('inc/config');
    5355                $unite_config = lire_config("rainette/${service}/unite", 'm');
    54                 $unite_cache = '';
    5556
    5657                lire_fichier($cache, $contenu);
  • _plugins_/rainette/trunk/inc/debusquer.php

    r89627 r91455  
    66        define ('_RAINETTE_DEBUG', false);
    77
    8 if (!defined('_RAINETTE_DONNEES_PREVISIONS'))
    9         define('_RAINETTE_DONNEES_PREVISIONS', 'index:date:lever_soleil:coucher_soleil:vitesse_vent:angle_vent:direction_vent:temperature_max:temperature_min:
     8if (!defined('_RAINETTE_DEBUG_PREVISIONS'))
     9        define('_RAINETTE_DEBUG_PREVISIONS', 'index:date:lever_soleil:coucher_soleil:vitesse_vent:angle_vent:direction_vent:temperature_max:temperature_min:
    1010                risque_precipitation:precipitation:humidite:pression:code_meteo:icon_meteo:desc_meteo:periode:icone:resume');
    11 if (!defined('_RAINETTE_DONNEES_CONDITIONS'))
    12         define('_RAINETTE_DONNEES_CONDITIONS',
     11if (!defined('_RAINETTE_DEBUG_CONDITIONS'))
     12        define('_RAINETTE_DEBUG_CONDITIONS',
    1313                'Données d\'observation:derniere_maj/station
    1414                |Températures:temperature_reelle/temperature_ressentie
     
    1717                |États mét&#233orologiques natifs:code_meteo/icon_meteo/desc_meteo
    1818                |États mét&#233orologiques calculés:icone/resume/periode');
    19 if (!defined('_RAINETTE_DONNEES_INFOS'))
    20         define('_RAINETTE_DONNEES_INFOS',
     19if (!defined('_RAINETTE_DEBUG_INFOS'))
     20        define('_RAINETTE_DEBUG_INFOS',
    2121                'Lieu:ville/region
    2222                |Coordonnées:longitude/latitude
    2323                |Démographie:population');
    24 if (!defined('_RAINETTE_DONNEES_TYPE_UNITE'))
    25         define('_RAINETTE_DONNEES_TYPE_UNITE',
     24if (!defined('_RAINETTE_DEBUG_TYPE_UNITE'))
     25        define('_RAINETTE_DEBUG_TYPE_UNITE',
    2626                'population:population
    2727                |temperature:temperature_reelle,temperature_ressentie,point_rosee,temperature_max,temperature_min
     
    3131                |pression:pression
    3232                |distance:visibilite
    33                 |precipitation:precipitation');
     33                |precipitation:precipitation
     34                |indice:indice_uv');
    3435
    3536
     
    7576                $mode = 'conditions';
    7677
    77         $donnees = constant('_RAINETTE_DONNEES_' . strtoupper($mode));
     78        $donnees = constant('_RAINETTE_DEBUG_' . strtoupper($mode));
    7879        $donnees = explode(':', $donnees);
    7980
     
    119120
    120121        if (!$types_unite) {
    121                 $config_types = explode('|', _RAINETTE_DONNEES_TYPE_UNITE);
     122                $config_types = explode('|', _RAINETTE_DEBUG_TYPE_UNITE);
    122123                foreach ($config_types as $_config_type) {
    123124                        list($type, $donnees) = explode(':', trim($_config_type));
  • _plugins_/rainette/trunk/paquet.xml

    r90547 r91455  
    22        prefix="rainette"
    33        categorie="divers"
    4         version="2.1.17"
     4        version="2.2.0"
    55        etat="test"
    66        compatibilite="[3.0.11;3.1.*]"
  • _plugins_/rainette/trunk/rainette_fonctions.php

    r89626 r91455  
    182182                                                'population' => 0,
    183183                                                'precipitation' => 1,
    184                                                 'vitesse' => 0);
     184                                                'vitesse' => 0,
     185                                                'indice' => 0);
    185186
    186187        if (!$service) $service = 'weather';
  • _plugins_/rainette/trunk/services/wunderground.php

    r89107 r91455  
    1616        define('_RAINETTE_WUNDERGROUND_JOURS_PREVISIONS', 10);
    1717if (!defined('_RAINETTE_WUNDERGROUND_SUFFIXE_METRIQUE'))
    18         define('_RAINETTE_WUNDERGROUND_SUFFIXE_METRIQUE', 'c:mb:km:kph|celsius:mm:kph');
     18        define('_RAINETTE_WUNDERGROUND_SUFFIXE_METRIQUE', 'c:mb:km:kph:metric|celsius:mm:kph');
    1919if (!defined('_RAINETTE_WUNDERGROUND_SUFFIXE_STANDARD'))
    20         define('_RAINETTE_WUNDERGROUND_SUFFIXE_STANDARD', 'f:in:mi:mph|farenheit:in:mph');
     20        define('_RAINETTE_WUNDERGROUND_SUFFIXE_STANDARD', 'f:in:mi:mph:in|farenheit:in:mph');
    2121if (!defined('_RAINETTE_WUNDERGROUND_LANGUE_DEFAUT'))
    2222        define('_RAINETTE_WUNDERGROUND_LANGUE_DEFAUT', 'FR');
     
    351351
    352352                // Liste des conditions meteo extraites dans le systeme demande
    353                 list($ut, $up, $ud, $uv) = $suffixes;
     353                list($ut, $up, $ud, $uv, $ur) = $suffixes;
    354354                $tableau['vitesse_vent'] = (isset($conditions['wind_'.$uv])) ? floatval($conditions['wind_'.$uv][0]['text']) : '';
    355355                $tableau['angle_vent'] = (isset($conditions['wind_degrees'])) ? intval($conditions['wind_degrees'][0]['text']) : '';
     
    364364
    365365                $tableau['humidite'] = (isset($conditions['relative_humidity'])) ? intval($conditions['relative_humidity'][0]['text']) : '';
     366                $tableau['precipitation'] = (isset($conditions['precip_today_'.$ur])) ? floatval($conditions['precip_today_'.$ur][0]['text']) : '';
    366367                $tableau['point_rosee'] = (isset($conditions['dewpoint_'.$ut])) ? intval($conditions['dewpoint_'.$ut][0]['text']) : '';
    367368
     
    372373
    373374                $tableau['visibilite'] = (isset($conditions['visibility_'.$ud])) ? floatval($conditions['visibility_'.$ud][0]['text']) : '';
     375
     376                $tableau['indice_uv'] = NULL;
    374377
    375378                // Code meteo, resume et icone natifs au service
     
    490493
    491494                $tableau['humidite'] = (isset($conditions['relative_humidity'])) ? intval($conditions['relative_humidity']) : '';
     495                $tableau['precipitation'] = (isset($conditions['precip_today_'.$ur])) ? floatval($conditions['precip_today_'.$ur]) : '';
    492496                $tableau['point_rosee'] = (isset($conditions['dewpoint_'.$ut])) ? intval($conditions['dewpoint_'.$ut]) : '';
    493497
     
    498502
    499503                $tableau['visibilite'] = (isset($conditions['visibility_'.$ud])) ? floatval($conditions['visibility_'.$ud]) : '';
     504
     505                $tableau['indice_uv'] = NULL;
    500506
    501507                // Code meteo, resume et icone natifs au service
  • _plugins_/rainette/trunk/services/wwo.php

    r89107 r91455  
    1919        define('_RAINETTE_WWO_SUFFIXE_STANDARD', 'f:in:miles');
    2020
     21// Configuration des données fournies par le service wwo pour le mode 'conditions'.
     22// -- Seules les données non calculées sont configurées.
     23$GLOBALS['rainette_wwo_config']['conditions'] = array(
     24    'xml' => array(
     25        'base'  => array('children', 'current_condition', 0, 'children'),
     26        'donnees'       => array(
     27                        // Données d'observation
     28                        'derniere_maj'                  => array('cle' => array('localobsdatetime', 0, 'text'), 'suffixe_unite' => ''),
     29                        'station'                               => array('cle' => array(), 'suffixe_unite' => ''),
     30                        // Températures
     31                        'temperature_reelle'    => array('cle' => array('temp_', 0, 'text'), 'suffixe_unite' => array('m' => 'c', 's' => 'f')),
     32                        'temperature_ressentie' => array('cle' => array('feelslike', 0, 'text'), 'suffixe_unite' => array('m' => 'c', 's' => 'f')),
     33                        // Données anémométriques
     34                        'vitesse_vent'                  => array('cle' => array('windspeed', 0, 'text'), 'suffixe_unite' => array('m' => 'kmph', 's' => 'miles')),
     35                        'angle_vent'                    => array('cle' => array('winddirdegree', 0, 'text'), 'suffixe_unite' => ''),
     36                        'direction_vent'                => array('cle' => array('winddir16point', 0, 'text'), 'suffixe_unite' => ''),
     37                        // Données atmosphériques : risque_uv est calculé
     38                        'precipitation'                 => array('cle' => array('precipmm', 0, 'text'), 'suffixe_unite' => ''),
     39                        'humidite'                              => array('cle' => array('humidity', 0, 'text'), 'suffixe_unite' => ''),
     40                        'point_rosee'                   => array('cle' => array(), 'suffixe_unite' => ''),
     41                        'pression'                              => array('cle' => array('pressure', 0, 'text'), 'suffixe_unite' => ''),
     42                        'tendance_pression'             => array('cle' => array(), 'suffixe_unite' => ''),
     43                        'visibilite'                    => array('cle' => array('visibility', 0, 'text'), 'suffixe_unite' => ''),
     44                        'indice_uv'                             => array('cle' => array(), 'suffixe_unite' => ''),
     45                        // Etats météorologiques natifs
     46                        'code_meteo'                    => array('cle' => array('weathercode', 0, 'text'), 'suffixe_unite' => ''),
     47                        'icon_meteo'                    => array('cle' => array('weathericonurl', 0, 'text'), 'suffixe_unite' => ''),
     48                        'desc_meteo'                    => array('cle' => array('weatherdesc', 0, 'text'), 'suffixe_unite' => ''),
     49                        // Etats météorologiques calculés : icone, resume, periode sont calculés
     50        ),
     51    ),
     52    'json' => array(
     53        'base'  => array('data', 'current_condition', 0),
     54        'donnees'       => array(
     55                        // Données d'observation
     56                        'derniere_maj'                  => array('cle' => array('localObsDateTime'), 'suffixe_unite' => ''),
     57                        'station'                               => array('cle' => array(), 'suffixe_unite' => ''),
     58                        // Températures
     59                        'temperature_reelle'    => array('cle' => array('temp_'), 'suffixe_unite' => array('m' => 'C', 's' => 'F')),
     60                        'temperature_ressentie' => array('cle' => array('FeelsLike'), 'suffixe_unite' => array('m' => 'C', 's' => 'F')),
     61                        // Données anémométriques
     62                        'vitesse_vent'                  => array('cle' => array('windspeed'), 'suffixe_unite' => array('m' => 'kmph', 's' => 'miles')),
     63                        'angle_vent'                    => array('cle' => array('winddirDegree'), 'suffixe_unite' => ''),
     64                        'direction_vent'                => array('cle' => array('winddir16Point'), 'suffixe_unite' => ''),
     65                        // Données atmosphériques : risque_uv est calculé
     66                        'precipitation'                 => array('cle' => array('precipMM'), 'suffixe_unite' => ''),
     67                        'humidite'                              => array('cle' => array('humidity'), 'suffixe_unite' => ''),
     68                        'point_rosee'                   => array('cle' => array(), 'suffixe_unite' => ''),
     69                        'pression'                              => array('cle' => array('pressure'), 'suffixe_unite' => ''),
     70                        'tendance_pression'             => array('cle' => array(), 'suffixe_unite' => ''),
     71                        'visibilite'                    => array('cle' => array('visibility'), 'suffixe_unite' => ''),
     72                        'indice_uv'                             => array('cle' => array(), 'suffixe_unite' => ''),
     73                        // Etats météorologiques natifs
     74                        'code_meteo'                    => array('cle' => array('weatherCode'), 'suffixe_unite' => ''),
     75                        'icon_meteo'                    => array('cle' => array('weatherIconUrl', 0, 'value'), 'suffixe_unite' => ''),
     76                        'desc_meteo'                    => array('cle' => array('weatherDesc', 0, 'value'), 'suffixe_unite' => ''),
     77                        // Etats météorologiques calculés : icone, resume, periode sont calculés
     78        ),
     79    ),
     80);
     81
     82
     83// Configuration des données fournies par le service wwo pour le mode 'conditions'.
     84// -- Seules les données non calculées sont configurées.
     85$GLOBALS['rainette_wwo_config']['previsions'] = array(
     86    'xml' => array(
     87        'base'  => array('children', 'weather'),
     88        'donnees'       => array(
     89                        // Données d'observation : l'index est calculé
     90                        'date'                                  => array('cle' => array('date', 0, 'text'), 'suffixe_unite' => ''),
     91                        // Données astronomiques
     92                        'lever_soleil'                  => array('cle' => array(), 'suffixe_unite' => ''),
     93                        'coucher_soleil'                => array('cle' => array(), 'suffixe_unite' => ''),
     94                        // Températures
     95                        'temperature_max'               => array('cle' => array('tempmax', 0, 'text'), 'suffixe_unite' => array('m' => 'c', 's' => 'f')),
     96                        'temperature_min'               => array('cle' => array('tempmin', 0, 'text'), 'suffixe_unite' => array('m' => 'c', 's' => 'f')),
     97                        // Données anémométriques
     98                        'vitesse_vent'                  => array('cle' => array('windspeed', 0, 'text'), 'suffixe_unite' => array('m' => 'kmph', 's' => 'miles')),
     99                        'angle_vent'                    => array('cle' => array('winddirdegree', 0, 'text'), 'suffixe_unite' => ''),
     100                        'direction_vent'                => array('cle' => array('winddir16point', 0, 'text'), 'suffixe_unite' => ''),
     101                        // Données atmosphériques : risque_uv est calculé
     102                        'risque_precipitation'  => array('cle' => array(), 'suffixe_unite' => ''),
     103                        'precipitation'                 => array('cle' => array('precipmm', 0, 'text'), 'suffixe_unite' => ''),
     104                        'humidite'                              => array('cle' => array(), 'suffixe_unite' => ''),
     105                        'pression'                              => array('cle' => array('pressure', 0, 'text'), 'suffixe_unite' => ''),
     106                        'indice_uv'                             => array('cle' => array(), 'suffixe_unite' => ''),
     107                        // Etats météorologiques natifs
     108                        'code_meteo'                    => array('cle' => array('weathercode', 0, 'text'), 'suffixe_unite' => ''),
     109                        'icon_meteo'                    => array('cle' => array('weathericonurl', 0, 'text'), 'suffixe_unite' => ''),
     110                        'desc_meteo'                    => array('cle' => array('weatherdesc', 0, 'text'), 'suffixe_unite' => ''),
     111                        // Etats météorologiques calculés : icone, resume, periode sont calculés
     112        ),
     113    ),
     114    'json' => array(
     115        'base'  => array('data', 'current_condition', 0),
     116        'donnees'       => array(
     117                        // Données d'observation
     118                        'derniere_maj'                  => array('cle' => array('localObsDateTime'), 'suffixe_unite' => ''),
     119                        'station'                               => array('cle' => array(), 'suffixe_unite' => ''),
     120                        // Températures
     121                        'temperature_reelle'    => array('cle' => array('temp_'), 'suffixe_unite' => array('m' => 'C', 's' => 'F')),
     122                        'temperature_ressentie' => array('cle' => array('FeelsLike'), 'suffixe_unite' => array('m' => 'C', 's' => 'F')),
     123                        // Données anémométriques
     124                        'vitesse_vent'                  => array('cle' => array('windspeed'), 'suffixe_unite' => array('m' => 'kmph', 's' => 'miles')),
     125                        'angle_vent'                    => array('cle' => array('winddirDegree'), 'suffixe_unite' => ''),
     126                        'direction_vent'                => array('cle' => array('winddir16Point'), 'suffixe_unite' => ''),
     127                        // Données atmosphériques : risque_uv est calculé
     128                        'precipitation'                 => array('cle' => array('precipMM'), 'suffixe_unite' => ''),
     129                        'humidite'                              => array('cle' => array('humidity'), 'suffixe_unite' => ''),
     130                        'point_rosee'                   => array('cle' => array(), 'suffixe_unite' => ''),
     131                        'pression'                              => array('cle' => array('pressure'), 'suffixe_unite' => ''),
     132                        'tendance_pression'             => array('cle' => array(), 'suffixe_unite' => ''),
     133                        'visibilite'                    => array('cle' => array('visibility'), 'suffixe_unite' => ''),
     134                        'indice_uv'                             => array('cle' => array(), 'suffixe_unite' => ''),
     135                        // Etats météorologiques natifs
     136                        'code_meteo'                    => array('cle' => array('weatherCode'), 'suffixe_unite' => ''),
     137                        'icon_meteo'                    => array('cle' => array('weatherIconUrl', 0, 'value'), 'suffixe_unite' => ''),
     138                        'desc_meteo'                    => array('cle' => array('weatherDesc', 0, 'value'), 'suffixe_unite' => ''),
     139                        // Etats météorologiques calculés : icone, resume, periode sont calculés
     140        ),
     141    ),
     142);
     143
     144// Configuration des données fournies par le service wwo pour le mode 'infos'.
     145// -- Seules les données non calculées sont configurées.
     146$GLOBALS['rainette_wwo_config']['infos'] = array(
     147    'xml' => array(
     148        'base'  => array('children', 'nearest_area', 0, 'children'),
     149        'donnees'       => array(
     150                // Lieu
     151                'ville'                         => array('cle' => array('areaname+country', 0, 'text'), 'suffixe_unite' => ''),
     152                'region'                        => array('cle' => array('region', 0, 'text'), 'suffixe_unite' => ''),
     153                // Coordonnées
     154                'longitude'                     => array('cle' => array('longitude', 0, 'text'), 'suffixe_unite' => ''),
     155                'latitude'                      => array('cle' => array('latitude', 0, 'text'), 'suffixe_unite' => ''),
     156                // Données démographiques
     157                'population'            => array('cle' => array('population', 0, 'text'), 'suffixe_unite' => ''),
     158                // Informations complémentaires : aucune configuration car ce sont des données calculées
     159        ),
     160    ),
     161    'json' => array(
     162        'base'  => array('data', 'nearest_area', 0),
     163        'donnees'       => array(
     164                // Lieu
     165            'ville'                             => array('cle' => array('areaName+country', 0, 'value'), 'suffixe_unite' => ''),
     166            'region'                    => array('cle' => array('region', 0, 'value'), 'suffixe_unite' => ''),
     167            // Coordonnées
     168            'longitude'                 => array('cle' => array('longitude'), 'suffixe_unite' => ''),
     169            'latitude'                  => array('cle' => array('latitude'), 'suffixe_unite' => ''),
     170            // Données démographiques
     171            'population'                => array('cle' => array('population', 0, 'value'), 'suffixe_unite' => ''),
     172                // Informations complémentaires : aucune configuration car ce sont des données calculées
     173        ),
     174    ),
     175);
     176
    21177
    22178/**
     
    31187 * @param string        $lieu
    32188 * @param string        $mode
     189 *
    33190 * @return string
    34191 */
     
    36193        $dir = sous_repertoire(_DIR_CACHE, 'rainette');
    37194        $dir = sous_repertoire($dir, 'wwo');
    38         $fichier_cache = $dir . str_replace(array(',', '+', '.'), '-', $lieu) . "_" . $mode . ".txt";
     195        $fichier_cache = $dir . str_replace(array(' ', ',', '+', '.'), array('', '-', '-', '-'), $lieu) . "_" . $mode . ".txt";
    39196
    40197        return $fichier_cache;
     
    55212                .  '&format=' . $format
    56213                .  '&extra=localObsTime'
    57                 .  '&q=' . str_replace(' ', '', trim($lieu));
     214                .  '&q=' . str_replace(' ', '', trim($lieu)); //todo : ne faut-il pas remplacer par + ?
    58215        if ($mode == 'infos') {
    59216                $url .= '&includeLocation=yes&cc=no&fx=no';
    60217        }
    61218        else {
    62                 $url .= ($mode == 'previsions') ? '&cc=no&fx=yes&num_of_days=' . _RAINETTE_WWO_JOURS_PREVISIONS : '&cc=yes&fx=no';
     219                $url .= ($mode == 'previsions') ? '&cc=no&fx=yes&tp=24&num_of_days=' . _RAINETTE_WWO_JOURS_PREVISIONS : '&cc=yes&fx=no';
    63220        }
    64221
     
    108265
    109266        // Identification des suffixes d'unite pour choisir le bon champ
    110         // -> wunderground fournit toujours les valeurs dans les deux systemes d'unites
     267        // -> wwo fournit des valeurs dans les deux systemes d'unites mais pas toutes
    111268        include_spip('inc/config');
    112269        $unite = lire_config('rainette/wwo/unite', 'm');
     
    164321 */
    165322function wwo_flux2conditions($flux, $lieu) {
     323        global $rainette_wwo_config;
     324
    166325        // Identifier le format d'échange des données
    167326        include_spip('inc/config');
    168327        $format = lire_config('rainette/wwo/format', 'xml');
    169328
    170         // Construire le tableau standard des conditions météorologiques propres au service
    171         $tableau = ($format == 'xml') ? xml2conditions_wwo($flux) : json2conditions_wwo($flux);
    172 
    173         // Convertir les informations exprimées en système métrique dans le systeme US si la
    174         // configuration le demande
    175         $unite = lire_config('rainette/wwo/unite', 'm');
    176         if ($unite == 's') {
    177                 // Seules la température et la vitesse du vent sont fournies dans les deux systèmes.
    178                 // On ne les utilise pas et on convertit l'ensemble des données.
    179                 $tableau['temperature_reelle'] = ($tableau['temperature_reelle'])
    180                         ? celsius2farenheit($tableau['temperature_reelle']) : '';
    181                 $tableau['temperature_ressentie'] = ($tableau['temperature_ressentie'])
    182                         ? celsius2farenheit($tableau['temperature_ressentie']) : '';
    183                 $tableau['vitesse_vent'] = ($tableau['vitesse_vent'])
    184                         ? kilometre2mile($tableau['vitesse_vent']) : '';
    185                 $tableau['visibilite'] = ($tableau['visibilite'])
    186                         ? kilometre2mile($tableau['visibilite']) : '';
    187                 $tableau['pression'] = ($tableau['pression'])
    188                         ? millibar2inch($tableau['pression']) : '';
    189         }
    190 
    191         // Compléter le tableau standard avec les états météorologiques calculés
    192         if ($tableau['code_meteo']
    193         AND $tableau['icon_meteo']
    194         AND isset($tableau['desc_meteo'])) {
    195                 // Determination de l'indicateur jour/nuit qui permet de choisir le bon icone
    196                 // Pour ce service aucun indicateur n'est disponible
    197                 // -> on utilise le nom de l'icone qui contient l'indication "night"
    198                 $icone = basename($tableau['icon_meteo']);
    199                 if (strpos($icone, '_night') === false)
    200                         $tableau['periode'] = 0; // jour
    201                 else
    202                         $tableau['periode'] = 1; // nuit
    203 
    204                 // Determination, suivant le mode choisi, du code, de l'icone et du resume qui seront affiches
    205                 $condition = lire_config('rainette/wwo/condition', 'wwo');
    206                 if ($condition == 'wwo') {
    207                         // On affiche les conditions natives fournies par le service.
    208                         // Pour le resume, wwo ne fournit pas de traduction : on stocke donc le code meteo afin
    209                         // de le traduire à partir des fichiers de langue SPIP.
    210                         $tableau['icone']['code'] = $tableau['code_meteo'];
    211                         $tableau['icone']['url'] = copie_locale($tableau['icon_meteo']);
    212                         $tableau['resume'] = $tableau['code_meteo'];
     329        // Identification des suffixes d'unite pour choisir le bon champ
     330        // -> wwo fournit des valeurs dans les deux systemes d'unites mais pas toutes
     331        $systeme_unite = lire_config('rainette/wwo/unite', 'm');
     332
     333        // Initialiser le tableau des données météo directement fournies par le service
     334        include_spip('inc/normaliser');
     335        $tableau = get_donnees_service($rainette_wwo_config, 'conditions', $format, $systeme_unite, $flux);
     336
     337        if ($tableau) {
     338                // Convertir les informations exprimées en système métrique dans le systeme US si la
     339                // configuration le demande
     340                if ($systeme_unite == 's') {
     341                        include_spip('inc/convertir');
     342                        // Seules la température, la température ressentie et la vitesse du vent sont fournies dans
     343                        // les deux systèmes.
     344                        $tableau['visibilite'] = ($tableau['visibilite'])
     345                                ? kilometre2mile($tableau['visibilite']) : '';
     346                        $tableau['pression'] = ($tableau['pression'])
     347                                ? millibar2inch($tableau['pression']) : '';
     348                        $tableau['precipitation'] = ($tableau['precipitation'])
     349                                ? millimetre2inch($tableau['precipitation']) : '';
    213350                }
    214                 else {
    215                         // On affiche les conditions traduites dans le systeme weather.com
    216                         $meteo = meteo_wwo2weather($tableau['code_meteo'], $tableau['periode']);
    217                         $tableau['icone'] = $meteo;
    218                         $tableau['resume'] = $meteo;
     351
     352                // Compléter le tableau standard avec les états météorologiques calculés
     353                if ($tableau['code_meteo']
     354                AND $tableau['icon_meteo']
     355                AND isset($tableau['desc_meteo'])) {
     356                        // Determination de l'indicateur jour/nuit qui permet de choisir le bon icone
     357                        // Pour ce service aucun indicateur n'est disponible
     358                        // -> on utilise le nom de l'icone qui contient l'indication "night"
     359                        $icone = basename($tableau['icon_meteo']);
     360                        if (strpos($icone, '_night') === false)
     361                                $tableau['periode'] = 0; // jour
     362                        else
     363                                $tableau['periode'] = 1; // nuit
     364
     365                        // Determination, suivant le mode choisi, du code, de l'icone et du resume qui seront affiches
     366                        $condition = lire_config('rainette/wwo/condition', 'wwo');
     367                        if ($condition == 'wwo') {
     368                                // On affiche les conditions natives fournies par le service.
     369                                // Pour le resume, wwo ne fournit pas de traduction : on stocke donc le code meteo afin
     370                                // de le traduire à partir des fichiers de langue SPIP.
     371                                $tableau['icone']['code'] = $tableau['code_meteo'];
     372                                $tableau['icone']['url'] = copie_locale($tableau['icon_meteo']);
     373                                $tableau['resume'] = $tableau['code_meteo'];
     374                        }
     375                        else {
     376                                // On affiche les conditions traduites dans le systeme weather.com
     377                                $meteo = meteo_wwo2weather($tableau['code_meteo'], $tableau['periode']);
     378                                $tableau['icone'] = $meteo;
     379                                $tableau['resume'] = $meteo;
     380                        }
    219381                }
    220         }
    221 
    222         // Traitement des erreurs de flux
    223         $tableau['erreur'] = (!$tableau) ? 'chargement' : '';
    224 
    225         return $tableau;
    226 }
     382        } else {
     383                // Traitement des erreurs de flux
     384                $tableau['erreur'] = 'chargement';
     385        }
     386
     387        return $tableau;
     388}
     389
    227390
    228391/**
     
    232395 */
    233396function wwo_flux2infos($flux, $lieu) {
     397        global $rainette_wwo_config;
     398
    234399        // Identifier le format d'échange des données
    235400        include_spip('inc/config');
    236401        $format = lire_config('rainette/wwo/format', 'xml');
    237 
    238         // Construire le tableau standard des informations sur le lieu et ajouter le nombre de jours de prévisions
    239         $tableau = ($format == 'xml') ? xml2infos_wwo($flux) : json2infos_wwo($flux);
    240         $tableau['max_previsions'] = _RAINETTE_WWO_JOURS_PREVISIONS;
    241 
    242         // Traitement des erreurs de flux
    243         $tableau['erreur'] = (!$tableau) ? 'chargement' : '';
     402        $systeme_unite = lire_config('rainette/wwo/unite', 'm');
     403
     404        // Initialiser le tableau normalisé des informations à partir des données du service
     405        include_spip('inc/normaliser');
     406        $tableau = get_donnees_service($rainette_wwo_config, 'infos', $format, $systeme_unite, $flux);
     407
     408        if ($tableau) {
     409                // Ajouter les informations calculées, à savoir, le nombre de jours de prévisions
     410                $tableau['max_previsions'] = _RAINETTE_WWO_JOURS_PREVISIONS;
     411        } else {
     412                // Traitement des erreurs de flux
     413                $tableau['erreur'] = 'chargement';
     414        }
    244415
    245416        return $tableau;
     
    285456
    286457                                        // Date complete des lever/coucher du soleil
    287                                         $tableau[$_index]['lever_soleil'] = NULL;
    288                                         $tableau[$_index]['coucher_soleil'] = NULL;
     458                                        $tableau[$_index]['lever_soleil'] = (isset($_prevision['astronomy'][0]['children']['sunrise'])) ? $_prevision['astronomy'][0]['children']['sunrise'][0]['text'] : '';
     459                                        $tableau[$_index]['coucher_soleil'] = (isset($_prevision['astronomy'][0]['children']['sunset'])) ? $_prevision['astronomy'][0]['children']['sunset'][0]['text'] : '';
    289460
    290461                                        // Previsions du jour
    291                                         list($ut, $up, $uv) = $suffixes;
    292                                         $tableau[$_index][0]['temperature_max'] = (isset($_prevision["tempmax$ut"])) ? floatval($_prevision["tempmax$ut"][0]['text']) : '';
    293                                         $tableau[$_index][0]['temperature_min'] = (isset($_prevision["tempmin$ut"])) ? floatval($_prevision["tempmin$ut"][0]['text']) : '';
    294                                         $tableau[$_index][0]['vitesse_vent'] = (isset($_prevision["windspeed$uv"])) ? floatval($_prevision["windspeed$uv"][0]['text']) : '';
    295                                         $tableau[$_index][0]['angle_vent'] = (isset($_prevision['winddirdegree'])) ? intval($_prevision['winddirdegree'][0]['text']) : '';
    296                                         $tableau[$_index][0]['direction_vent'] = (isset($_prevision['winddir16point'])) ? $_prevision['winddir16point'][0]['text'] : '';
    297 
    298                                         $tableau[$_index][0]['risque_precipitation'] = NULL;
     462                                        list($ut, $ur, $uv) = $suffixes;
     463                                        $tableau[$_index][0]['temperature_max'] = (isset($_prevision["maxtemp$ut"])) ? floatval($_prevision["maxtemp$ut"][0]['text']) : '';
     464                                        $tableau[$_index][0]['temperature_min'] = (isset($_prevision["mintemp$ut"])) ? floatval($_prevision["mintemp$ut"][0]['text']) : '';
     465                                        $tableau[$_index][0]['vitesse_vent'] = (isset($_prevision['hourly'][0]['children']["windspeed$uv"])) ? floatval($_prevision['hourly'][0]['children']["windspeed$uv"][0]['text']) : '';
     466                                        $tableau[$_index][0]['angle_vent'] = (isset($_prevision['hourly'][0]['children']['winddirdegree'])) ? intval($_prevision['hourly'][0]['children']['winddirdegree'][0]['text']) : '';
     467                                        $tableau[$_index][0]['direction_vent'] = (isset($_prevision['hourly'][0]['children']['winddir16point'])) ? $_prevision['hourly'][0]['children']['winddir16point'][0]['text'] : '';
     468
     469                                        $tableau[$_index][0]['risque_precipitation'] = (isset($_prevision['hourly'][0]['children']['chanceofrain'])) ? intval($_prevision['hourly'][0]['children']['chanceofrain'][0]['text']) : '';
    299470                                        include_spip('inc/convertir');
    300                                         $tableau[$_index][0]['precipitation'] = (isset($_prevision['precipmm'])) ? floatval($_prevision['precipmm'][0]['text']) : '';
    301                                         if (($up == 'in') AND $tableau[$_index][0]['precipitation'])
     471                                        $tableau[$_index][0]['precipitation'] = (isset($_prevision['hourly'][0]['children']['precipmm'])) ? floatval($_prevision['hourly'][0]['children']['precipmm'][0]['text']) : '';
     472                                        if (($ur == 'in') AND $tableau[$_index][0]['precipitation'])
    302473                                                $tableau[$_index][0]['precipitation'] = millimetre2inch($tableau[$_index][0]['precipitation']);
    303                                         $tableau[$_index][0]['humidite'] = NULL;
    304 
    305                                         $tableau[$_index][0]['code_meteo'] = (isset($_prevision['weathercode'])) ? intval($_prevision['weathercode'][0]['text']) : '';
    306                                         $tableau[$_index][0]['icon_meteo'] = (isset($_prevision['weathericonurl'])) ? $_prevision['weathericonurl'][0]['text'] : '';
    307                                         $tableau[$_index][0]['desc_meteo'] = (isset($_prevision['weatherdesc'])) ? $_prevision['weatherdesc'][0]['text'] : '';
     474                                        $tableau[$_index][0]['humidite'] = (isset($_prevision['hourly'][0]['children']['humidity'])) ? intval($_prevision['hourly'][0]['children']['humidity'][0]['text']) : '';
     475
     476                                        $tableau[$_index][0]['indice_uv'] = (isset($_prevision['uvindex'])) ? intval($_prevision['uvindex'][0]['text']) : '';
     477
     478                                        $tableau[$_index][0]['code_meteo'] = (isset($_prevision['hourly'][0]['children']['weathercode'])) ? intval($_prevision['hourly'][0]['children']['weathercode'][0]['text']) : '';
     479                                        $tableau[$_index][0]['icon_meteo'] = (isset($_prevision['hourly'][0]['children']['weathericonurl'])) ? $_prevision['hourly'][0]['children']['weathericonurl'][0]['text'] : '';
     480                                        $tableau[$_index][0]['desc_meteo'] = (isset($_prevision['hourly'][0]['children']['weatherdesc'])) ? $_prevision['hourly'][0]['children']['weatherdesc'][0]['text'] : '';
    308481
    309482                                        // Previsions de la nuit si elle existe
     
    318491
    319492
    320 function xml2conditions_wwo($flux) {
     493function xml2conditions_wwo($flux, $suffixes) {
    321494        $tableau = array();
    322495
    323496        if (isset($flux['children']['current_condition'][0]['children'])) {
    324                 include_spip('inc/convertir');
    325497                $conditions = $flux['children']['current_condition'][0]['children'];
    326498
     
    331503                $tableau['station'] = NULL;
    332504
    333                 // Liste des conditions meteo extraite dans le systeme metrique
    334                 $tableau['vitesse_vent'] = (isset($conditions['windspeedkmph'])) ? floatval($conditions['windspeedkmph'][0]['text']) : '';
     505                // Liste des conditions meteo extraites dans le systeme demandé ou dans le système
     506                // metrique si celle-ci ne sont pas retournées dans le système impérial et donc
     507                // nécessitent une conversion
     508                list($ut, , $uv) = $suffixes;
     509
     510                $tableau['vitesse_vent'] = (isset($conditions["windspeed$uv"])) ? floatval($conditions["windspeed$uv"][0]['text']) : '';
    335511                $tableau['angle_vent'] = (isset($conditions['winddirdegree'])) ? intval($conditions['winddirdegree'][0]['text']) : '';
    336512                $tableau['direction_vent'] = (isset($conditions['winddir16point'])) ? $conditions['winddir16point'][0]['text'] : '';
    337513
    338                 $tableau['temperature_reelle'] = (isset($conditions['temp_c'])) ? floatval($conditions['temp_c'][0]['text']) : '';
    339                 $tableau['temperature_ressentie'] = (isset($conditions['temp_c'])) ? temperature2ressenti($tableau['temperature_reelle'], $tableau['vitesse_vent']) : '';
     514                $tableau['temperature_reelle'] = (isset($conditions["temp_$ut"])) ? floatval($conditions["temp_$ut"][0]['text']) : '';
     515                $tableau['temperature_ressentie'] = (isset($conditions["feelslike$ut"])) ? floatval($conditions["feelslike$ut"][0]['text']) : '';
    340516
    341517                $tableau['humidite'] = (isset($conditions['humidity'])) ? intval($conditions['humidity'][0]['text']) : '';
     518                $tableau['precipitation'] = (isset($conditions['precipmm'])) ? floatval($conditions['precipmm'][0]['text']) : '';
    342519                $tableau['point_rosee'] = NULL;
    343520
     
    346523
    347524                $tableau['visibilite'] = (isset($conditions['visibility'])) ? floatval($conditions['visibility'][0]['text']) : '';
     525
     526                $tableau['indice_uv'] = NULL;
    348527
    349528                // Code meteo, resume et icone natifs au service
     
    402581
    403582                                        // Date complete des lever/coucher du soleil
    404                                         $tableau[$_index]['lever_soleil'] = NULL;
    405                                         $tableau[$_index]['coucher_soleil'] = NULL;
     583                                        $tableau[$_index]['lever_soleil'] = (isset($_prevision['astronomy'][0]['sunrise'])) ? $_prevision['astronomy'][0]['sunrise'] : '';
     584                                        $tableau[$_index]['coucher_soleil'] = (isset($_prevision['astronomy'][0]['sunset'])) ? $_prevision['astronomy'][0]['sunset'] : '';
    406585
    407586                                        // Previsions du jour
    408                                         list($ut, $up, $uv) = array_map('ucfirst', $suffixes);
    409                                         $tableau[$_index][0]['temperature_max'] = (isset($_prevision["tempMax$ut"])) ? floatval($_prevision["tempMax$ut"]) : '';
    410                                         $tableau[$_index][0]['temperature_min'] = (isset($_prevision["tempMin$ut"])) ? floatval($_prevision["tempMin$ut"]) : '';
     587                                        list($ut, $ur, $uv) = array_map('ucfirst', $suffixes);
     588                                        $tableau[$_index][0]['temperature_max'] = (isset($_prevision["maxtemp$ut"])) ? floatval($_prevision["maxtemp$ut"]) : '';
     589                                        $tableau[$_index][0]['temperature_min'] = (isset($_prevision["mintemp$ut"])) ? floatval($_prevision["mintemp$ut"]) : '';
    411590                                        $tableau[$_index][0]['vitesse_vent'] = (isset($_prevision["windspeed$uv"])) ? floatval($_prevision["windspeed$uv"]) : '';
    412591                                        $tableau[$_index][0]['angle_vent'] = (isset($_prevision['winddirDegree'])) ? intval($_prevision['winddirDegree']) : '';
     
    416595                                        include_spip('inc/convertir');
    417596                                        $tableau[$_index][0]['precipitation'] = (isset($_prevision['precipMM'])) ? floatval($_prevision['precipMM']) : '';
    418                                         if (($up == 'in') AND $tableau[$_index][0]['precipitation'])
     597                                        if (($ur == 'in') AND $tableau[$_index][0]['precipitation'])
    419598                                                $tableau[$_index][0]['precipitation'] = millimetre2inch($tableau[$_index][0]['precipitation']);
    420599                                        $tableau[$_index][0]['humidite'] = NULL;
     
    434613}
    435614
    436 function json2conditions_wwo($flux) {
     615function json2conditions_wwo($flux, $suffixes) {
    437616        $tableau = array();
    438617
     
    447626
    448627                // Liste des conditions meteo extraite dans le systeme metrique
    449                 $tableau['vitesse_vent'] = (isset($conditions['windspeedKmph'])) ? floatval($conditions['windspeedKmph']) : '';
     628                list($ut, , $uv) = array_map('ucfirst', $suffixes);
     629                $tableau['vitesse_vent'] = (isset($conditions["windspeed$uv"])) ? floatval($conditions["windspeed$uv"]) : '';
    450630                $tableau['angle_vent'] = (isset($conditions['winddirDegree'])) ? intval($conditions['winddirDegree']) : '';
    451631                $tableau['direction_vent'] = (isset($conditions['winddir16Point'])) ? $conditions['winddir16Point'] : '';
    452632
    453                 include_spip('inc/convertir');
    454                 $tableau['temperature_reelle'] = (isset($conditions['temp_C'])) ? floatval($conditions['temp_C']) : '';
    455                 $tableau['temperature_ressentie'] = (isset($conditions['temp_C'])) ? temperature2ressenti($tableau['temperature_reelle'], $tableau['vitesse_vent']) : '';
     633                $tableau['temperature_reelle'] = (isset($conditions["temp_$ut"])) ? floatval($conditions["temp_$ut"]) : '';
     634                $tableau['temperature_ressentie'] = (isset($conditions["FeelsLike$ut"])) ? floatval($conditions["FeelsLike$ut"]) : '';
    456635
    457636                $tableau['humidite'] = (isset($conditions['humidity'])) ? intval($conditions['humidity']) : '';
     637                $tableau['precipitation'] = (isset($conditions['precipMM'])) ? floatval($conditions['precipMM']) : '';
    458638                $tableau['point_rosee'] = NULL;
    459639
     
    462642
    463643                $tableau['visibilite'] = (isset($conditions['visibility'])) ? floatval($conditions['visibility']) : '';
     644
     645                $tableau['indice_uv'] = NULL;
    464646
    465647                // Code meteo, resume et icone natifs au service
Note: See TracChangeset for help on using the changeset viewer.