这次使用心知天气的API来实现天气信息的查询,具体会调用当前天气实况和天气预报两个API。代码如下:
import ssl
from urllib import request, parse
import json
def currentWeather():
params = parse.urlencode({
'key': 你的心知天气key,
'location': 'shanghai',
'language': 'zh-Hans',
'unit': 'c'
})
ssl._create_default_https_context = ssl._create_unverified_context
gcontext = ssl._create_unverified_context()
req = request.Request('{api}?{params}'.format(api='https://api.seniverse.com/v3/weather/now.json', params=params))
response = request.urlopen(req, context=gcontext).read().decode('UTF-8')
data = json.loads(response)
weather = data["results"][0]["now"]["text"]
temperature = int(data["results"][0]["now"]["temperature"])
msg = "上海当前天气:" + weather + ",气温:" + str(temperature) + "°C"
return msg
def forecastWeather(days):
params = parse.urlencode({
'key': '你的心知天气key',
'location': 'shanghai',
'language': 'zh-Hans',
'unit': 'c',
'start': days, # 查询开始日期 (0-今天,1-明天,2-后天)
'days': 1 # 查询几天
})
ssl._create_default_https_context = ssl._create_unverified_context
gcontext = ssl._create_unverified_context()
req = request.Request('{api}?{params}'.format(api='https://api.seniverse.com/v3/weather/daily.json',
params=params))
response = request.urlopen(req, context=gcontext).read().decode('UTF-8')
data = json.loads(response)
weather = data["results"][0]["daily"][0]["text_day"]
high = int(data["results"][0]["daily"][0]["high"])
low = int(data["results"][0]["daily"][0]["low"])
if days == 0:
msg = '上海今日天气预报:'+weather + ',最高温度:' + str(high) + '°C,最低温度:' + str(low) + '°C'
elif days == 1:
msg = '上海明天天气预报:'+weather + ',最高温度:' + str(high) + '°C,最低温度:' + str(low) + '°C'
elif days == 2:
msg = '上海后天天气预报:'+weather + ',最高温度:' + str(high) + '°C,最低温度:' + str(low) + '°C'
return msg
current = currentWeather()
print(current)
forecast = forecastWeather(1)
print(forecast)
上面代码的执行结果如下:
进一步说下这两个接口的调用参数。
1.location:查询具体的城市名字,显示的就是对应城市的天气。
2.language:显示的语言,默认是zh-Hans(简体中文),其他还支持12中语言或字体,具体可以参看官网产品文档。
3.unit:温度单位,默认是c(摄氏度),还可以改成f(华氏)
以上三个参数在天气实况和天气预报接口中都包含。下面2个只在天气预报接口中。
4.start:天气预报起始时间,默认值是0,<0是今天以前,>0是今天以后,也可以输入具体的日期如2015/10/1。
5.days:输入数字,比如3,根据权限的允许最多天数,显示对应的几天预报。免费版的测下来是3天。
调整这些参数,你可以根据自己的需要来获取更多的天气信息。
接下来,我要在rasa的actions.py中调用我写的这两个函数,并最终实现语音助手查询天气信息的功能。相关代码我会在我的公众号“天飓”发布,感兴趣的朋友欢迎关注“天飓”。