[PYTHON] Obtenez des informations de l'Agence météorologique et informez Slack des avertissements météorologiques dans les 23 quartiers de Tokyo

Domo, bonsoir!

Ceci est l'article du 5ème jour du Calendrier de l'Avent Zapier 2019.

Cette fois,

――Je veux détecter l'avertissement météorologique dans le 23e arrondissement dès que possible! ――Je veux faire référence à des informations plus probables, pas à une API tierce!

Sur la base de la demande, j'ai fait un petit Zap, donc je vais le présenter.

J'envoie ceci à Slack: point_down: image.png

La grande image de Zap

Les données fournies par l'Agence météorologique sont utilisées pour obtenir des informations météorologiques, et Slack est notifié en filtrant et en analysant correctement avec Python.

image.png

Zap détails

Obtenir et filtrer les flux

Cette fois, le flux mis à jour de temps en temps http://www.data.jma.go.jp/developer/xml/feed/extra.xml Est utilisé.

Référence: Meteorological Agency \ | Meteorological Agency Disaster Prevention Information XML Format Format Format Telegram (PULL Type)

image.png

Cependant, tel quel, il contient diverses informations autres que des informations sur les catastrophes, je vais donc les filtrer. Ici, seulement lorsque le titre est "Avertissement météorologique spécial / Avertissement / Avertissement", l'étape suivante est exécutée. image.png

Traiter les données avec Python

Zapier peut exécuter du code JavaScript ou Python, mais il semblait préférable d'utiliser Python pour analyser xml (ou plutôt, cela semble être strict avec JavaScript), alors je l'ai écrit pour la première fois.

image.png

from xml.etree import ElementTree
response = requests.get(input_data['url'])
response.encoding = 'utf-8'
root = ElementTree.fromstring(response.text)

output = {'text': ''}
for item in root.findall('./{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Body/{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Warning/{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Item'):
  code = item.find('./{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Area/{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Code')
  if code.text == '130011' or code.text == '130012':
    area_name = item.find('./{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Area/{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Name')
    list = []
    for kind in item.findall('./{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Kind'):
      kind_text = ''
      kind_name = kind.find('./{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Name')
      if kind_name is None:
        continue
      if not 'alarme' in kind_name.text:
        continue
      kind_text += kind_name.text + ':'
      kind_status = kind.find('./{http://xml.kishou.go.jp/jmaxml1/body/meteorology1/}Status')
      kind_text += kind_status.text
      list.append(kind_text)
    if not list:
      continue
    text = '【' + area_name.text + '】' + '、'.join(list)
    print(text)
    output['text'] = output['text'] + text + "\n"

Que fais tu

est. J'ai eu du mal avec l'espace de noms xml plutôt qu'avec Python. ..

Filtrage supplémentaire

Filtrer par "si le" texte "existe". (Parce que text est vide s'il n'y a pas d'informations correspondantes) image.png

Publier sur Slack

Tout ce que vous avez à faire est de publier le texte sur le canal spécifié. image.png

Voilà: étreindre:

référence

Recommended Posts

Obtenez des informations de l'Agence météorologique et informez Slack des avertissements météorologiques dans les 23 quartiers de Tokyo
Téléchargez les données éoliennes de l'Agence météorologique
Gratter les données pluviométriques de l'Agence météorologique et les afficher sur M5Stack
Soyons avertis de la météo dans votre région préférée de Yahoo Weather sur LINE!
Obtenez 1000 publications par ordre de publication sur toutes les chaînes Slack et classez les réactions des pictogrammes
Je veux me débarrasser des avertissements d'importation de Pyright et pylint dans VSCode
Soyons avertis de la météo dans votre région préférée de Yahoo Weather sur LINE! ~ PART2 ~
Lire le fichier GRIB2 de l'Agence météorologique sur pygrib
[Python x Zapier] Obtenez des informations d'alerte et notifiez avec Slack
Notifier le contenu de la tâche avant et après l'exécution de la tâche avec Fabric
Obtenez le titre et la date de livraison de Yahoo! News en Python
Explication et implémentation du protocole XMPP utilisé dans Slack, HipChat et IRC
Ouvrez un fichier Excel en Python et coloriez la carte du Japon
Notification Slack des informations météorologiques avec Open Whisk
Obtenez l'adresse à partir de la latitude et de la longitude
Obtenez le dernier élément du tableau en fractionnant les chaînes en Python et PHP
Une histoire sur l'obtention du champ Atom (télégramme XML) de l'Agence météorologique avec une tarte à la râpe et de le tweeter