我正在创建有关公园的网页。对于每个公园,有一个lat / lng,对于大多数公园,我可以使用Yahoo weather API
但由于某种原因,某些页面会返回如下错误:
输入/预测器无效?w = 2347563
在我打电话给雅虎天气API之后:
http://www.geomojo.org/cgi-bin/reversegeocoder.cgi?long=-121.433098&lat=40.509312
知道如何解决这些错误吗?
这是我的代码:
$url = 'http://www.geomojo.org/cgi-bin/reversegeocoder.cgi?long='.$lng.'&lat='.$lat;
// Calls the url to get the zip code and woeid
$webpage = file_get_contents($url);
//echo $webpage;
try
{
$xml = new SimpleXMLElement($url, 0, true);
// Gets the woeid to look up the weather in that specific place dynamically.
$woeid= $xml->woeid; // Displays "Text"
$zip = $xml->name; // Displays "Text"
// URL to send to yahoo weather to get weather RSS
$yahoo_url = 'http://weather.yahooapis.com/forecastrss?w='.$woeid;
$xml = file_get_contents($yahoo_url);
$yahoo_response = new SimpleXMLElement($xml , 0, false);
$weather_description = $yahoo_response->channel->item->description;
$splitdata = explode('<a', $weather_description);
echo '<p>'.$splitdata[0].'</p>';
}
catch (Exception $e)
{
echo 'Caught exception: ', $e->getMessage(), "\n";
}
以下是一个不起作用的示例网址。请参阅左侧的天气部分:
答案 0 :(得分:2)
如果您通过Yahoo同时执行lat / long-&gt; woeid和天气呼叫,您可能会获得更好的结果。你可以使用YQL为你做两个电话。
例如,使用上面的lat / long对,这是一个YQL查询,首先将纬度/经度变换为一个woeid,然后用它来获得预测:
在YQL控制台中尝试时,结果如下:
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng"
yahoo:count="1" yahoo:created="2011-12-30T20:43:08Z" yahoo:lang="en-US">
<results>
<rss version="2.0"
xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0">
<channel>
<title>Yahoo! Weather - Old Station, CA</title>
<link>http://us.rd.yahoo.com/dailynews/rss/weather/Old_Station__CA/*http://weather.yahoo.com/forecast/USCA0801_f.html</link>
<description>Yahoo! Weather for Old Station, CA</description>
<language>en-us</language>
<lastBuildDate>Fri, 30 Dec 2011 11:53 am PST</lastBuildDate>
<ttl>60</ttl>
<yweather:location city="Old Station"
country="United States" region="CA"/>
<yweather:units distance="mi" pressure="in" speed="mph" temperature="F"/>
<yweather:wind chill="51" direction="200" speed="7"/>
<yweather:atmosphere humidity="89" pressure="30.08"
rising="2" visibility="4"/>
<yweather:astronomy sunrise="7:33 am" sunset="4:52 pm"/>
<image>
<title>Yahoo! Weather</title>
<width>142</width>
<height>18</height>
<link>http://weather.yahoo.com</link>
<url>http://l.yimg.com/a/i/brand/purplelogo//uh/us/news-wea.gif</url>
</image>
<item>
<title>Conditions for Old Station, CA at 11:53 am PST</title>
<geo:lat>40.59</geo:lat>
<geo:long>-121.49</geo:long>
<link>http://us.rd.yahoo.com/dailynews/rss/weather/Old_Station__CA/*http://weather.yahoo.com/forecast/USCA0801_f.html</link>
<pubDate>Fri, 30 Dec 2011 11:53 am PST</pubDate>
<yweather:condition code="26"
date="Fri, 30 Dec 2011 11:53 am PST" temp="51" text="Cloudy"/>
<description><![CDATA[
<img src="http://l.yimg.com/a/i/us/we/52/26.gif"/><br />
<b>Current Conditions:</b><br />
Cloudy, 51 F<BR />
<BR /><b>Forecast:</b><BR />
Fri - Rain/Snow Showers. High: 43 Low: 21<br />
Sat - Partly Cloudy. High: 48 Low: 23<br />
<br />
<a href="http://us.rd.yahoo.com/dailynews/rss/weather/Old_Station__CA/*http://weather.yahoo.com/forecast/USCA0801_f.html">Full Forecast at Yahoo! Weather</a><BR/><BR/>
(provided by <a href="http://www.weather.com" >The Weather Channel</a>)<br/>
]]></description>
<yweather:forecast code="5" date="30 Dec 2011"
day="Fri" high="43" low="21" text="Rain/Snow Showers"/>
<yweather:forecast code="30" date="31 Dec 2011"
day="Sat" high="48" low="23" text="Partly Cloudy"/>
<guid isPermaLink="false">USCA0801_2011_12_31_7_00_PST</guid>
</item>
</channel>
</rss>
</results>
</query>
答案 1 :(得分:1)
此地理编码调用
http://www.geomojo.org/cgi-bin/reversegeocoder.cgi?long=-121.433098&lat=40.509312
只回到加利福尼亚州。
如果我不得不猜测,我会说天气API需要一个比这更具体的位置。这可能是因为一些公园如此偏僻(或最近的城镇如此之小)以至于地理编码器无法找到您所经过的坐标的城市。