Dark Sky API在Python 3中每天迭代一年

时间:2017-06-23 14:30:12

标签: python-3.x api loops date iteration

我只是尝试获取时间范围内的天气数据。 我想获得一整年的每日或每小时数据。 我刚刚尝试了以下代码:

from forecastiopy import *
from datetime import date, datetime, timedelta

def daterange(start_date, end_date):
    for n in range(int ((end_date - start_date).days)):
        yield start_date + timedelta(n)

start_date = date(2015, 1, 1)
end_date = date(2015, 12, 31)
for single_date in daterange(start_date, end_date):
    time = single_date.strftime("%Y-%m-%d")
    print('DATE: ', time)


city = [40.730610, -73.935242]

fio = ForecastIO.ForecastIO(apikey,
                            units=ForecastIO.ForecastIO.UNITS_SI,
                            lang=ForecastIO.ForecastIO.LANG_ENGLISH,
                            latitude=city[0], longitude=city[1])

print('Latitude:', fio.latitude, 'Longitude:', fio.longitude)
print('Timezone', fio.timezone, 'Offset', fio.offset)
print(fio.get_url()) # You might want to see the request url

if fio.has_hourly() is True:
    hourly = FIOHourly.FIOHourly(fio)
    print('Hourly')
    print('Summary:', hourly.summary)
    print('Icon:', hourly.icon)

for hour in range(0, hourly.hours()):
    print('Hour', hour+1)
    for item in hourly.get_hour(hour).keys():
        print(item + ' : ' + str(hourly.get_hour(hour)[item]))
        # Or access attributes directly for a given minute.
        print(hourly.hour_5_time)
else:
    print('No Hourly data')

我明白了:

DATUM:  2015-01-01
DATUM:  2015-01-02
DATUM:  2015-01-03
...
DATUM:  2015-12-29
DATUM:  2015-12-30
Latitude: 40.73061 Longitude: -73.935242
Timezone America/New_York Offset -4
Hourly
Summary: Light rain starting this afternoon.
Icon: rain
Hour 1
visibility : 16.09
humidity : 0.52
...
Hour 49
visibility : 16.09
humidity : 0.57
apparentTemperature : 23.52
icon : partly-cloudy-day
precipProbability : 0
windGust : 2.7
uvIndex : 2
time : 1498395600
precipIntensity : 0
windSpeed : 2.07
pressure : 1014.84
summary : Mostly Cloudy
windBearing : 37
temperature : 23.34
ozone : 308.33
cloudCover : 0.65
dewPoint : 14.43
1498237200

如何使用特定年份每天的时间参数来获取365个每日报告或365 * 24个小时报告?我不是python的专家。

1 个答案:

答案 0 :(得分:1)

此博客提供了一些在日期https://nipunbatra.github.io/blog/2013/download_weather.html之间进行查询的代码

times = []
data = {}
for attr in attributes:
    data[attr] = []

start = datetime.datetime(2015, 1, 1)
for offset in range(1, 60):
    forecast = forecastio.load_forecast(api_key, lat, lng, time=start+datetime.timedelta(offset), units="us")
    h = forecast.hourly()
    d = h.data
    for p in d:
        times.append(p.time)
        try:
            for i in attributes:
                data[i].append(p.d[i])
        except:
            print(KeyError)

df = pd.DataFrame(data, index=times)

它在python 3.6上适用于我...但是,当我查询2019年3月左右的日期作为坐标时,我得到了一个KeyError:'temperature'错误。因此在这段代码中,我在for中添加了try catach error d循环中的p

希望这会有所帮助