pyowm
库允许一个人从https://openweathermap.org获取天气预报。在我编写的一个用于下载近期预测的小程序中,它的效果很好(请参见下文,除了我已X删除的API密钥;插入要测试代码的自己的API密钥,它们可以从openweathermap免费获得。)
#!/usr/bin/env python
import pyowm
import json
owm = pyowm.OWM('XXXXXXXXXXXXX') # You MUST provide a valid API key
forecaster = owm.three_hours_forecast('Santa Fe, US')
forecast = forecaster.get_forecast()
forecastJSON=json.loads(forecast.to_JSON())
def oneForecast():
mrForecast = forecastJSON['weathers'][:1]
return mrForecast[0]['detailed_status']
def printForecast():
print oneForecast()
if __name__ == "__main__":
printForecast()
从命令行可以完美运行。但是,如果我创建另一个定期调用oneForecast()的程序,它将在第一次返回正确答案,然后再也不会更改其预测。
例如参见
#!/usr/bin/env python
import time
import msForecast
def run():
while True:
text = msForecast.oneForecast()
print text
time.sleep(10.0)
if __name__ == "__main__":
run_text = run()
从命令行运行时,该程序应每10秒打印一次简单的预测。每次调用该API时,该天气预报应随天气变化而更新,但不会更新。如果在程序首次运行时预测为“小雨”,它将无限期每十秒打印一次“小雨”,而无需更改。
第二个代码调用第一个代码的方式是否出错?是否有一些需要刷新的缓存?我在这里可能会缺少什么?
答案 0 :(得分:1)
您的oneForecast
调用不会做任何事情来获取新的预测,它只是格式化您早先已获取的预测。
这是获取新预测的代码:
forecaster = owm.three_hours_forecast('Santa Fe, US')
forecast = forecaster.get_forecast()
这是顶层模块代码:当您第一次import
模块时,它在每个Python解释器会话中仅运行一次。
因此,您只需要重写代码即可在每次调用oneForecast
时进行提取,也许是这样的:
forecaster = owm.three_hours_forecast('Santa Fe, US')
def oneForecast():
forecast = forecaster.get_forecast()
forecastJSON=json.loads(forecast.to_JSON())
mrForecast = forecastJSON['weathers'][:1]
return mrForecast[0]['detailed_status']