获取天气预报数据

时间:2012-11-13 06:58:32

标签: weather-api google-weather-api yahoo-weather-api

我想开发天气网络服务,我只想获取天气预报的信息。

比我创建自己的界面。但是我找不到如何访问这些数据。

如何访问天气数据?谢谢。

3 个答案:

答案 0 :(得分:3)

我在mashape上提供了Weather API,他们已准备好使用简单的PHP SDK。 这个api非常简单易用,因为我们使用现在可用的酷标准,如JSON和REST。

如果您喜欢,请试试mashape

答案 1 :(得分:2)

您可能正在寻找的是直接来自数据源的数据。我对此other stackoverflow question提供了一个非常全面的概述,但以下是基础知识:

数据来源

获取数据的最佳位置来自国家气象局及其附属机构。他们不仅预测美国,而且预测整个世界。要获得您正在寻找的数据量,您需要务实地访问它......这些可能是您最好的选择:

http://nomads.ncdc.noaa.gov/dods/< - 适用于历史数据
http://nomads.ncep.noaa.gov/dods/< - 最近的数据

将数据记录到数据库

根据您需要的数据量,您可能希望将所有内容存储在数据库中......这样可以快速访问和提供。一个好的选择是使用MySQL或PostGRES以及PyDAP或NetCDF。您可以选择这个python预测模块,它将PyDAP与PostGRES结合起来:

http://getforecasting.com

从主页下载一天的整个预测的示例:

from forecasting import Model

rap = Model('rap')
rap.connect(database='weather', user='chef')
fields = ['tmp2m']
rap.transfer(fields)

使用数据

现在数据存在于数据库中,就像查询所需内容一样简单。例如,从Rapid Refresh模型获取最新预测:

select
ST_X(geom),
ST_Y(geom),
value
from data
inner join gridpoints gp on data.gridid = gp.gridpointid
inner join forecasts fcst on data.forecastid = fcst.forecastid
inner join fields fld on fcst.fieldid = fld.fieldid
inner join models m on fld.modelid = m.modelid
where 
m.name = 'rap'
and fld.name = 'tmp2m'
and fcst.datatime = (select max(datatime) from forecasts where forecasts.fieldid = fld.fieldid)
and fcst.datatimeforecast = (select min(datatimeforecast) from forecasts where forecasts.datatime = fcst.datatime)
order by gp.ord;

答案 2 :(得分:1)

您可以使用yahoo API。以下是示例(在PHP中):

    if(isset($_POST['zipcode']) && is_numeric($_POST['zipcode'])){
        $zipcode = $_POST['zipcode'];
    }else{
        $zipcode = '50644';
    }
    $result = file_get_contents('http://weather.yahooapis.com/forecastrss?p=' . $zipcode . '&u=f');
    $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];
            $output = <<<END
                <h1 style="margin-bottom: 0">Weather for {$location[0]['city']}, {$location[0]['region']}</h1>
                <small>{$current['date']}</small>
                <h2>Current Conditions</h2>
                <p>
                <span style="font-size:72px; font-weight:bold;">{$current['temp']}&deg;F</span>
                <br/>
                <img src="http://l.yimg.com/a/i/us/we/52/{$current['code']}.gif" style="vertical-align: middle;"/>&nbsp;
                {$current['text']}
                </p>
                <h2>Forecast</h2>
                {$forecast[0]['day']} - {$forecast[0]['text']}. High: {$forecast[0]['high']} Low: {$forecast[0]['low']}
                <br/>
                {$forecast[1]['day']} - {$forecast[1]['text']}. High: {$forecast[1]['high']} Low: {$forecast[1]['low']}
                </p>
    END;
        }
    }else{
        $output = '<h1>No results found, please try a different zip code.</h1>';
    }
    ?>
    <html>
    <head>
    <title>Weather</title>
    <style>
    body {
        font-family: Arial, Helvetica, sans-serif;
        font-size: 12px;
    }
    label {
        font-weight: bold;
    }
    </style>
    </head>
    <body>
    <form method="POST" action="">
    <label>Zip Code:</label> <input type="text" name="zipcode" size="8" value="" /><br /><input type="submit" name="submit" value="Lookup Weather" />
    </form>
    <hr />
    <?php echo $output; ?>