php
  • api
  • yahoo
  • weather
  • 2015-03-12 7 views 0 likes 
    0

    Держите получаю ошибку пространства имен при использовании кода нижеНеопределенное префикс пространства имен при использовании API Yahoo погода запроса

    <?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

    Было бы неплохо узнать, как выглядит xml. – Daan

    +0

    Боковое примечание: измените '& format = xml' на' & format = json', а затем просто «json_decode» результаты и работайте с простым массивом PHP! – jszobody

    +0

    Это потому, что вы, вероятно, ошибаетесь в пространстве имен. Определите пространство имен, которое вы используете в самой верхней части файла, или включите файлы, которые этот сценарий должен запустить (включены имена). –

    ответ

    0

    В соответствии с просьбой, вот решение с использованием 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>'; 
    } 
    

    Испытано локально моя машина.

    +0

    позвольте мне попробовать. спасибо – titant3ch

    +0

    , который работал как шарм .. используя json выглядит проще – titant3ch

     Смежные вопросы

    • Нет связанных вопросов^_^