Simple Yahoo Weather Api Not Working

╄→гoц情女王★ 提交于 2019-12-24 00:36:12

问题


I was using a simple code which includes a yahoo api code to get just the weather from my city and put in on my web page, however, i just read that yahoo public api is no longer working and i dont know how can a i get this code to work, i have a yahoo account, i created an api and i dont know how to proceed since here. If somebody can help me this is the code:

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

回答1:


just replace http://weather.yahooapis.com with http://xml.weather.yahoo.com. credits to https://forum.rainmeter.net/viewtopic.php?f=13&t=23010




回答2:


xml.weather.yahoo.com was the solution, but the URL does not seem to be working anymore. Im now using yahoos query to get the XML i.e."https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%3D2489314"

This seems to be the same XML with the exception of "results" added to the tree.




回答3:


Yahoo recently updated the way they handle requests. It used to be just over any connection, but now to make it more secure and easier to handle, they recently opted into sending all requests over OAuth1. Use the sample code they provide on their page and get the information from the request over JSON.

See https://developer.yahoo.com/weather/ for more information.




回答4:


YAHOO changed some rules about api; I made following class working for me... hope works for you; $fcast=$phpObj->query->results->channel->item->forecast; change this line for other items...

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


来源:https://stackoverflow.com/questions/36242098/simple-yahoo-weather-api-not-working

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!