Skip to content

Instantly share code, notes, and snippets.

@yhstvhd
Last active May 2, 2023 04:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yhstvhd/4be4252eaa5f47e0f622c97ed9593594 to your computer and use it in GitHub Desktop.
Save yhstvhd/4be4252eaa5f47e0f622c97ed9593594 to your computer and use it in GitHub Desktop.
気象庁の津波情報XML電文をパースするプログラム
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()
@yhstvhd
Copy link
Author

yhstvhd commented May 2, 2023

実行する前に FilePathにXML電文のファイルパスをいれてください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment