Changeset 64700 in spip-zone


Ignore:
Timestamp:
Aug 11, 2012, 8:47:34 AM (9 years ago)
Author:
eric@…
Message:

Amélioration de la généricité de certaines fonctions permettant de limiter les fonctions spécifiques aux services

Location:
_plugins_/rainette/trunk
Files:
6 edited

Legend:

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

    r64699 r64700  
    8989 */
    9090function rainette_coasse_previsions($lieu, $type='x_jours', $jour=0, $modele='previsions_24h', $service='weather'){
    91 
    92         // En fonction du service, on inclut le fichier des fonctions
    93         // Le principe est que chaque service propose la même liste de fonctions d'interface dans un fichier unique
    94         include_spip("services/${service}_utils");
     91        include_spip('inc/rainette_utils');
    9592
    9693        if ($type == '1_jour') {
    9794                $jour = min($jour, _RAINETTE_JOURS_PREVISION-1);
    9895               
    99                 $nom_fichier = charger_meteo($lieu, 'previsions');
     96                $nom_fichier = charger_meteo($lieu, 'previsions', $service);
    10097                lire_fichier($nom_fichier,$tableau);
    10198                $tableau = unserialize($tableau);
     
    120117                $jour = min($jour, _RAINETTE_JOURS_PREVISION);
    121118               
    122                 $nom_fichier = charger_meteo($lieu, 'previsions');
     119                $nom_fichier = charger_meteo($lieu, 'previsions', $service);
    123120                lire_fichier($nom_fichier,$tableau);
    124121                $tableau = unserialize($tableau);
     
    133130
    134131function rainette_coasse_conditions($lieu, $modele='conditions_tempsreel', $service='weather'){
    135 
    136         // En fonction du service, on inclut le fichier des fonctions
    137         // Le principe est que chaque service propose la même liste de fonctions d'interface dans un fichier unique
    138         include_spip("services/${service}_utils");
     132        include_spip('inc/rainette_utils');
    139133
    140134        // Recuperation du tableau des conditions courantes
    141         $nom_fichier = charger_meteo($lieu, 'conditions');
     135        $nom_fichier = charger_meteo($lieu, 'conditions', $service);
    142136        lire_fichier($nom_fichier,$tableau);
    143137        $tableau = unserialize($tableau);
     
    152146
    153147function rainette_coasse_infos($lieu, $modele='infos_ville', $service='weather'){
    154         // En fonction du service, on inclut le fichier des fonctions
    155         // Le principe est que chaque service propose la même liste de fonctions d'interface dans un fichier unique
    156         include_spip("services/${service}_utils");
     148        include_spip('inc/rainette_utils');
    157149
    158150        // Recuperation du tableau des conditions courantes
    159         $nom_fichier = charger_meteo($lieu, 'infos');
     151        $nom_fichier = charger_meteo($lieu, 'infos', $service);
    160152        lire_fichier($nom_fichier,$tableau);
    161153        $tableau = unserialize($tableau);
  • _plugins_/rainette/trunk/inc/rainette_utils.php

    r64699 r64700  
    11<?php
    2 function code2icone($icon){
     2function code2icone($icon) {
    33        $r = "na";
    44        if (($icon >= 1) && ($icon < 48)) $r = strval($icon);
     
    66}
    77
    8 function angle2direction($degre){
     8function angle2direction($degre) {
    99        $dir = '';
    1010        switch(round($degre / 22.5) % 16)
     
    3030}
    3131
     32/**
     33 * charger le fichier des infos meteos correspondant au code
     34 * si le fichier analyse est trop vieux ou absent, on charge le xml et on l'analyse
     35 * puis on stocke les infos apres analyse
     36 *
     37 * @param string $lieu
     38 * @return string
     39 */
     40function charger_meteo($lieu, $mode='previsions', $service='weather') {
     41
     42        // En fonction du service, on inclut le fichier des fonctions
     43        // Le principe est que chaque service propose la même liste de fonctions d'interface dans un fichier unique
     44        include_spip("services/${service}_utils");
     45
     46        $lieu = strtoupper($lieu);
     47        $f = service2cache($lieu, $mode);
     48
     49        if ($mode == 'infos') {
     50                // Traitement du fichier d'infos
     51                if (!file_exists($f)) {
     52                        $flux = service2url($lieu, $mode);
     53                        include_spip('inc/xml');
     54                        $xml = spip_xml_load($flux);
     55                        $tableau = xml2infos($xml, $lieu);
     56                        ecrire_fichier($f, serialize($tableau));
     57                }
     58        }
     59        else {
     60                // Traitement du fichier de donnees requis
     61                $reload_time = ($mode == 'previsions') ? _RAINETTE_RELOAD_TIME_PREVISIONS : _RAINETTE_RELOAD_TIME_CONDITIONS;
     62                if (!file_exists($f)
     63                  || !filemtime($f)
     64                  || (time()-filemtime($f)>$reload_time)) {
     65                        $flux = service2url($lieu, $mode);
     66                        include_spip('inc/xml');
     67                        $xml = spip_xml_load($flux);
     68                        $tableau = ($mode == 'previsions') ? xml2previsions($xml) : xml2conditions($xml);
     69                        ecrire_fichier($f, serialize($tableau));
     70                }
     71        }
     72        return $f;
     73}
     74
     75function charger_infos($lieu='', $type_infos='') {
     76        if (!$lieu) return '';
     77        $nom_fichier = charger_meteo($lieu, 'infos');
     78        lire_fichier($nom_fichier,$tableau);
     79        if (!$type_infos)
     80                return $tableau;
     81        else {
     82                $tableau = unserialize($tableau);
     83                $info = $tableau[strtolower($type_infos)];
     84                if (!$info) $info = ucfirst($type_infos) . "(" . $lieu . ")";
     85                return $info;
     86        }
     87}
     88
    3289?>
  • _plugins_/rainette/trunk/modeles/rainette_conditions.html

    r64417 r64700  
    55        - en utilisant le service #ENV{service}
    66 -->]
    7         [(#ENV**|unserialize|foreach)]
    87[(#ENV{code}|rainette_coasse_conditions{
    98                                #ENV{sous_modele,conditions_tempsreel},
  • _plugins_/rainette/trunk/modeles/rainette_previsions.html

    r64418 r64700  
    1010                                #ENV{type, x_jours},
    1111                                #ENV{jour,3},
    12                                 #ENV{sous_modele,previsions_jour}
     12                                #ENV{sous_modele,previsions_jour},
    1313                                #ENV{service, weather}})]
  • _plugins_/rainette/trunk/services/weather_utils.php

    r64699 r64700  
    11<?php
     2
     3function service2cache($lieu, $mode) {
     4
     5        $dir = sous_repertoire(_DIR_CACHE, 'rainette');
     6        $dir = sous_repertoire($dir, 'weather');
     7        $f = $dir . $lieu . "_" . $mode . ".txt";
     8
     9        return $f;
     10}
     11
     12function service2url($lieu, $mode) {
     13
     14        $url = 'http://xml.weather.com/weather/local/' . $lieu . '?unit=' . _RAINETTE_SYSTEME_MESURE;
     15        if ($mode != 'infos') {
     16                $url .= ($mode == 'previsions') ? '&dayf=' . _RAINETTE_JOURS_PREVISION : '&cc=*';
     17        }
     18
     19        return $url;
     20}
     21
    222/**
    323 * lire le xml fournit par le service meteo et en extraire les infos interessantes
     
    828 * @param array $xml
    929 * @return array
    10  * @author Cedric Morin
    1130 */
    12 function xml2tab_previsions($xml){
     31function xml2previsions($xml){
    1332        $tableau = array();
    1433        $n = spip_xml_match_nodes(",^dayf,",$xml,$previsions);
     
    6281}
    6382
    64 function xml2tab_conditions($xml){
     83function xml2conditions($xml){
    6584        $tableau = array();
    6685        $n = spip_xml_match_nodes(",^cc,",$xml,$conditions);
     
    91110}
    92111
    93 function xml2tab_infos($xml, $code_meteo){
     112function xml2infos($xml, $lieu){
    94113        $tableau = array();
    95         $regexp = 'loc id=\"'.$code_meteo.'\"';
     114        $regexp = 'loc id=\"'.$lieu.'\"';
    96115        $n = spip_xml_match_nodes(",^$regexp,",$xml,$infos);
    97116        if ($n==1){
    98                 $infos = reset($infos['loc id="'.$code_meteo.'"']);
     117                $infos = reset($infos['loc id="'.$lieu.'"']);
    99118                // recuperer la date de debut des conditions
    100                 $tableau['code_meteo'] = $code_meteo;
     119                $tableau['code_meteo'] = $lieu;
    101120                $tableau['ville'] = $infos['dnam'][0];
    102121                $tableau['longitude'] = floatval($infos['lon'][0]);
     
    107126}
    108127
    109 /**
    110  * charger le fichier des infos meteos correspondant au code
    111  * si le fichier analyse est trop vieux ou absent, on charge le xml et on l'analyse
    112  * puis on stocke les infos apres analyse
    113  *
    114  * @param string $code_meteo
    115  * @return string
    116  * @author Cedric Morin
    117  */
    118 function charger_meteo($code_meteo, $mode='previsions'){
    119         $code_meteo = strtoupper($code_meteo);
    120         $dir = sous_repertoire(_DIR_CACHE,"rainette");
    121         $dir = sous_repertoire($dir,substr(md5($code_meteo),0,1));
    122         $f = $dir . $code_meteo . "_".$mode . ".txt";
    123 
    124         if ($mode == 'infos') {
    125                 // Traitement du fichier d'infos
    126                 if (!file_exists($f)) {
    127                         $flux = "http://xml.weather.com/weather/local/".$code_meteo."?unit="._RAINETTE_SYSTEME_MESURE;
    128                         include_spip('inc/xml');
    129                         $xml = spip_xml_load($flux);
    130                         $tableau = xml2tab_infos($xml, $code_meteo);
    131                         ecrire_fichier($f, serialize($tableau));
    132                 }
    133         }
    134         else {
    135                 // Traitement du fichier de donnees requis
    136                 $reload_time = ($mode == 'previsions') ? _RAINETTE_RELOAD_TIME_PREVISIONS : _RAINETTE_RELOAD_TIME_CONDITIONS;
    137                 if (!file_exists($f)
    138                   || !filemtime($f)
    139                   || (time()-filemtime($f)>$reload_time)) {
    140                         $flux = "http://xml.weather.com/weather/local/".$code_meteo."?unit="._RAINETTE_SYSTEME_MESURE;
    141                         $flux .= ($mode == 'previsions') ? "&dayf="._RAINETTE_JOURS_PREVISION : "&cc=*";
    142                         include_spip('inc/xml');
    143                         $xml = spip_xml_load($flux);
    144                         $tableau = ($mode == 'previsions') ? xml2tab_previsions($xml) : xml2tab_conditions($xml);
    145                         ecrire_fichier($f, serialize($tableau));
    146                 }
    147         }
    148         return $f;
    149 }
    150 
    151 function charger_infos($code_meteo='', $type_infos=''){
    152         if (!$code_meteo) return '';
    153         $nom_fichier = charger_meteo($code_meteo, 'infos');
    154         lire_fichier($nom_fichier,$tableau);
    155         if (!$type_infos)
    156                 return $tableau;
    157         else {
    158                 $tableau = unserialize($tableau);
    159                 $info = $tableau[strtolower($type_infos)];
    160                 if (!$info) $info = ucfirst($type_infos) . "(" . $code_meteo . ")";
    161                 return $info;
    162         }
    163 }
    164 
    165128?>
  • _plugins_/rainette/trunk/services/wwo_utils.php

    r64699 r64700  
    22// 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
    33define('_RAINETTE_WWO_URL_BASE', 'http://free.worldweatheronline.com/feed/weather.ashx');
     4
     5function service2cache($lieu, $mode) {
     6
     7        $dir = sous_repertoire(_DIR_CACHE, 'rainette');
     8        $dir = sous_repertoire($dir, 'weather');
     9        $dir = sous_repertoire($dir, substr(md5($lieu), 0, 1));
     10        $f = $dir . $lieu . "_" . $mode . ".txt";
     11
     12        return $f;
     13}
     14
     15function service2url($lieu, $mode) {
     16
     17        $url = 'http://xml.weather.com/weather/local/' . $lieu . '?unit=' . _RAINETTE_SYSTEME_MESURE;
     18        if ($mode != 'infos') {
     19                $url .= ($mode == 'previsions') ? '&dayf=' . _RAINETTE_JOURS_PREVISION : '&cc=*';
     20        }
     21
     22        return $url;
     23}
    424
    525/**
     
    1131 * @param array $xml
    1232 * @return array
    13  * @author Cedric Morin
    1433 */
    15 function xml2tab_previsions($xml){
     34function xml2previsions($xml){
    1635        $tableau = array();
    1736        $n = spip_xml_match_nodes(",^dayf,",$xml,$previsions);
     
    6584}
    6685
    67 function xml2tab_conditions($xml){
     86function xml2conditions($xml){
    6887        $tableau = array();
    6988        $n = spip_xml_match_nodes(",^cc,",$xml,$conditions);
     
    94113}
    95114
    96 function xml2tab_infos($xml, $code_meteo){
     115function xml2infos($xml, $lieu){
    97116        $tableau = array();
    98         $regexp = 'loc id=\"'.$code_meteo.'\"';
     117        $regexp = 'loc id=\"'.$lieu.'\"';
    99118        $n = spip_xml_match_nodes(",^$regexp,",$xml,$infos);
    100119        if ($n==1){
    101                 $infos = reset($infos['loc id="'.$code_meteo.'"']);
     120                $infos = reset($infos['loc id="'.$lieu.'"']);
    102121                // recuperer la date de debut des conditions
    103                 $tableau['code_meteo'] = $code_meteo;
     122                $tableau['code_meteo'] = $lieu;
    104123                $tableau['ville'] = $infos['dnam'][0];
    105124                $tableau['longitude'] = floatval($infos['lon'][0]);
     
    110129}
    111130
    112 /**
    113  * charger le fichier des infos meteos correspondant au code
    114  * si le fichier analyse est trop vieux ou absent, on charge le xml et on l'analyse
    115  * puis on stocke les infos apres analyse
    116  *
    117  * @param string $code_meteo
    118  * @return string
    119  * @author Cedric Morin
    120  */
    121 function charger_meteo($code_meteo, $mode='previsions'){
    122         $code_meteo = strtoupper($code_meteo);
    123         $dir = sous_repertoire(_DIR_CACHE,"rainette");
    124         $dir = sous_repertoire($dir,substr(md5($code_meteo),0,1));
    125         $f = $dir . $code_meteo . "_".$mode . ".txt";
    126 
    127         if ($mode == 'infos') {
    128                 // Traitement du fichier d'infos
    129                 if (!file_exists($f)) {
    130                         $flux = "http://xml.weather.com/weather/local/".$code_meteo."?unit="._RAINETTE_SYSTEME_MESURE;
    131                         include_spip('inc/xml');
    132                         $xml = spip_xml_load($flux);
    133                         $tableau = xml2tab_infos($xml, $code_meteo);
    134                         ecrire_fichier($f, serialize($tableau));
    135                 }
    136         }
    137         else {
    138                 // Traitement du fichier de donnees requis
    139                 $reload_time = ($mode == 'previsions') ? _RAINETTE_RELOAD_TIME_PREVISIONS : _RAINETTE_RELOAD_TIME_CONDITIONS;
    140                 if (!file_exists($f)
    141                   || !filemtime($f)
    142                   || (time()-filemtime($f)>$reload_time)) {
    143                         $flux = "http://xml.weather.com/weather/local/".$code_meteo."?unit="._RAINETTE_SYSTEME_MESURE;
    144                         $flux .= ($mode == 'previsions') ? "&dayf="._RAINETTE_JOURS_PREVISION : "&cc=*";
    145                         include_spip('inc/xml');
    146                         $xml = spip_xml_load($flux);
    147                         $tableau = ($mode == 'previsions') ? xml2tab_previsions($xml) : xml2tab_conditions($xml);
    148                         ecrire_fichier($f, serialize($tableau));
    149                 }
    150         }
    151         return $f;
    152 }
    153 
    154 function charger_infos($code_meteo='', $type_infos=''){
    155         if (!$code_meteo) return '';
    156         $nom_fichier = charger_meteo($code_meteo, 'infos');
    157         lire_fichier($nom_fichier,$tableau);
    158         if (!$type_infos)
    159                 return $tableau;
    160         else {
    161                 $tableau = unserialize($tableau);
    162                 $info = $tableau[strtolower($type_infos)];
    163                 if (!$info) $info = ucfirst($type_infos) . "(" . $code_meteo . ")";
    164                 return $info;
    165         }
    166 }
    167 
    168131?>
Note: See TracChangeset for help on using the changeset viewer.