Bitten Sie den Bot, Ihnen das Wetter (Niederschlagsinformationen) mithilfe der Wetterinformations-API (YOLP) mitzuteilen, die von Yahoo ~ Slack Bot Development mit Python ④ ~ bereitgestellt wird

Was ist in diesem Artikel zu tun?

Wenn Sie dem Bot "Sag mir, ob es regnet" murmeln, werde ich Ihnen die Niederschlagsinformationen wie folgt mitteilen

スクリーンショット 2017-07-29 19.03.16.png

Übrigens sind die Artikel bisher wie folgt Automatische JIRA-Ticketerstellung mit Slack-Bot ~ Slack-Bot-Entwicklung mit Python ① ~ JIRA-Ticket mit Slack-Bot → Automatisierung der Slack-Benachrichtigung ~ Slack-Bot-Entwicklung mit Python② ~ Benachrichtigen Sie Slack, wenn die Switch-Verkaufsseite aktualisiert wird ~ Slack-Bot-Entwicklung mit Python ③ ~

Montagemethode

・ Klicken Sie auf die folgende API, um die Niederschlagsintensität abzurufen, und verwenden Sie diese Informationen, um den Durchhang zu melden. Wetterinformations-API Mit diesem

Eine Vorregistrierung (kostenlos) ist erforderlich, um die von Yahoo bereitgestellte API zu erreichen Einzelheiten zur Registrierung finden Sie bei den folgenden Personen, die es wunderbar zusammengefasst haben. Erhalten Sie Wetterinformationen über Yahoo! Open Local Platform (YOLP) und lassen Sie Razpai mit AquesTalkPi sprechen

Verzeichnisse und Dateien

Ich werde es auch dieses Mal zu my_mention.py hinzufügen. Mit zunehmender Codemenge werde ich jedoch die Methode zum Aufrufen des Codes im Skriptverzeichnis von mymention.py ändern.


slackbot         #Ein Verzeichnis, das Programme organisiert. Jeder Name ist in Ordnung
├─ run.py        #Starten Sie den Bot, indem Sie dieses Programm ausführen
├─ slackbot_settings.py   #Datei zum Schreiben von Einstellungen für Bot
└─ plugins                #Fügen Sie diesem Verzeichnis Bot-Funktionen hinzu
   ├─ __init__.py         #Eine Datei zur Angabe des Moduls. Leer ist in Ordnung
   └─ my_mention.py       #Verfügt über jede Datei. Jeder Name ist in Ordnung
   └─ files_dir           #Speichern Sie den von curl erfassten Inhalt in diesem Verzeichnis
       ├─ switch.html_1     #Durch Curl erworbene Inhalte
       └─ switch.html_2     #Durch Curl erworbene Inhalte
       └─ switch.html_3..4..5..6.. 
   └─ scripts           #Skript-Speicherverzeichnis
       ├─ confirm_weather.py     #★ Skript, um diese Wetterinformationen zu erhalten
       ├─__init__.py

Programm (my_mention.py)

Die Inhalte, die zu my_mention.py hinzugefügt werden sollen, lauten wie folgt


# coding: utf-8

from slackbot.bot import respond_to     # @botname:Decoder, der mit reagiert
from plugins.scripts.confirm_weather import ConfirmWeather

@respond_to('(.Regen*)')
def confirm_weather(message, something):
    weather_class = ConfirmWeather()
    weather_class.return_rainfall(message)

Programm (verify_weather.py)

Der Inhalt von verify_weather.py, der im eigentlichen Skriptverzeichnis abgelegt werden soll, lautet wie folgt


     1	import urllib.request
     2	import json
     3
     4
     5	class ConfirmWeather():
     6
     7	    def __init__(self):
     8
     9	#Yahoo API URL
    10	        base_url = 'https://map.yahooapis.jp/weather/V1/place?'
    11	#Ginza Breite und Länge
    12	        coordinates_ginza = '139.768976,35.672859'
    13	#SCHLÜSSEL für die Verwendung der Yahoo API(Voranmeldung erforderlich)
    14	        crient_id = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
    15	        self.url = '%scoordinates=%s&appid=%s&output=json' % (base_url, coordinates_ginza, crient_id)
    16
    17	    def return_rainfall(self, message):
    18	#Laden Sie den Inhalt der Ziel-URL mithilfe der urllib-Bibliothek
    19	        response = urllib.request.urlopen(self.url).read()
    20
    21	#Die gelesenen Daten sind eine JSON-Datei
    22	        data_json = json.loads(response.decode('utf-8'))
    23	# weaher_Die folgenden Informationen werden in einer Liste in info gespeichert
    24	# [{'Rainfall': 0.0, 'Type': 'observation', 'Date': '201707291350'}・ ・ ・ ・]
    25	        weather_info = data_json['Feature'][0]['Property']['WeatherList']['Weather']
    26	        base_minutes = 10
    27
    28	#Drehen Sie die Schleife, während Sie den Index mit der Aufzählungsmethode abrufen
    29	        for index, var in enumerate(weather_info):
    30	#Rückmeldung von der Niederschlagsintensität_rain_Holen Sie sich von der Level-Funktion
    31	            info = self.retrun_rain_level(var['Rainfall'])
    32	            if index == 0:
    33	                before_words = "jetzt,"
    34	                if var['Rainfall'] == 0.0:
    35	                    after_words = "Nicht"
    36	                else:
    37	                    after_words = "ing"
    38
    39	            else:
    40	                before_words = '%s Minuten später' % (base_minutes)
    41	                if var['Rainfall'] == 0.0:
    42	                    after_words = "Wird nicht"
    43	                else:
    44	                    after_words = "Wille"
    45	                base_minutes += 10
    46
    47	            message.send(before_words + info + after_words)
    48
    49
    50	    def retrun_rain_level(self, rainfall):
    51	        if (rainfall == 0.0):
    52	            rain_level = "Es regnet"
    53	        elif (rainfall < 20.0):
    54	            rain_level = "Leicht starker Regen, Zaza und Regen"
    55	        elif (rainfall < 30.0):
    56	            rain_level = "Es strömt und es regnet sogar mit einem Regenschirm nass"
    57	        elif (rainfall < 50.0):
    58	            rain_level = "Hast du einen Regenschirm?Es regnet wie ein umgedrehter Eimer"
    59	        elif (rainfall < 80.0):
    60	            rain_level = "Es regnet sehr stark wie ein Wasserfall"
    61	        elif (rainfall >= 80.0):
    62	            rain_level = "Geh bald nach Hause!!Starker Regen mit einem Gefühl der Unterdrückung, das Sie ersticken lässt"
    63	        return rain_level

Punkt

11 # Breite und Länge von Ginza Kann von hier erhalten werden http://www.geocoding.jp/

22	        data_json = json.loads(response.decode('utf-8'))

Sie können json im folgenden Format erhalten, indem Sie auf api klicken

{'ResultInfo': {'Start': 1, 'Count': 1, 'Description': '', 'Status': 200, 'Latency': 0.003202, 'Copyright': '(C) Yahoo Japan Corporation.', 'Total': 1},
'Feature': [{'Name': 'Punkt(Eigentlich sind der Längen- und Breitengrad hier)30. Juli 2017 Wetterinformationen für 60 Minuten ab 00:15 Uhr', 
'Property': {'WeatherList': {'Weather': [{'Rainfall': 0.0, 'Type': 'observation', 'Date': '201707300015'}, {'Rainfall': 1.55, 'Type': 'forecast', 'Date': '201707300025'}, {'Rainfall': 0.0, 'Type': 'forecast', 'Date': '201707300035'}, {'Rainfall': 0.0, 'Type': 'forecast', 'Date': '201707300045'}, {'Rainfall': 0.0, 'Type': 'forecast', 'Date': '201707300055'}, {'Rainfall': 0.0, 'Type': 'forecast', 'Date': '201707300105'}, {'Rainfall': 0.0, 'Type': 'forecast', 'Date': '201707300115'}]}, 'WeatherAreaCode': 4410}, 'Id': '201707300015_139.76898_35.672859', 'Geometry': {'Type': 'point', 'Coordinates': 'Eigentlich sind der Längen- und Breitengrad hier'}}]}

Alles was Sie brauchen ist Niederschlag Diese API informiert Sie eine Stunde später vom aktuell beobachteten Wert zum vorhergesagten Wert

25	        weather_info = data_json['Feature'][0]['Property']['WeatherList']

Wenn nur die oben genannten Informationen abgerufen werden können, ist dies in Ordnung. Geben Sie den Schlüssel an und rufen Sie ihn ab. Wenn Sie dies ausdrucken, können Sie nur die gewünschten Informationen wie folgt abrufen

[{'Rainfall': 0.0, 'Type': 'observation', 'Date': '201707291350'}, 
{'Rainfall': 0.0, 'Type': 'forecast', 'Date': '201707291400'}, 
{'Rainfall': 0.0, 'Type': 'forecast', 'Date': '201707291410'},
{'Rainfall': 0.0, 'Type': 'forecast', 'Date': '201707291420'},
{'Rainfall': 0.0, 'Type': 'forecast', 'Date': '201707291430'},
{'Rainfall': 0.0, 'Type': 'forecast', 'Date': '201707291440'},
{'Rainfall': 0.0, 'Type': 'forecast', 'Date': '201707291450'}]

Basierend auf diesen Informationen werden wir die for-Anweisung drehen

28 Drehen Sie die Schleife, während Sie den Index mit der Methode # enumerate abrufen 29 for index, var in enumerate(weather_info): Drehen Sie die for-Anweisung, während Sie den Index abrufen. Dies liegt daran, dass das erste Element der aktuelle Messwert ist. Daher muss das Wort am Ende des Wortes zur aktuellen progressiven Form gemacht werden.

50	    def retrun_rain_level(self, rainfall):

Nehmen Sie den Wert von Rainfall als Argument und definieren Sie eine Nachricht basierend auf dem gemessenen Wert Die Intensität des Regens und wie es regnet, sind der folgenden Website der Meteorologischen Agentur entnommen. http://www.jma.go.jp/jma/kishou/know/yougo_hp/amehyo.html

Wenn Sie dies tun, erhalten Sie ein Ergebnis wie am Anfang

das ist alles

Beziehung

Automatische JIRA-Ticketerstellung mit Slack-Bot ~ Slack-Bot-Entwicklung mit Python ① ~ JIRA-Ticket mit Slack-Bot → Automatisierung der Slack-Benachrichtigung ~ Slack-Bot-Entwicklung mit Python② ~ Benachrichtigen Sie Slack, wenn die Switch-Verkaufsseite aktualisiert wird ~ Slack-Bot-Entwicklung mit Python ③ ~ [Lassen Sie sich vom Bot das Wetter (Niederschlagsinformationen) mithilfe der Wetterinformations-API (YOLP) mitteilen, die von Yahoo bereitgestellt wird.

Recommended Posts

Bitten Sie den Bot, Ihnen das Wetter (Niederschlagsinformationen) mithilfe der Wetterinformations-API (YOLP) mitzuteilen, die von Yahoo ~ Slack Bot Development mit Python ④ ~ bereitgestellt wird
Fügen Sie eine Funktion hinzu, um dem Wetter heute mitzuteilen, dass der Bot locker ist (hergestellt von Python).
Bitten Sie NAO (Pfeffer), Ihnen das Wetter mitzuteilen
Fügen Sie dem Slack Bot (erstellt von Python) mithilfe der Talk-API von Recruit eine Konversationsfunktion hinzu
Spielen Sie mit der von Yahoo bereitgestellten Stromverbrauchs-API
Ich möchte das Wetter mit LINE bot feat.Heroku + Python wissen
[Yahoo! Weather Replacement Version] So erhalten Sie Wetterinformationen mit LINE Notify + Python
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Benachrichtigen Sie Slack, wenn die Switch-Verkaufsseite aktualisiert wird ~ Slack-Bot-Entwicklung mit Python ③ ~
So senden Sie automatisch E-Mails mit Anhängen mithilfe der Google Mail-API in Python
[Python] Erwähnen Sie mit der Slack-API mehrere Personen
[Python] Sie können ein Objekt mithilfe des Pickle-Moduls in einer Datei speichern.
JIRA Ticket automatische Erstellung mit Slack Bot ~ Slack Bot Entwicklung mit Python ① ~
So bedienen Sie die Discord API mit Python (Bot-Registrierung)
Lesen Sie englische Sätze, indem Sie mit Python auf die Google Übersetzungs-API klicken, ohne das verteilte Modul zu verwenden
Versuchen Sie, in die Datenbank zu importieren, indem Sie ShapeFile mit numerischen Informationen zum nationalen Land mit Python bearbeiten
YOLP Holen Sie sich eine XML-Datei mit Karteninformationen mit der Yahoo! Static Map API
Die erste API, die mit dem Python Djnago REST-Framework erstellt wurde
Berühren wir die API der Netatmo Weather Station mit Python. #Python #Netatmo
Optimieren Sie das Sammeln von Informationen mit Twitter API und Slack Bots
[Python] Ich habe versucht, LINE BOT die Wettervorhersage beantworten zu lassen
So gelangen Sie mit Vagrant in die Python-Entwicklungsumgebung
Ausgabe von Produktinformationen an csv mithilfe der Rakuten-Produktsuch-API [Python]
Erhalten Sie Wetterinformationen über Yahoo! Open Local Platform (YOLP) und lassen Sie Razpai mit AquesTalkPi sprechen
Ich habe versucht, die Sprecheridentifikation mithilfe der Sprechererkennungs-API von Azure Cognitive Services mit Python zu überprüfen. # 1
Ich habe versucht, die Sprecheridentifikation mithilfe der Sprechererkennungs-API von Azure Cognitive Services in Python zu überprüfen. # 2