A Api Meteorológica Simples Do Yahoo Não Funciona
eu estava usando um código simples, que inclui uma api do yahoo código, para obter apenas o clima da minha cidade e colocar na minha página web, no entanto, acabei de ler que o yahoo api pública não está mais funcionando e eu não sei como pode um eu obter este código para trabalhar, tenho uma conta do yahoo, criei uma api e eu não sei como proceder, pois aqui. Se alguém me puder ajudar, este é o código:
<?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']}°C</span>
END;
}
}else{
$clima = '<h1>No results found, please try a different zip code.</h1>';
}
/*Clima*/
?>
5 answers
Substitui apenas http://weather.yahooapis.com
por http://xml.weather.yahoo.com
. créditos a https://forum.rainmeter.net/viewtopic.php?f=13&t=23010
Xml.weather.yahoo.com era a solução,mas a URL não parece estar mais funcionando. Eu estou usando felizardos consulta para obter o XML i.e."https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%3D2489314"
Este parece ser o mesmo XML, com excepção de" resultados " adicionados à árvore.
O Yahoo actualizou recentemente a forma como lida com os pedidos. Costumava ser apenas sobre qualquer conexão, mas agora para torná-lo mais seguro e mais fácil de lidar, eles recentemente optaram em enviar todos os pedidos sobre o OAuth1. Use o código de amostra que eles fornecem em sua página e obter a informação do pedido sobre JSON.
Ver https://developer.yahoo.com/weather / para mais informações.
Substitua http://weather.yahooapis.com com http://xml.weather.yahoo.com. Por exemplo, se você clicar neste link, que é o antigo one ***8http://tempo.yahooapis.com/forecastrss?w=2459115&u=c&d=5 ele vai dar uma mensagem de erro que pede a credencial válida OAuth. Mas se você usar a ligação abaixo, * * * 8http://xml. weather. yahoo. com/forecastss? w=2459115&u=C&d=5, Isto irá mostrar os dados meteorológicos no formato xml, e então você poderá analisar todos os dados meteorológicos indicados da forma como você gosto.
Nota: w = número woied ou à medida que o usa no seu url p=zipcode. Ambos te dão o mesmo resultado. Se você quiser obter o número woied de qualquer cidade do mundo, basta ir para ***8https://weather.yahoo.com/ e selecionar qualquer cidade, e você vai notar o número woied mostrado na barra de endereços url. Esse número é número woied daquela cidade específica. Espero que isto ajude.
O YAHOO mudou algumas regras sobre a api; Fiz seguir A classe a trabalhar para mim... a esperança funciona contigo.; $fcast=$phpObj - >query->results->channel->item - >forecast; altere esta linha para outros itens...
<?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').' '.$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.'°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>