我先来讲个故事吧~ 故事的主角小明,今年30岁单身,一个人住在租的套房里,每天工作加班累的半死,回家马上倒头就睡,隔天早上起来又急急忙忙出门上班了,根本没有时间看明天的天气预报。
一直以来都没有什麽问题,直到某一天发生一件不幸的事,小明下班时外面下着大雨,自己也没有带伞,一查才发现原来今天的下雨机率高达90%!! 小明此时觉得很气恼,心想:如果有人可以在出门前提醒我带伞就好了...。
於是他将烦恼告诉了他的好友,也就是你,身为工程师的你很同情他,没有女朋友已经很可怜了,竟然还要淋雨回家,因此你决定写一个程序来帮助小明!!
小明的需求是每天早上出门前自动通知天气资讯,因此专案的架构会长这样:每天早上6点执行Python程序,由程序取得气象资料後,经过一些处理後,再推送讯息给小明。那因为LINE是我们很常用的通讯软件,所以就使用LINE Notify推送讯息给小明,如此一来小明只要早上看LINE就知道今天的天气资讯了!
首先,专案最重要的东西就是气象资料,而且要每天更新,又有涵盖很多地区。好消息是,中央气象局提供的气象资料API就有这些特点,我们就是要使用这个。
打开中央气象局气象资讯API文件,底下列出非常多API,而我们要用的是第一个(一般天气预报-今明 36 小时天气预报)。
点开後,可以看到API的所有参数,其中「Authorization」这一项是必填的,这是开放资料平台会员的授权码,要有这个授权码才能使用API,接着就要来讲怎麽取得这个授权码。
回到刚才的中央气象局气象资讯API文件,点API右上方「Try it out」按钮来测试API。
将授权码填上去,底下参数基本上预设值就好,特别需要改的是「locationName」这个参数,选择你所在的县市。
按下「Execute」,下方就会显示回传结果,回传的结果是JSON格式的字串。
根据这份文件来观察回传的JSON字串,就可以知道各个栏位所代表的含意。我们发现到 weatherElement 这个列表中存着天气资讯,而每笔天气资讯的第一笔是离现在最近12小时的资料(因为我们是每天早上6点抓取资料,所以第一笔资料就是当天6点到18点的资料,正是我们需要的)。
解析API的程序码如下,为了方便测试特别写成函数。
def get_data():
url = "https://opendata.cwb.gov.tw/api/v1/rest/datastore/F-C0032-001"
params = {
"Authorization": "你的API授权码",
"locationName": "你的城市",
}
response = requests.get(url, params=params)
print(response.status_code)
if response.status_code == 200:
# print(response.text)
data = json.loads(response.text)
location = data["records"]["location"][0]["locationName"]
weather_elements = data["records"]["location"][0]["weatherElement"]
start_time = weather_elements[0]["time"][0]["startTime"]
end_time = weather_elements[0]["time"][0]["endTime"]
weather_state = weather_elements[0]["time"][0]["parameter"]["parameterName"]
rain_prob = weather_elements[1]["time"][0]["parameter"]["parameterName"]
min_tem = weather_elements[2]["time"][0]["parameter"]["parameterName"]
comfort = weather_elements[3]["time"][0]["parameter"]["parameterName"]
max_tem = weather_elements[4]["time"][0]["parameter"]["parameterName"]
print(location)
print(start_time)
print(end_time)
print(weather_state)
print(rain_prob)
print(min_tem)
print(comfort)
print(max_tem)
else:
print("Can't get data!")
执行结果:
200
台中市
2021-09-30 18:00:00
2021-10-01 06:00:00
晴时多云
20
27
舒适至闷热
31
今天顺利地取得气象资料了,明天就透过LINE Notify传送讯息吧!
如果喜欢这系列文章麻烦帮我按Like加订阅,你的支持是我创作最大的动力~
本系列文章以及范例程序码都同步更新在GitHub上,後续会持续的更新,如果喜欢也麻烦帮我按个星星吧~
有任何问题或建议,都欢迎在底下留言区提出,还请大家多多指教。
>>: [Day17] XML Signature Wrapping
今日要点 》前言 》介绍 Demo 专案 》程序架构研究 前言 前面精选了很多在 Github 上很...
今天就来完成登入验证的部分! 昨天已经完成发送帐号密码到api,验证ok即发送一笔JWT给clien...
安装Unreal的过程意外频出啊,差点以为我的电脑出事了,结果是因为我time machine开着,...
经过两天的简介,希望大家都对TypeScript(TS)有基本的了解。 今天呢要来讲解安装TS的开发...
Outline Characters C strings C string processing f...