Changeset 77116 in spip-zone


Ignore:
Timestamp:
Oct 9, 2013, 8:37:27 PM (8 years ago)
Author:
eric@…
Message:

Service owm : ajout des conditions météo.
Par contre, il faut revoir le refactoring de la fonction d'affichage de l'icone qui ne fonctionne plus pour ce service et wunderground.

Location:
_plugins_/rainette/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/rainette/trunk/content/debug.html

    r77089 r77116  
    6262<br class="nettoyeur"/>
    6363
     64<h2 class="h2"><:rainette:meteo_conditions|ucfirst:></h2>
     65[(#MODELE{rainette_conditions,
     66        code=#GET{code},
     67        sous_modele=conditions_tempsreel,
     68        service=owm})]
     69<br class="nettoyeur"/>
     70
     71[(#GET{code}|rainette_debug{infos, owm})]
     72[(#GET{code}|rainette_debug{conditions, owm})]
     73
    6474<br />
    6575<hr />
  • _plugins_/rainette/trunk/services/owm.php

    r77089 r77116  
    55if (!defined('_RAINETTE_OWM_URL_BASE_REQUETE'))
    66        define('_RAINETTE_OWM_URL_BASE_REQUETE', 'http://api.openweathermap.org/data/2.5/');
     7if (!defined('_RAINETTE_OWM_URL_BASE_ICONE'))
     8        define('_RAINETTE_OWM_URL_BASE_ICONE', 'http://openweathermap.org/img/w');
    79if (!defined('_RAINETTE_OWM_JOURS_PREVISIONS'))
    810        define('_RAINETTE_OWM_JOURS_PREVISIONS', 14);
     
    98100
    99101        // On stocke les informations disponibles dans un tableau standard
    100         if (isset($flux['children']['current_observation'][0]['children'])) {
    101                 $conditions = $flux['children']['current_observation'][0]['children'];
     102        if (isset($flux['children'])) {
     103                $conditions = $flux['children'];
    102104
    103105                // Date d'observation
    104                 $date_maj = (isset($conditions['observation_epoch'])) ? intval($conditions['observation_epoch'][0]['text']) : 0;
     106                $date_maj = (isset($conditions['lastupdate'])) ? strtotime($conditions['lastupdate'][0]['attributes']['value']) : 0;
    105107                $tableau['derniere_maj'] = date('Y-m-d H:i:s', $date_maj);
    106108                // Station d'observation
    107                 // TODO : pour l'instant le champ full n'est pas complet et a une virgule apres la ville - http://gsfn.us/t/329p4
    108                 $tableau['station'] = (isset($conditions['observation_location']))
    109                         ? trim($conditions['observation_location'][0]['children']['full'][0]['text'], ',')
    110                         : '';
    111 
    112                 // Identification des suffixes d'unite pour choisir le bon champ
    113                 // -> owm fournit toujours les valeurs dans les deux systemes d'unites
    114                 include_spip('inc/config');
    115                 $unite = lire_config('rainette/owm/unite', 'm');
    116                 if ($unite == 'm')
    117                         $suffixes = explode(':', _RAINETTE_WUNDERGROUND_SUFFIXE_METRIQUE);
    118                 else
    119                         $suffixes = explode(':', _RAINETTE_WUNDERGROUND_SUFFIXE_STANDARD);
    120                 list($ut, $up, $ud, $uv) = $suffixes;
    121 
    122 
    123                 // Liste des conditions meteo extraites dans le systeme demande
    124                 $tableau['vitesse_vent'] = (isset($conditions['wind_'.$uv])) ? floatval($conditions['wind_'.$uv][0]['text']) : '';
    125                 $tableau['angle_vent'] = (isset($conditions['wind_degrees'])) ? intval($conditions['wind_degrees'][0]['text']) : '';
    126                 // TODO : a confirmer suite a la reponse au post - http://gsfn.us/t/32w74
    127                 // -> La documentation indique que les directions uniques sont fournies sous forme de texte comme North
    128                 //    alors que les autres sont des acronymes. On passe donc tout en acronyme
    129                 $tableau['direction_vent'] = (isset($conditions['wind_dir']))
    130                         ? (strlen($conditions['wind_dir'][0]['text']) <= 3 ? $conditions['wind_dir'][0]['text'] : strtoupper(substr($conditions['wind_dir'][0]['text'], 0, 1))) : '';
    131 
    132                 $tableau['temperature_reelle'] = (isset($conditions['temp_'.$ut])) ? intval($conditions['temp_'.$ut][0]['text']) : '';
    133                 $tableau['temperature_ressentie'] = (isset($conditions['feelslike_'.$ut])) ? intval($conditions['feelslike_'.$ut][0]['text']) : '';
    134 
    135                 $tableau['humidite'] = (isset($conditions['relative_humidity'])) ? intval($conditions['relative_humidity'][0]['text']) : '';
    136                 $tableau['point_rosee'] = (isset($conditions['dewpoint_'.$ut])) ? intval($conditions['dewpoint_'.$ut][0]['text']) : '';
    137 
    138                 $tableau['pression'] = (isset($conditions['pressure_'.$up])) ? floatval($conditions['pressure_'.$up][0]['text']) : '';
    139                 $tableau['tendance_pression'] = (isset($conditions['pressure_trend'])) ? $tendance[$conditions['pressure_trend'][0]['text']] : '';
    140 
    141                 $tableau['visibilite'] = (isset($conditions['visibility_'.$ud])) ? floatval($conditions['visibility_'.$ud][0]['text']) : '';
     109                $tableau['station'] = '';
     110
     111                // Liste des conditions meteo
     112                if ($conditions['wind'][0]['children']) {
     113                        $conditions_vent = $conditions['wind'][0]['children'];
     114
     115                        $tableau['vitesse_vent'] = (isset($conditions_vent['speed'])) ? floatval($conditions_vent['speed'][0]['attributes']['value']) : '';
     116                        $tableau['angle_vent'] = (isset($conditions_vent['direction'])) ? intval($conditions_vent['direction'][0]['attributes']['value']) : '';
     117                        $tableau['direction_vent'] = (isset($conditions_vent['direction']))     ? $conditions_vent['direction'][0]['attributes']['code'] : '';
     118                }
     119
     120                $tableau['temperature_reelle'] = (isset($conditions['temperature'])) ? intval($conditions['temperature'][0]['attributes']['value']) : '';
     121                $tableau['temperature_ressentie'] = (isset($conditions['temperature'])) ? temperature2ressenti($tableau['temperature_reelle'], $tableau['vitesse_vent']) : '';
     122
     123                $tableau['humidite'] = (isset($conditions['humidity'])) ? intval($conditions['humidity'][0]['attributes']['value']) : '';
     124                $tableau['point_rosee'] = '';
     125
     126                $tableau['pression'] = (isset($conditions['pressure'])) ? floatval($conditions['pressure'][0]['attributes']['value']) : '';
     127                $tableau['tendance_pression'] = '';
     128
     129                $tableau['visibilite'] = '';
    142130
    143131                // Code meteo, resume et icone natifs au service
    144                 $tableau['code_meteo'] = (isset($conditions['icon'])) ? $conditions['icon'][0]['text'] : '';
    145                 $tableau['icon_meteo'] = (isset($conditions['icon_url'])) ? $conditions['icon_url'][0]['text'] : '';
    146                 $tableau['desc_meteo'] = (isset($conditions['weather'])) ? $conditions['weather'][0]['text'] : '';
     132                $tableau['code_meteo'] = (isset($conditions['weather'])) ? $conditions['weather'][0]['attributes']['number'] : '';
     133                $tableau['icon_meteo'] = (isset($conditions['weather'])) ? $conditions['weather'][0]['attributes']['icon'] : '';
     134                $tableau['desc_meteo'] = (isset($conditions['weather'])) ? $conditions['weather'][0]['attributes']['value'] : '';
    147135
    148136                // Determination de l'indicateur jour/nuit qui permet de choisir le bon icone
    149                 // Pour ce service (cas actuel) le nom du fichier icone commence par "nt_" pour la nuit.
    150                 // TODO : prendre en compte a terme le nouvel indicateur de jour/nuit dans une prochaine version de WUI
     137                // Pour ce service le nom du fichier icone finit par "d" pour le jour et
     138                // par "n" pour la nuit.
    151139                $icone = basename($tableau['icon_meteo']);
    152                 if (strpos($icone, 'nt_') === false)
     140                if (strpos($icone, 'n') === false)
    153141                        $tableau['periode'] = 0; // jour
    154142                else
     
    161149                        // Celles-ci etant deja traduites dans la bonne langue on stocke le texte exact retourne par l'API
    162150                        $tableau['icone']['code'] = $tableau['code_meteo'];
    163                         $theme = lire_config('rainette/owm/theme', 'a');
    164                         $url = _RAINETTE_WUNDERGROUND_URL_BASE_ICONE . '/' . $theme
    165                                  . '/' . ($tableau['periode'] == 1 ? 'nt_' : '') . $tableau['code_meteo'] . '.gif';
     151                        $url = _RAINETTE_OWM_URL_BASE_ICONE . '/' . $tableau['icon_meteo'] . '.png';
    166152                        $tableau['icone']['url'] = copie_locale($url);
    167153                        $tableau['resume'] = ucfirst($tableau['desc_meteo']);
     
    210196function owm_service2credits() {
    211197
    212         $credits = array('titre' => '');
    213         $credits['lien'] = 'http://www.wunderground.com/';
    214         $credits['logo'] = 'wunderground-126.png';
     198        $credits = array('titre' => '', 'logo' => '');
     199        $credits['lien'] = 'http://openweathermap.org/';
    215200
    216201        return $credits;
Note: See TracChangeset for help on using the changeset viewer.