Changeset 64741 in spip-zone


Ignore:
Timestamp:
Aug 12, 2012, 6:17:58 PM (8 years ago)
Author:
eric@…
Message:

Ajout d'une page de configuration des services.
Transfert des fonctions de filtres et de balises dans le fichier fonctions.
Mise au point des conditions courantes pour wwo et ajout des fonctions de conversion d'unité.
Mise au point du modèle des conditions.
Transfert des define vers les fichiers qui les utilisent (reste plus qu'un seul define à virer)

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

Legend:

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

    r64715 r64741  
    11<?php
     2
     3define ('_RAINETTE_RELOAD_TIME_PREVISIONS',2*3600); // pas la peine de recharger un flux de moins de 2h
     4define ('_RAINETTE_RELOAD_TIME_CONDITIONS',1800); // pas la peine de recharger un flux de moins de 30mn
     5
    26function code2icone($icon) {
    37        $r = "na";
     
    7882
    7983                        $convertir = ($mode == 'previsions') ? "${service}_xml2previsions" : "${service}_xml2conditions";
    80                         $tableau = $convertir($xml);
     84                        $tableau = $convertir($flux);
    8185                        ecrire_fichier($f, serialize($tableau));
    8286                }
     
    143147}
    144148
     149function kilometre2mile($km) {
     150        return 0.6215*$km;
     151}
     152
     153function celsius2farenheit($c) {
     154        return $c*9/5 + 32;
     155}
     156
     157function millimetre2inch($mm) {
     158        return $mm/25.4;
     159}
     160
     161function millibar2inch($mbar) {
     162        return $mbar/33.86;
     163}
     164
     165function temperature2ressenti($temperature, $vitesse_vent) {
     166
     167        // La temperature ressentie n'est calculee que pour des temperatures ambiantes comprises entre
     168        // -50°C et +10°C
     169        if (($temperature >= -50) AND ($temperature <= 10)) {
     170                if ($vitesse_vent > 4.8)
     171                        $ressenti = 13.12 + 0.6215*$temperature + (0.3965*$temperature - 11.37)*pow($vitesse_vent, 0.16);
     172                else
     173                        $ressenti = $temperature + 0.2*(0.1345*$temperature - 1.59)*$vitesse_vent;
     174        }
     175        else
     176                $ressenti = $temperature;
     177
     178        return $ressenti;
     179}
     180
    145181?>
  • _plugins_/rainette/trunk/modeles/conditions_tempsreel.html

    r64415 r64741  
    1515                <div class="maj">
    1616                        <:rainette:derniere_maj|ucfirst:>&nbsp;:[&nbsp;(#ENV{derniere_maj}|affdate_heure)]<br/>
    17                         <:rainette:station_observation|ucfirst:>&nbsp;:[&nbsp;(#ENV{station})]
     17                        [<:rainette:station_observation|ucfirst:>&nbsp;:&nbsp;(#ENV{station})]
    1818                </div>
    1919        </div>
     
    2828                [(#ENV{pression}|rainette_afficher_unite{pression})]
    2929                [ (#ENV{tendance_pression}|rainette_afficher_tendance{icone})]<br/><br/>
    30                 <span><:rainette:point_rosee|ucfirst:></span><br/>
    31                 [(#ENV{point_rosee}|rainette_afficher_unite{temperature})]<br/><br/>
     30                [<span><:rainette:point_rosee|ucfirst:></span><br/>
     31                (#ENV{point_rosee}|rainette_afficher_unite{temperature})<br/><br/>]
    3232                <span><:rainette:visibilite|ucfirst:></span><br/>
    3333                [(#ENV{visibilite}|rainette_afficher_unite{distance})]
  • _plugins_/rainette/trunk/rainette_fonctions.php

    r22066 r64741  
    11<?php
    2 // Fichier de definition des balises du plugin utilisables dans les squelettes et modeles
    3 include_spip('public/rainette_balises');
    4 
    5 // Fichier de definition des filtres du plugin utilisables dans les squelettes et modeles
    6 include_spip('inc/rainette_filtres');
     2
     3define ('_RAINETTE_ICONES_PATH','rainette/');
     4
     5// Balises du plugin utilisables dans les squelettes et modeles
     6function balise_RAINETTE_INFOS($p) {
     7
     8        $code_meteo = interprete_argument_balise(1,$p);
     9        $code_meteo = isset($code_meteo) ? str_replace('\'', '"', $code_meteo) : '""';
     10        $type_info = interprete_argument_balise(2,$p);
     11        $type_info = isset($type_info) ? str_replace('\'', '"', $type_info) : '""';
     12        $service = interprete_argument_balise(3,$p);
     13        $service = isset($service) ? str_replace('\'', '"', $service) : '"weather"';
     14
     15        $p->code = 'calculer_infos('.$code_meteo.', '.$type_info.', '.$service.')';
     16        $p->interdire_scripts = false;
     17        return $p;
     18}
     19
     20function calculer_infos($lieu, $type, $service) {
     21
     22        // Traitement des cas ou les arguments sont vides
     23        if (!$lieu) return '';
     24        if (!$service) $service = 'weather';
     25
     26        include_spip('inc/rainette_utils');
     27        $nom_fichier = charger_meteo($lieu, 'infos', $service);
     28        lire_fichier($nom_fichier,$tableau);
     29        if (!isset($type) OR !$type)
     30                return $tableau;
     31        else {
     32                $tableau = unserialize($tableau);
     33                $info = $tableau[strtolower($type)];
     34                return $info;
     35        }
     36}
     37
     38// Filtres du plugin utilisables dans les squelettes et modeles
     39/**
     40 * filtre rainette_icone_meteo
     41 *
     42 * @param string temps
     43 * @param string chemin
     44 * @param string extension
     45 * @return string image correspondant au code de temps
     46 **/
     47# cf pour le choix des icones http://liquidweather.net/icons.php
     48function rainette_icone_meteo($code_icon, $taille='petit', $chemin='', $extension="png"){
     49        $html_icone = '';
     50        include_spip('inc/rainette_utils');
     51        if (!$chemin) $chemin = _RAINETTE_ICONES_PATH.$taille.'/';
     52        $temps = code2icone($code_icon);
     53
     54        // Le dossier personnalise ou le dossier passe en argument a bien l'icone requise
     55        if ($img = find_in_path($chemin.$temps.'.'.$extension)) {
     56                list ($l,$h) = @getimagesize($img);
     57                $html_icone = '<img src="'.$img.'" alt="'.rainette_resume_meteo($code_icon).'" title="'.rainette_resume_meteo($code_icon).'" width="'.$l.'" height="'.$h.'" />';
     58        }
     59        // Le dossier personnalise n'a pas d'image, on prend l'icone par defaut dans le repertoire img_meteo/
     60        elseif (($chemin = 'img_meteo/'.$taille.'/') && ($img = find_in_path($chemin.$temps.'.'.$extension))) {
     61                list ($l,$h) = @getimagesize($img);
     62                $html_icone = '<img src="'.$img.'" alt="'.rainette_resume_meteo($code_icon).'" title="'.rainette_resume_meteo($code_icon).'" width="'.$l.'" height="'.$h.'" />';
     63        }
     64        return $html_icone;
     65}
     66
     67function rainette_resume_meteo($code_icon){
     68        include_spip('inc/rainette_utils');
     69        $resume = ucfirst(_T('rainette:meteo_'.code2icone($code_icon)));
     70        return $resume;
     71}
     72
     73function rainette_afficher_direction($direction){
     74        static $liste_direction = 'N:NNE:NE:ENE:E:ESE:SE:SSE:S:SSW:SW:WSW:W:WNW:NW:NNW';
     75
     76        include_spip('inc/rainette_utils');
     77        $direction_abregee = (intval($direction)) ? angle2direction($direction) : $direction;
     78        if (!in_array($direction_abregee, explode(':', $liste_direction)))
     79                return _T('rainette:valeur_indeterminee');
     80        else
     81                return _T('rainette:direction_'.$direction_abregee);
     82}
     83
     84function rainette_afficher_tendance($tendance_en, $methode='texte', $chemin='', $extension="png"){
     85        $html = '';
     86        include_spip('inc/rainette_utils');
     87
     88        if ($methode == 'texte') {
     89                $html = _T('rainette:tendance_texte_'.$tendance_en);
     90        }
     91        else if ($methode == 'symbole') {
     92                $html = _T('rainette:tendance_symbole_'.$tendance_en);
     93        }
     94        else if ($methode == 'icone') {
     95                if (!$chemin) $chemin = _RAINETTE_ICONES_PATH;
     96
     97                // Le dossier personnalise ou le dossier passe en argument a bien l'icone requise
     98                if ($img = find_in_path($chemin.$tendance_en.'.'.$extension)) {
     99                        list ($l,$h) = @getimagesize($img);
     100                        $html = '<img src="'.$img.'" alt="'._T('rainette:tendance_texte_'.$tendance_en).'" title="'._T('rainette:tendance_texte_'.$tendance_en).'" width="'.$l.'" height="'.$h.'" />';
     101                }
     102                // Le dossier personnalise n'a pas d'image, on prend l'icone par defaut dans le repertoire img_meteo/
     103                elseif (($chemin = 'img_meteo/') && ($img = find_in_path($chemin.$tendance_en.'.'.$extension))) {
     104                        list ($l,$h) = @getimagesize($img);
     105                        $html = '<img src="'.$img.'" alt="'._T('rainette:tendance_texte_'.$tendance_en).'" title="'._T('rainette:tendance_texte_'.$tendance_en).'" width="'.$l.'" height="'.$h.'" />';
     106                }
     107        }
     108        return $html;
     109}
     110
     111function rainette_afficher_unite($valeur, $type_valeur='') {
     112        $valeur_affichee = '';
     113        if ($valeur) {
     114                $suffixe = (_RAINETTE_SYSTEME_MESURE == 'm') ? 'metrique' : 'standard';
     115                $espace = (($type_valeur == 'temperature') ||
     116                                   ($type_valeur == 'pourcentage') || ($type_valeur == 'angle')) ? '' : '&nbsp;';
     117                $valeur_affichee = strval($valeur).$espace._T('rainette:unite_'.$type_valeur.'_'.$suffixe);
     118        }
     119        return $valeur_affichee;
     120}
     121
     122/**
     123 * Charger le fichier des infos meteos jour par jour
     124 * et rendre l'affichage pour les N premiers jours
     125 *
     126 * @param string $lieu
     127 * @param int $nb_jours_affiche
     128 * @return string
     129 */
     130function rainette_coasse_previsions($lieu, $type='x_jours', $jour=0, $modele='previsions_24h', $service='weather'){
     131        include_spip('inc/rainette_utils');
     132
     133        if ($type == '1_jour') {
     134                $jour = min($jour, _RAINETTE_JOURS_PREVISION-1);
     135
     136                $nom_fichier = charger_meteo($lieu, 'previsions', $service);
     137                lire_fichier($nom_fichier,$tableau);
     138                $tableau = unserialize($tableau);
     139                // Si jour=0 (aujourd'hui), on complete par le tableau du lendemain matin
     140                if ($jour == 0) {
     141                        $tableau[$jour]['lever_soleil_demain'] = $tableau[$jour+1]['lever_soleil'];
     142                        $tableau[$jour]['temperature_demain'] = $tableau[$jour+1]['temperature_jour'];
     143                        $tableau[$jour]['code_icone_demain'] = $tableau[$jour+1]['code_icone_jour'];
     144                        $tableau[$jour]['vitesse_vent_demain'] = $tableau[$jour+1]['vitesse_vent_jour'];
     145                        $tableau[$jour]['angle_vent_demain'] = $tableau[$jour+1]['angle_vent_jour'];
     146                        $tableau[$jour]['direction_vent_demain'] = $tableau[$jour+1]['direction_vent_jour'];
     147                        $tableau[$jour]['risque_precipitation_demain'] = $tableau[$jour+1]['risque_precipitation_jour'];
     148                        $tableau[$jour]['humidite_demain'] = $tableau[$jour+1]['humidite_jour'];
     149                }
     150                // On ajoute la date de derniere maj
     151                $tableau[$jour]['derniere_maj'] = $tableau[_RAINETTE_JOURS_PREVISION]['derniere_maj'];
     152                $page = recuperer_fond("modeles/$modele", $tableau[$jour]);
     153                $texte = $page;
     154        }
     155        else if ($type == 'x_jours') {
     156                if ($jour == 0) $jour = _RAINETTE_JOURS_PREVISION;
     157                $jour = min($jour, _RAINETTE_JOURS_PREVISION);
     158
     159                $nom_fichier = charger_meteo($lieu, 'previsions', $service);
     160                lire_fichier($nom_fichier,$tableau);
     161                $tableau = unserialize($tableau);
     162                $texte = "";
     163                while (count($tableau) && $jour--){
     164                        $page = recuperer_fond("modeles/$modele", array_shift($tableau));
     165                        $texte .= $page;
     166                }
     167        }
     168        return $texte;
     169}
     170
     171function rainette_coasse_conditions($lieu, $modele='conditions_tempsreel', $service='weather'){
     172        include_spip('inc/rainette_utils');
     173
     174        // Recuperation du tableau des conditions courantes
     175        $nom_fichier = charger_meteo($lieu, 'conditions', $service);
     176        lire_fichier($nom_fichier,$tableau);
     177        $tableau = unserialize($tableau);
     178
     179        // On ajoute le lieu et le service au contexte fourni au modele
     180        $tableau['code'] = $lieu;
     181        $tableau['service'] = $service;
     182
     183        $texte = recuperer_fond("modeles/$modele", $tableau);
     184        return $texte;
     185}
     186
     187function rainette_coasse_infos($lieu, $modele='infos_ville', $service='weather'){
     188        include_spip('inc/rainette_utils');
     189
     190        // Recuperation du tableau des conditions courantes
     191        $nom_fichier = charger_meteo($lieu, 'infos', $service);
     192        lire_fichier($nom_fichier,$tableau);
     193        $tableau = unserialize($tableau);
     194
     195        // On ajoute le lieu et le service au contexte fourni au modele
     196        $tableau['code'] = $lieu;
     197        $tableau['service'] = $service;
     198
     199        $texte = recuperer_fond("modeles/$modele", $tableau);
     200        return $texte;
     201}
     202
    7203?>
  • _plugins_/rainette/trunk/rainette_options.php

    r64703 r64741  
    55//      - nombre de jour de previsions (maximum 10)
    66//      - systeme de mesure metrique (m) ou standard (s)
    7 define ('_RAINETTE_ICONES_PATH','rainette/');
    8 define ('_RAINETTE_RELOAD_TIME_PREVISIONS',2*3600); // pas la peine de recharger un flux de moins de 2h
    9 define ('_RAINETTE_RELOAD_TIME_CONDITIONS',1800); // pas la peine de recharger un flux de moins de 30mn
    107// Valeur utilisee pour definir une donnee non determinee dans les fichiers (NE PAS MODIFIER)
    118define ('_RAINETTE_VALEUR_INDETERMINEE','N/D');
  • _plugins_/rainette/trunk/services/weather.php

    r64713 r64741  
    11<?php
     2
    23define('_RAINETTE_WEATHER_URL_BASE', 'http://xml.weather.com/weather/local/');
    34define('_RAINETTE_WEATHER_JOURS_PREVISION', 10);
    4 define('_RAINETTE_WEATHER_SYSTEME_MESURE','m');
    55
    66function weather_service2cache($lieu, $mode) {
     
    1515function weather_service2url($lieu, $mode) {
    1616
    17         $url = _RAINETTE_WEATHER_URL_BASE . strtoupper($lieu) . '?unit=' . _RAINETTE_WEATHER_SYSTEME_MESURE;
     17        include_spip('inc/config');
     18        $unite = lire_config('rainette/wwo/unite');
     19
     20        $url = _RAINETTE_WEATHER_URL_BASE . strtoupper($lieu) . '?unit=' . $unite;
    1821        if ($mode != 'infos') {
    1922                $url .= ($mode == 'previsions') ? '&dayf=' . _RAINETTE_WEATHER_JOURS_PREVISION : '&cc=*';
  • _plugins_/rainette/trunk/services/wwo.php

    r64713 r64741  
    11<?php
    2 // free.worldweatheronline.com/feed/weather.ashx?key=30e3b46523060112120708&q=Paris,France&cc=no&fx=yes&format=xml&num_of_days=5&extra=localObsTime&includeLocation=yes
     2
    33define('_RAINETTE_WWO_URL_BASE', 'http://free.worldweatheronline.com/feed/weather.ashx');
    44define('_RAINETTE_WWO_JOURS_PREVISIONS', 5);
     
    1515function wwo_service2url($lieu, $mode) {
    1616
     17        include_spip('inc/config');
     18        $cle = lire_config('rainette/wwo/inscription');
     19
    1720        $url = _RAINETTE_WWO_URL_BASE
    18                 .  '?key=' . '30e3b46523060112120708'
     21                .  '?key=' . $cle
    1922                .  '&format=xml&extra=localObsTime'
    2023                .  '&q=' . str_replace(' ', '', trim($lieu));
     
    103106function wwo_xml2conditions($xml){
    104107        $tableau = array();
    105         $n = spip_xml_match_nodes(",^cc,",$xml,$conditions);
    106         if ($n==1){
    107                 $conditions = reset($conditions['cc']);
    108                 // recuperer la date de derniere mise a jour des conditions
    109                 if ($conditions) {
    110                         $date_maj = $conditions['lsup'][0];
    111                         $date_maj = strtotime(preg_replace(',\slocal\s*time\s*,ims','',$date_maj));
    112                         $tableau['derniere_maj'] = date('Y-m-d H:i:s',$date_maj);
    113                         // station d'observation (peut etre differente de la ville)
    114                         $tableau['station'] = $conditions['obst'][0];
    115                         // Liste des conditions meteo
    116                         $tableau['temperature_reelle'] = intval($conditions['tmp'][0]);
    117                         $tableau['temperature_ressentie'] = intval($conditions['flik'][0]);
    118                         $tableau['code_icone'] = intval($conditions['icon'][0]);
    119                         $tableau['pression'] = intval($conditions['bar'][0]['r'][0]);
    120                         $tableau['tendance_pression'] = $conditions['bar'][0]['d'][0];
    121                         $tableau['vitesse_vent'] = intval($conditions['wind'][0]['s'][0]);
    122                         $tableau['angle_vent'] = intval($conditions['wind'][0]['d'][0]);
    123                         $tableau['direction_vent'] = $conditions['wind'][0]['t'][0];
    124                         $tableau['humidite'] = intval($conditions['hmid'][0]);
    125                         $tableau['point_rosee'] = intval($conditions['dewp'][0]);
    126                         $tableau['visibilite'] = intval($conditions['vis'][0]);
     108
     109        // On stocke les informations disponibles dans un tableau standard
     110        if (isset($xml['children']['current_condition'][0]['children'])) {
     111                $conditions = $xml['children']['current_condition'][0]['children'];
     112
     113                // Date d'observation
     114                $date_maj = (isset($conditions['localobsdatetime'])) ? ', ' . $conditions['localobsdatetime'][0]['text'] : '';
     115                $tableau['derniere_maj'] = date('Y-m-d H:i:s', strtotime($date_maj));
     116                // Station d'observation
     117                $tableau['station'] = '';
     118
     119                // Liste des conditions meteo extraite dans le systeme metrique
     120                $tableau['vitesse_vent'] = (isset($conditions['windspeedkmph'])) ? intval($conditions['windspeedkmph'][0]['text']) : '';
     121                $tableau['angle_vent'] = (isset($conditions['winddirdegree'])) ? intval($conditions['winddirdegree'][0]['text']) : '';
     122                $tableau['direction_vent'] = (isset($conditions['winddir16point'])) ? $conditions['winddir16point'][0]['text'] : '';
     123
     124                $tableau['temperature_reelle'] = (isset($conditions['temp_c'])) ? intval($conditions['temp_c'][0]['text']) : '';
     125                $tableau['temperature_ressentie'] = temperature2ressenti($tableau['temperature_reelle'], $tableau['vitesse_vent']);
     126
     127                $tableau['humidite'] = (isset($conditions['humidity'])) ? intval($conditions['humidity'][0]['text']) : '';
     128                $tableau['point_rosee'] = '';
     129
     130                $tableau['pression'] = (isset($conditions['pressure'])) ? intval($conditions['pressure'][0]['text']) : '';
     131                $tableau['tendance_pression'] = '';
     132
     133                $tableau['visibilite'] = (isset($conditions['visibility'])) ? intval($conditions['visibility'][0]['text']) : '';
     134
     135                $tableau['code_icone'] = (isset($conditions['weathercode'])) ? intval($conditions['weathercode'][0]['text']) : '';
     136                $tableau['url_icone'] = (isset($conditions['weathericonurl'])) ? $conditions['weathericonurl'][0]['text'] : '';
     137                $tableau['desc_icone'] = (isset($conditions['weatherdesc'])) ? $conditions['weatherdesc'][0]['text'] : '';
     138
     139                // On convertit les informations exprimees en systeme metrique dans le systeme US si besoin
     140                include_spip('inc/config');
     141                $unite = lire_config('rainette/wwo/unite');
     142                if ($unite == 's') {
     143                        include_spip('inc/rainette_utils');
     144                        $tableau['temperature_reelle'] = (isset($conditions['temp_f']))
     145                                ? intval($conditions['temp_f'][0]['text'])
     146                                : celsius2farenheit($tableau['temperature_reelle']);
     147                        $tableau['temperature_ressentie'] = celsius2farenheit($tableau['temperature_ressentie']);
     148                        $tableau['vitesse_vent'] = (isset($conditions['windspeedmiles']))
     149                                ? intval($conditions['windspeedmiles'][0]['text'])
     150                                : kilometre2mile($tableau['vitesse_vent']);
     151                        $tableau['visibilite'] = kilometre2mile($tableau['visibilite']);
     152                        $tableau['pression'] = millibar2inch($tableau['pression']);
    127153                }
    128154        }
     155
    129156        return $tableau;
    130157}
     
    138165        // On stocke les informations disponibles dans un tableau standard
    139166        if (isset($xml['children']['nearest_area'][0]['children'])) {
    140                 $area = $xml['children']['nearest_area'][0]['children'];
     167                $infos = $xml['children']['nearest_area'][0]['children'];
    141168
    142                 if (isset($area['areaname'])) {
    143                         $tableau['ville'] = $area['areaname'][0]['text'];
    144                         $tableau['ville'] .= (isset($area['country'])) ? ', ' . $area['country'][0]['text'] : '';
     169                if (isset($infos['areaname'])) {
     170                        $tableau['ville'] = $infos['areaname'][0]['text'];
     171                        $tableau['ville'] .= (isset($infos['country'])) ? ', ' . $infos['country'][0]['text'] : '';
    145172                }
    146                 $tableau['region'] = (isset($area['region'])) ? $area['region'][0]['text'] : '';
     173                $tableau['region'] = (isset($infos['region'])) ? $infos['region'][0]['text'] : '';
    147174
    148                 $tableau['longitude'] = (isset($area['longitude'])) ? floatval($area['longitude'][0]['text']) : '';
    149                 $tableau['latitude'] = (isset($area['latitude'])) ? floatval($area['latitude'][0]['text']) : '';
     175                $tableau['longitude'] = (isset($infos['longitude'])) ? floatval($infos['longitude'][0]['text']) : '';
     176                $tableau['latitude'] = (isset($infos['latitude'])) ? floatval($infos['latitude'][0]['text']) : '';
    150177
    151                 $tableau['population'] = (isset($area['population'])) ? intval($area['population'][0]['text']) : '';
     178                $tableau['population'] = (isset($infos['population'])) ? intval($infos['population'][0]['text']) : '';
    152179                $tableau['zone'] = '';
    153180        }
Note: See TracChangeset for help on using the changeset viewer.