2016-03-26 21 views
2

Ich war mit einem einfachen Code, der einen Yahoo Api-Code enthält, um nur das Wetter aus meiner Stadt zu bekommen und auf meiner Webseite setzen, aber ich lese gerade, dass Yahoo Public API funktioniert nicht mehr und ich weiß nicht, wie ai diesen Code zur Arbeit bekommen kann, ich habe einen Yahoo Account, ich habe eine API erstellt und ich weiß nicht weiter wie hier. Wenn jemand mir helfen kann, ist das der Code:Simple Yahoo Wetter Api funktioniert nicht

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

Antwort

0

Yahoo kürzlich aktualisiert die Art, wie sie Anfragen bearbeiten. Früher war es einfach über jede Verbindung, aber jetzt, um es sicherer und einfacher zu handhaben zu machen, entschieden sie sich kürzlich für das Senden aller Anfragen über OAuth1. Verwenden Sie den Beispielcode, den sie auf ihrer Seite bereitstellen, und holen Sie die Informationen aus der Anfrage über JSON.

Weitere Informationen finden Sie unter https://developer.yahoo.com/weather/.

+1

Manchmal ist die '' results' ist null', auch mit Yahoo Beispiel .. –

10

ersetzen Sie einfach http://weather.yahooapis.com mit http://xml.weather.yahoo.com. Kredite an https://forum.rainmeter.net/viewtopic.php?f=13&t=23010

+0

Ich versuche nur die XML-Anforderung für ein Fenster zu erhalten bildet app, aber Ich kann nicht auf den zweiten XML-Link zugreifen. Zum Beispiel versuche ich auf http://xml.weather.yahoo.com/forecastrss?p=68510 zuzugreifen und es sagt immer wieder, dass es ungültig ist. –

+0

versuchen Sie mit dieser Abfrage 'wählen * von weather.forecast wo woeid in (wählen Sie woeid aus geo.Places wo placetype = 'Zip' UND 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

Das hat einfach aufgehört zu funktionieren, irgendjemand kennt einen anderen Weg? –

0

Ersetzen Sie http://weather.yahooapis.com mit http://xml.weather.yahoo.com. Zum Beispiel, wenn Sie auf diesen Link klicken, der der alte ist *** 8http: //weather.yahooapis.com/forecastrsss? W = 2459115 & u = c & d = 5 wird es Ihnen eine Fehlermeldung, die gültige Anmeldeinformationen OAuth fragt . Aber wenn Sie den Link unten verwenden, *** 8http: //xml.weather.yahoo.com/forecastrsss? W = 2459115 & u = c & d = 5, wird dies Wetterdaten im XML-Format anzeigen, und dann Sie kann alle gegebenen Wetterdaten so analysieren, wie Sie es möchten.

Hinweis: w = verwandte Nummer oder wie Sie es in Ihrer URL verwenden p = Postleitzahl. Beides gibt Ihnen das gleiche Ergebnis. Wenn Sie die Nummer einer beliebigen Stadt auf der Welt bekommen möchten, gehen Sie einfach zu *** 8https: //weather.yahoo.com/ und wählen Sie eine beliebige Stadt aus, und Sie werden feststellen, dass die Nummer in der URL-Adressleiste angezeigt wird. Diese Nummer ist die Nummer dieser bestimmten Stadt. Hoffe, das hilft.

3

xml.weather.yahoo.com war die Lösung, aber die URL scheint nicht mehr zu funktionieren. Im jetzt mit yahoos abfragen, um das XML-d“https://query.yahooapis.com/v1/public/yql?q=select%20 *% 20from% 20weather.forecast% 20where% 20woeid% 3D2489314"

Dies scheint zu sein, die gleiche XML mit Ausnahme der‚Ergebnisse‘hinzugefügt, um den Baum zu erhalten.

0

YAHOO änderte einige Regeln über api; Ich machte folgenden Unterricht für mich arbeiten ... Hoffnung funktioniert für Sie; $ fcast = $ phpObj-> Abfrage-> Ergebnisse-> Kanal-> Element-> Prognose; Ändern Sie diese Zeile für andere Produkte ...

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