Changeset 64713 in spip-zone


Ignore:
Timestamp:
Aug 11, 2012, 4:20:11 PM (9 years ago)
Author:
eric@…
Message:

Mise au point de l'extraction des informations d'une ville pour weather et wwo.

Location:
_plugins_/rainette/trunk
Files:
3 edited

Legend:

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

    r64706 r64713  
    7272                  || (time()-filemtime($f)>$reload_time)) {
    7373                        $urler = "${service}_service2url";
    74                         $flux = $urler($lieu, $mode);
     74                        $url = $urler($lieu, $mode);
    7575
    7676                        $acquerir = "${service}_url2flux";
     
    7878
    7979                        $convertir = ($mode == 'previsions') ? "${service}_xml2previsions" : "${service}_xml2conditions";
    80                         $tableau = $convertir($xml, $lieu);
     80                        $tableau = $convertir($xml);
    8181                        ecrire_fichier($f, serialize($tableau));
    8282                }
     
    9393        $nom_fichier = charger_meteo($lieu, 'infos', $service);
    9494        lire_fichier($nom_fichier,$tableau);
    95         if (!$type_infos)
     95        if (!isset($type_infos) OR !$type_infos)
    9696                return $tableau;
    9797        else {
    9898                $tableau = unserialize($tableau);
    9999                $info = $tableau[strtolower($type_infos)];
    100                 if (!$info) $info = ucfirst($type_infos) . "(" . $lieu . ")";
    101100                return $info;
    102101        }
    103102}
    104103
     104
     105/**
     106 * Transforme un objet SimpleXML en tableau PHP
     107 *
     108 * @param object $obj
     109 * @return array
     110**/
     111// http://www.php.net/manual/pt_BR/book.simplexml.php#108688
     112// xaviered at gmail dot com 17-May-2012 07:00
     113function simplexml2array($obj) {
     114
     115        // Cette fonction getDocNamespaces() est longue sur de gros xml
     116        # $namespace = $obj->getDocNamespaces(true);
     117        $namespace[NULL] = NULL;
     118
     119        $children = array();
     120        $attributes = array();
     121        $name = strtolower((string)$obj->getName());
     122
     123        $text = trim((string)$obj);
     124        if( strlen($text) <= 0 ) {
     125                $text = NULL;
     126        }
     127
     128        // get info for all namespaces
     129        if (is_object($obj)) {
     130                foreach( $namespace as $ns=>$nsUrl ) {
     131                        // atributes
     132                        $objAttributes = $obj->attributes($ns, true);
     133                        foreach( $objAttributes as $attributeName => $attributeValue ) {
     134                                $attribName = strtolower(trim((string)$attributeName));
     135                                $attribVal = trim((string)$attributeValue);
     136                                if (!empty($ns)) {
     137                                        $attribName = $ns . ':' . $attribName;
     138                                }
     139                                $attributes[$attribName] = $attribVal;
     140                        }
     141
     142                        // children
     143                        $objChildren = $obj->children($ns, true);
     144                        foreach( $objChildren as $childName=>$child ) {
     145                                $childName = strtolower((string)$childName);
     146                                if( !empty($ns) ) {
     147                                        $childName = $ns.':'.$childName;
     148                                }
     149                                $children[$childName][] = simplexml2array($child);
     150                        }
     151                }
     152        }
     153
     154        return array(
     155                'name'=>$name,
     156                'text'=>$text,
     157                'attributes'=>$attributes,
     158                'children'=>$children
     159        );
     160}
     161
    105162?>
  • _plugins_/rainette/trunk/services/weather.php

    r64706 r64713  
    123123function weather_xml2infos($xml, $lieu){
    124124        $tableau = array();
    125         $regexp = 'loc id=\"'.$lieu.'\"';
    126         $n = spip_xml_match_nodes(",^$regexp,",$xml,$infos);
     125
     126        // On stocke systematiquement le code du lieu
     127        $tableau['code_meteo'] = $lieu;
     128
     129        // On stocke les informations disponibles dans un tableau standard
     130        $regexp = 'loc id=\"' . $lieu . '\"';
     131        $n = spip_xml_match_nodes(",^$regexp,", $xml, $infos);
    127132        if ($n==1){
    128                 $infos = reset($infos['loc id="'.$lieu.'"']);
     133                $infos = reset($infos['loc id="' . $lieu . '"']);
    129134                // recuperer la date de debut des conditions
    130                 $tableau['code_meteo'] = $lieu;
    131135                $tableau['ville'] = $infos['dnam'][0];
     136                $tableau['region'] = '';
     137
    132138                $tableau['longitude'] = floatval($infos['lon'][0]);
    133139                $tableau['latitude'] = floatval($infos['lat'][0]);
     140
     141                $tableau['population'] = '';
    134142                $tableau['zone'] = intval($infos['zone'][0]);
    135143        }
  • _plugins_/rainette/trunk/services/wwo.php

    r64706 r64713  
    1616
    1717        $url = _RAINETTE_WWO_URL_BASE
     18                .  '?key=' . '30e3b46523060112120708'
    1819                .  '&format=xml&extra=localObsTime'
    19                 .  'q=' . str_replace(' ', '', trim($lieu))
    20                 .  '?key=' . '30e3b46523060112120708';
     20                .  '&q=' . str_replace(' ', '', trim($lieu));
    2121        if ($mode == 'infos') {
    22                 $url .= '&includeLocation=yes';
     22                $url .= '&includeLocation=yes&cc=no&fx=no';
    2323        }
    2424        else {
     
    3131function wwo_url2flux($url) {
    3232
    33         include_spip('inc/xml');
    34         $flux = spip_xml_load($url);
     33        include_spip('inc/distant');
     34        $flux = recuperer_page($url);
    3535
    36         return $flux;
     36        include_spip('inc/rainette_utils');
     37        $xml = @simplexml2array(simplexml_load_string($flux));
     38
     39        return $xml;
    3740}
    3841
     
    129132function wwo_xml2infos($xml, $lieu){
    130133        $tableau = array();
    131         $regexp = 'loc id=\"'.$lieu.'\"';
    132         $n = spip_xml_match_nodes(",^$regexp,",$xml,$infos);
    133         if ($n==1){
    134                 $infos = reset($infos['loc id="'.$lieu.'"']);
    135                 // recuperer la date de debut des conditions
    136                 $tableau['code_meteo'] = $lieu;
    137                 $tableau['ville'] = $infos['dnam'][0];
    138                 $tableau['longitude'] = floatval($infos['lon'][0]);
    139                 $tableau['latitude'] = floatval($infos['lat'][0]);
    140                 $tableau['zone'] = intval($infos['zone'][0]);
     134
     135        // On stocke systematiquement le code du lieu
     136        $tableau['code_meteo'] = $lieu;
     137
     138        // On stocke les informations disponibles dans un tableau standard
     139        if (isset($xml['children']['nearest_area'][0]['children'])) {
     140                $area = $xml['children']['nearest_area'][0]['children'];
     141
     142                if (isset($area['areaname'])) {
     143                        $tableau['ville'] = $area['areaname'][0]['text'];
     144                        $tableau['ville'] .= (isset($area['country'])) ? ', ' . $area['country'][0]['text'] : '';
     145                }
     146                $tableau['region'] = (isset($area['region'])) ? $area['region'][0]['text'] : '';
     147
     148                $tableau['longitude'] = (isset($area['longitude'])) ? floatval($area['longitude'][0]['text']) : '';
     149                $tableau['latitude'] = (isset($area['latitude'])) ? floatval($area['latitude'][0]['text']) : '';
     150
     151                $tableau['population'] = (isset($area['population'])) ? intval($area['population'][0]['text']) : '';
     152                $tableau['zone'] = '';
    141153        }
     154
    142155        return $tableau;
    143156}
Note: See TracChangeset for help on using the changeset viewer.