1

我一直在为我的网站制作天气提要。

我目前只能获得未来 2 天的预测。我想要未来 5 天的预测。

这是我的代码:

$ipaddress = $_SERVER['REMOTE_ADDR'];
$locationstr = "http://api.locatorhq.com/?user=MYAPIUSER&key=MYAPIKEY&ip=".$ipaddress."&format=xml";

$xml = simplexml_load_file($locationstr);

$city = $xml->city;

switch ($city)
{
    case "Pretoria":
        $loccode = "SFXX0044";

        $weatherfeed = file_get_contents("http://weather.yahooapis.com/forecastrss?p=".$loccode."&u=c");
        if (!$weatherfeed) die("weather check failed, check feed URL");
        $weather = simplexml_load_string($weatherfeed);

        readWeather($loccode);
        break;
}

function readWeather($loccode)
{
    $doc = new DOMDocument();
    $doc->load("http://weather.yahooapis.com/forecastrss?p=".$loccode."&u=c");

    $channel = $doc->getElementsByTagName("channel");

    $arr;
    foreach($channel as $ch)
    {
        $item = $ch->getElementsByTagName("item");
        foreach($item as $rcvd)
        {
            $desc = $rcvd->getElementsByTagName("description");

            $_SESSION["weather"] = $desc->item(0)->nodeValue;
        }
    }
}

我想请您注意查询天气的行:

$doc = new DOMDocument();
$doc->load("http://weather.yahooapis.com/forecastrss?p=".$loccode."&u=c");

// url resolves to http://weather.yahooapis.com/forecastrss?p=SFXX0044&u=c in this case

搜索谷歌,我发现这个链接建议我改用这个网址:

$doc->load("http://xml.weather.yahoo.com/forecastrss/SFXX0044_c.xml");

虽然这也有效,并且我在 XML 文件中看到了 5 天的预测,但我仍然在我的网站上看到了 2 天的预测。

我有一种感觉,这是因为我正在利用channelRSS 提要中的子元素,而 XML 提要没有这样的子元素。

如果有人可以在这里提供任何见解,我将不胜感激。

4

1 回答 1

1

这就是我问得太早的问题...

当我再次查看我的代码时,我注意到我两次引用了 yahooapis URL:一次在 switch 中,一次在 readWeather 中。

根据提到的线程删除了多余的引用并更新了 url,我发现它现在可以工作了。

请参阅更新的代码以供参考:

switch ($city)
{
    case "Pretoria":
        $loccode = "SFXX0044";

        readWeather($loccode);
        break;
}

function readWeather($loccode)
{
    $doc = new DOMDocument();
    $doc->load("http://xml.weather.yahoo.com/forecastrss/".$loccode."_c.xml");

    $channel = $doc->getElementsByTagName("channel");

    $arr;
    foreach($channel as $ch)
    {
        $item = $ch->getElementsByTagName("item");
        foreach($item as $rcvd)
        {
            $desc = $rcvd->getElementsByTagName("description");

            $_SESSION["weather"] = $desc->item(0)->nodeValue;
        }
    }
}
于 2013-03-12T14:43:52.617 回答