LINE Notify 即时地震信息
这篇文章会介绍如何从气象数据开放平台里,取得地震信息 JSON 文件,接着使用 Python 的 Requests 函数库,实作一个可以自动抓取地震信息的网络爬虫,最后使用 LINE Notify 发送气象局的地震位置图 ( 地震发生当下并不会爬娶到数据,需要等气象局汇整数据后,才能抓到内容 )。
注意,LINE Notify 服务已于 2025 年停止,本篇教学的 Line Notify 部分仅供参考使用。
本篇使用的 Python 版本为 3.7.12,所有范例可使用 Google Colab 实作,不用安装任何软件 ( 参考:使用 Google Colab )
取得气象数据开放平台使用授权码
参考“爬取天气预报”文章,注册并登录“气象数据开放平台”,注册成功后会成为“一般会员”,点击“取得授权码”按钮,会出现个人的授权码,如果授权码被盗用或出现问题,可点击“更新授权码”重新产生。
寻找地震信息的数据
点击“数据主题”,选择“天气警特报”,搜索“地震”,找到“小区域有感地震报告”数据集。
链接:小区域有感地震报告
分别进入后,因为没有直接提供 JSON 链接,所以必须点击 API 链接,打开“中央气象局开放数据平台之数据截取 API”的页面,输入个人的授权码。
输入后点击下方的“Execute”,产生地震信息的 JSON 链接。
用浏览器打开地震信息,就能观察 JSON 文件的结构。
注意,有时候气象局会修改数据格式的名称,如果发现读取错误,可以先检查名称。
Python 爬取地震信息
使用 Requests 函数库的 get 的方法,抓取气象观测数据的 JSON 网址,接着使用字典的取值方法,搭配 for 循环印出城市名称、区域名称和观测点名称。
import requests
url = '你取得的地震資訊 JSON 網址'
data = requests.get(url)
data_json = data.json()
eq = data_json['records']['Earthquake']
for i in eq:
loc = i['EarthquakeInfo']['Epicenter']['Location']
val = i['EarthquakeInfo']['EarthquakeMagnitude']['MagnitudeValue']
dep = i['EarthquakeInfo']['FocalDepth']
eq_time = i['EarthquakeInfo']['OriginTime']
img = i['ReportImageURI']
msg = f'{loc},芮氏規模 {val} 級,深度 {dep} 公里,發生時間 {eq_time}'
print(img)
LINE Notify 传送地震位置图
参考“发送 LINE Notify 通知”文章,使用 requests 函数库的 POST 的方法,透过 LINE Notify 将雷达回波图传送到 LINE 里,程序里的 for 循环使用了 break,在取得第一笔数据后就停止循环,就能只发送最新的地震信息。
import requests
url = '你取得的地震資訊 JSON 網址'
data = requests.get(url)
data_json = data.json()
eq = data_json['records']['Earthquake']
for i in eq:
loc = i['EarthquakeInfo']['Epicenter']['Location']
val = i['EarthquakeInfo']['EarthquakeMagnitude']['MagnitudeValue']
dep = i['EarthquakeInfo']['FocalDepth']
eq_time = i['EarthquakeInfo']['OriginTime']
img = i['ReportImageURI']
msg = f'{loc},芮氏規模 {val} 級,深度 {dep} 公里,發生時間 {eq_time}'
print(msg)
token = '你的 LINE Notify 權杖' # 自己申請的 LINE Notify 權杖
headers = {
'Authorization': 'Bearer ' + token # POST 使用的 headers
}
data = {
'message':msg, # 發送的訊息
'imageThumbnail':img, # 預覽圖網址
'imageFullsize':img # 完整圖片網址
}
data = requests.post('https://notify-api.line.me/api/notify', headers=headers, data=data) # 發送 LINE NOtify
break
小结
中央气象局的气象数据开放平台提供了很多好用的即时数据,只要了解爬虫原理,就可以很轻松的抓取数据,进行后续的应用。
微信扫码关注
抖音扫码关注