2016-03-26 5 views
2

Я использовал простой код, который включает код api yahoo, чтобы получить только погоду из моего города и поставить на мою веб-страницу, однако, я просто прочитал, что публичный api Yahoo больше не работает и я не знаю, как можно заставить этот код работать, у меня есть учетная запись yahoo, я создал api, и я не знаю, как действовать дальше. Если кто-то может мне помочь, это код:Простая Yahoo Погода Api Не работает

<?php 
/*Clima*/ 
if(isset($_POST['zipcode']) && is_numeric($_POST['zipcode'])){ 
    $zipcode = $_POST['zipcode']; 
}else{ 
    $zipcode = 'ARMA0056'; 
} 
$result = file_get_contents('http://weather.yahooapis.com/forecastrss?p=' . $zipcode . '&u=c'); 
$xml = simplexml_load_string($result); 

//echo htmlspecialchars($result, ENT_QUOTES, 'UTF-8'); 

$xml->registerXPathNamespace('yweather', 'http://xml.weather.yahoo.com/ns/rss/1.0'); 
$location = $xml->channel->xpath('yweather:location'); 

if(!empty($location)){ 
    foreach($xml->channel->item as $item){ 
     $current = $item->xpath('yweather:condition'); 
     $forecast = $item->xpath('yweather:forecast'); 
     $current = $current[0]; 
     $clima = <<<END 
      <span>{$current['temp']}&deg;C</span> 

END; 
    } 
}else{ 
    $clima = '<h1>No results found, please try a different zip code.</h1>'; 
} 
/*Clima*/ 
?> 

ответ

0

Yahoo недавно обновил способ обработки запросов. Раньше это было как раз над любым подключением, но теперь, чтобы сделать его более безопасным и простым в обращении, они недавно решили отправить все запросы через OAuth1. Используйте пример кода, который они предоставляют на своей странице, и получите информацию от запроса через JSON.

Для получения дополнительной информации см. https://developer.yahoo.com/weather/.

+1

Иногда, '' results' является null', а также с Yahoo, например .. –

10

просто замените http://weather.yahooapis.com на http://xml.weather.yahoo.com. кредиты до https://forum.rainmeter.net/viewtopic.php?f=13&t=23010

+0

Я просто пытаюсь получить запрос XML-за окно формы приложения, но Я не могу получить доступ ко второй ссылке XML. Например, я пытаюсь получить доступ к http://xml.weather.yahoo.com/forecastrss?p=68510, и он продолжает говорить, что он недействителен. –

+0

попробуйте с этим запросом 'select * from weather.forecast, где woeid in (выберите woeid from geo.places, где placetype = 'Zip' AND text = '68510')' 'https://query.yahooapis.com/v1/public /yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20%28select%20woeid%20from%20geo.places%20where%20placetype%3D%27Zip%27%20AND%20text%3D% 2768510% 27% 20% 29 & format = xml' – blackxel

+0

Это просто перестало работать, кто-нибудь знает другой способ? –

0

Замените http://weather.yahooapis.com на http://xml.weather.yahoo.com. Например, если вы нажмете эту ссылку, которая является старой *** 8http: //weather.yahooapis.com/forecastrss? W = 2459115 & u = c & d = 5, он предоставит вам сообщение об ошибке, которое запрашивает действительные учетные данные OAuth , Но если вы используете ссылку ниже, *** 8http: //xml.weather.yahoo.com/forecastrss? W = 2459115 & u = c & d = 5, это отображает данные о погоде в формате xml, а затем вы может анализировать все данные о погоде так, как вам нравится.

Примечание: w = woied number или как вы используете его в своем URL-адресе p = zipcode. Оба дают вам тот же результат. Если вы хотите получить woied номер любого города в мире, просто перейдите на *** 8https: //weather.yahoo.com/ и выберите любой город, и вы заметите, что номер, отображаемый в адресной строке URL. Это число заняло номер этого конкретного города. Надеюсь, это поможет.

3

xml.weather.yahoo.com было решением, но URL-адрес, похоже, больше не работает. Im в настоящее время с помощью Yahoos запроса, чтобы получить XML-то есть»https://query.yahooapis.com/v1/public/yql?q=select%20 *% 20from% 20weather.forecast% 20where% 20woeid% 3D2489314"

Это, кажется, тот же XML, за исключением„результатов“добавляется к дереву.

0

YAHOO изменил некоторые правила относительно api; Я сделал следующий класс для меня ... надеюсь, работает для вас; $ fcast = $ phpObj-> query-> results-> channel-> item-> forecast; изменить эту линию для других вещей ...

<?php 
date_default_timezone_set('CET'); 
class weatherfc{ 
public $result; 
function weather($city){ 
$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="'.$city.'") and u="c"'; 
$yql_query_url = $BASE_URL . "?q=" . urlencode($yql_query) . "&format=json"; 
    // Make call with cURL 
    $session = curl_init($yql_query_url); 
    curl_setopt($session, CURLOPT_RETURNTRANSFER,true); 
    $json = curl_exec($session); 
    // Convert JSON to PHP object 
    $phpObj = json_decode($json); 
    //var_dump($phpObj); 
    $weatherd='<div> Weather In '.$city.'<br>'; 
    $fcast=$phpObj->query->results->channel->item->forecast; 
    foreach($fcast as $witem){ 
    $fdate=DateTime::createFromFormat('j M Y', $witem->date); 

    $weatherd.= '<div class="days">'; 
    $weatherd.= '<div class="item"><div>'.$fdate->format('d.m').'&nbsp;'.$witem->day.'</div><div class="image" style="width:90px !important; height:65px !important;"><img src="http://us.i1.yimg.com/us.yimg.com/i/us/nws/weather/gr/'.$witem->code.'d.png" width=90></div></div>'; 
    $weatherd.= '<div><span>'.$witem->high.'&deg;C</span>'; 
    $weatherd.= '<span>'.$witem->low.'°C</span></div></div>'; 
    }; 
    $this->result=$weatherd; 
} 

} 

$h= new weatherfc; 
$h->weather("Antalya,Turkey"); 
echo $h->result; 
?> 



    <style> 
    .days{ 
    width:90px; 
    font-size:12px; 
    float:left; 
    font-family:Arial, Helvetica, sans-serif; 
    border:#999 1px dotted; 
    } 

</style> 
Смежные вопросы