2015-03-12 1 views
0

continue à obtenir l'erreur d'espace de noms lorsque vous utilisez le code ci-dessouspréfixe d'espace de nom défini lors de l'utilisation yahoo météo requête api

<?php 

    // error_reporting(0); 

    $BASE_URL = "http://query.yahooapis.com/v1/public/yql"; 

    $yql_query = 'select * from weather.forecast where woeid in (select woeid from geo.places(1) where text="austin, tx")'; 
    $result = file_get_contents($BASE_URL . "?q=" . urlencode($yql_query) . "&format=xml"); 

    if ($result == true) { 
     $xml = simplexml_load_string($result); 
     $xml->registerXPathNamespace('yweather', 'http://xml.weather.yahoo.com/ns/rss/1.0'); 
     $location = $xml->results->channel; 

     if(!empty($location)){ 
      foreach($xml->results->channel->item as $item){ 
       $current = $item->xpath('yweather:condition'); 
       $temp = $current['temp']; 

       echo $temp; 
      } 
     } 
     else{ 
      echo '<h1>No weather for today</h1>'; 
     } 
    }else{ 
     echo '<p>Weather service is down</p>'; 
    } 
?> 
+0

Serait agréable de savoir comment le xml ressemble. – Daan

+0

Note de côté: changez '& format = xml' en' & format = json' puis juste 'json_decode' les résultats et travaillez avec un simple tableau PHP! – jszobody

+0

C'est parce que vous êtes probablement dans le mauvais espace de noms. Définissez l'espace de noms que vous utilisez tout en haut du fichier ou incluez les fichiers dont ce script a besoin pour s'exécuter (namesapces inclus). –

Répondre

0

Comme demandé, voici une solution en utilisant au lieu JSON XML:

$BASE_URL = "http://query.yahooapis.com/v1/public/yql"; 

$yql_query = 'select * from weather.forecast where woeid in (select woeid from geo.places(1) where text="austin, tx")'; 
$result = json_decode(file_get_contents($BASE_URL . "?q=" . urlencode($yql_query) . "&format=json"), true); 

if(is_array($result)) { 
    $location = $result['query']['results']['channel']; 

    if(!empty($location)) { 
     $temp = $result['query']['results']['channel']['item']['condition']['temp']; 
     echo $temp; 
    } else { 
     echo '<h1>No weather for today</h1>'; 
    } 
} else { 
    echo '<p>Weather service is down</p>'; 
} 

Testé localement sur ma machine.

+0

laissez-moi essayer ça. merci – titant3ch

+0

qui a fonctionné comme charme .. en utilisant JSON semble beaucoup plus simple – titant3ch