遮是一篇超级没有语言技术性质的文章!请三思慎入!!
今天要来做查询天气的功能。
一样有事前作业:
1.要先到气象局注册会员
2.到会员资讯中API授权码的地方取得我们的Token
如此一来,就可以使用中央气象局的API,然後在程序码中使用Python内的requests套件做查询
if (msg.find(keyWord_Weather) >= 0): # 台北市天气 如果在关键字开头,有找到视为0,即是索引位置
# 把县市拿出来放到getWeather()做搜寻
user_city = message[:3]
# 找到该城市的天气资料
weather = getWeather(user_city)
# 如果没有找到资料
if (weather == 'no data'):
msg_error = '查询天气状况,使用方式: [县市名称][天气]。例如:台北市天气'
line_bot_api.reply_message(
replyToken, TextMessage(text=msg_error))
print('getWeather: no data')
else:
# 将取得的城市天气资料处理成我需要的资讯
msg_weaterInfo = transferWeatherData(weather)
line_bot_api.reply_message(
replyToken, TextSendMessage(text=msg_weaterInfo))
print('transferWeatherData: success')
def getWeather(city):
# 取气象局的授权与资料--天气
# 开放查询
res = requests.get(
'https://opendata.cwb.gov.tw/api/v1/rest/datastore/F-C0032-001?Authorization=你的TOKEN')
# 处理台跟台
if(city[0] == '台'):
city = city.replace("台", "台")
weather_Josn = json.loads(res.text) # 读取json 物件型态
locations = weather_Josn["records"]["location"]
# FIND CITY
try:
i = 0
while (i <= (len(locations))):
if (locations[i]["locationName"] == city):
item = locations[i]
break
i += 1
return item
except IndexError:
print('you get IndexError: list index out of range')
return 'no data'
def transferWeatherData(item):
cityName = item["locationName"]
weatherElement = item["weatherElement"] # 取得该县市的天气资料
# 天气现象
if (weatherElement[0]["elementName"] == 'Wx'):
timeDicts = weatherElement[0]["time"] # 依时间区段设定早晚跟明天
Wx_morning = timeDicts[0]["parameter"]["parameterName"]
Wx_night = timeDicts[1]["parameter"]["parameterName"]
Wx_tomorrow = timeDicts[2]["parameter"]["parameterName"]
# 降雨机率
if (weatherElement[1]["elementName"] == 'PoP'):
timeDicts = weatherElement[1]["time"] # 依时间区段设定早晚跟明天
PoP_morning = str(timeDicts[0]["parameter"]["parameterName"]) + \
timeDicts[0]["parameter"]["parameterUnit"]
PoP_night = str(timeDicts[1]["parameter"]["parameterName"]) + \
timeDicts[1]["parameter"]["parameterUnit"]
PoP_tomorrow = str(timeDicts[2]["parameter"]["parameterName"]) + \
timeDicts[2]["parameter"]["parameterUnit"]
# 低温
if (weatherElement[2]["elementName"] == 'MinT'):
timeDicts = weatherElement[2]["time"] # 依时间区段设定早晚跟明天
MinT_morning = timeDicts[0]["parameter"]["parameterName"] + \
timeDicts[0]["parameter"]["parameterUnit"]
MinT_night = timeDicts[1]["parameter"]["parameterName"] + \
timeDicts[1]["parameter"]["parameterUnit"]
MinT_tomorrow = timeDicts[2]["parameter"]["parameterName"] + \
timeDicts[2]["parameter"]["parameterUnit"]
# 舒适度
if (weatherElement[3]["elementName"] == 'CI'):
timeDicts = weatherElement[3]["time"] # 依时间区段设定早晚跟明天
CI_morning = timeDicts[0]["parameter"]["parameterName"]
CI_night = timeDicts[1]["parameter"]["parameterName"]
CI_tomorrow = timeDicts[2]["parameter"]["parameterName"]
# 高温
if (weatherElement[4]["elementName"] == 'MaxT'):
timeDicts = weatherElement[4]["time"] # 依时间区段设定早晚跟明天
MaxT_morning = timeDicts[0]["parameter"]["parameterName"] + \
timeDicts[0]["parameter"]["parameterUnit"]
MaxT_night = timeDicts[1]["parameter"]["parameterName"] + \
timeDicts[1]["parameter"]["parameterUnit"]
MaxT_tomorrow = timeDicts[2]["parameter"]["parameterName"] + \
timeDicts[2]["parameter"]["parameterUnit"]
today = timeDicts[0]["startTime"].split(
",")
tomorrow = timeDicts[2]["endTime"].split(
",")
replyMsg = cityName + "今明两日天气预报:" + '\n' + \
str(today[0][0:10]) + "," + Wx_morning + " " + CI_morning + '\n' + "白天高温: " + MaxT_morning + '\n' + "今白天低温: " + MinT_morning + '\n' + "白天下雨机率: " + PoP_morning + '\n' + "晚上高温: " + MaxT_night + '\n' + "晚上低温: " + \
MinT_night + '\n' + "晚上下雨机率: " + PoP_night + '\n' + \
str(tomorrow[0][0:10]) + "," + Wx_tomorrow + " " + CI_tomorrow + '\n' + "高温: " + \
MaxT_tomorrow + '\n' + "低温: " + MinT_tomorrow + '\n' + "下雨机率: " + PoP_tomorrow
# 低温提醒
# notice_minT()
minT = min([weatherElement[2]["time"][0]["parameter"]["parameterName"], weatherElement[2]["time"]
[1]["parameter"]["parameterName"], weatherElement[2]["time"][2]["parameter"]["parameterName"]])
# 高温提醒
maxT = max([weatherElement[4]["time"][0]["parameter"]["parameterName"], weatherElement[4]["time"]
[1]["parameter"]["parameterName"], weatherElement[4]["time"][2]["parameter"]["parameterName"]])
pop = max([weatherElement[1]["time"][0]["parameter"]["parameterName"], weatherElement[1]["time"]
[1]["parameter"]["parameterName"], weatherElement[1]["time"][2]["parameter"]["parameterName"]])
if (int(minT) < 10):
replyMsg = replyMsg + "请注意低温"
return str(replyMsg)
elif(int(maxT) > 36):
replyMsg = replyMsg + "请注意高温"
return str(replyMsg)
elif(int(pop) > 42): # 降雨提醒 pop=12h/ pop6=6h
replyMsg = replyMsg + '\n' + "请携待雨具"
return str(replyMsg)
else:
return replyMsg
>>: 浏览器向 Web 服务器提交用户密码最可行的方法-原始密码(Raw password )
今天继续 todo app part2, 会纪录实作上遇到的问题。 若有错误,欢迎留言指教,感恩的...
yo, what's up Semigroup II 多组 Semigroup 进形合并 到目前为止...
Q: 剩下 5 篇来点实用也不实用的范例吧~~ A: 毕竟效果还是要看设计的美感,这是很看天份的(...
在网页中的JavaScript程序码,必须经由事件触发(如:按下按钮,又称事件驱动event-dri...
昨天介绍了Node.js,今天我们就要来实际安装Node.js啦 首先当然是到官网去下载Node.j...