Last active
May 2, 2023 04:32
-
-
Save yhstvhd/4be4252eaa5f47e0f622c97ed9593594 to your computer and use it in GitHub Desktop.
気象庁の津波情報XML電文をパースするプログラム
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import xml.etree.ElementTree as ET | |
class JmaTunamiParse: | |
PATH = 'FilePath' | |
def Main(self): | |
#表示テキスト | |
message = "" | |
try : | |
#津波警報リスト | |
level,msg = self.ParseTsunamiWarning() | |
#津波予報の場合は避難メッセージなし | |
if(level.find("若干の海面変動") == -1): | |
message = level+" 今すぐ高台へ避難" +" "+ " "+msg +" 今すぐ高台へ避難" | |
else: | |
message = level +" "+ " "+ msg | |
message = "■■津波情報■■ " + message | |
except Exception as e: | |
print( "=== エラー内容 ===") | |
print("type:" + str(type(e))) | |
print("args:" + str(e.args)) | |
message = headline +" (パース失敗)" | |
else: | |
message = headline | |
print(message) | |
def ParseTsunamiWarning(self): | |
#XMLのルート取得 | |
tree = ET.parse(self.PATH) | |
root = tree.getroot() | |
#津波警報・注意報の対象エリア抽出 | |
tsunamiWarningAreaList =[] #地域リスト | |
tsunami_LevelList = [] #地域別警報種別 | |
tsunami_Level = "" #津波警報・大津波・津波注意報 | |
message = "" #メッセージ | |
result = "" #{警報} {地域}を連結させたもの | |
ns ="{http://xml.kishou.go.jp/jmaxml1/body/seismology1/}" | |
for item in root.find(ns+"Body/"+ | |
ns + "Tsunami/"+ | |
ns + "Forecast/"+ | |
ns + "Item/"+ | |
ns + "Category/"+ | |
ns + "Kind"): | |
for i in item.iter(ns+"Name"): | |
tsunami_Level = i.text | |
#エリア取得 | |
for area in root.findall(ns + "Body/"+ | |
ns + "Tsunami/"+ | |
ns + "Forecast/"+ | |
ns + "Item/"+ | |
ns + "Area/"+ | |
ns + "Name"): | |
tsunamiWarningAreaList.append(area.text) | |
#エリア別警報種別取得 | |
for kind in root.findall(ns + "Body/"+ | |
ns + "Tsunami/"+ | |
ns + "Forecast/"+ | |
ns + "Item/"+ | |
ns + "Category/"+ | |
ns + "Kind/"+ | |
ns + "Name"): | |
tsunami_LevelList.append(kind.text) | |
#別個メッセージ | |
for item in root.find(ns + "Body"): | |
message += item.text | |
#特殊文字を修正 | |
message = re.sub("\s","",message) | |
#警報と地域を結合 | |
for index ,item in enumerate(tsunami_LevelList): | |
result += "【"+item + "】" + tsunamiWarningAreaList[index]+"" | |
message = result + " "+message | |
# print(message) | |
return tsunami_Level,message | |
if __name__ in '__main__': | |
objtunamiParse = JmaTunamiParse() | |
objtunamiParse.Main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
実行する前に FilePathにXML電文のファイルパスをいれてください。