Demandez au bot de vous indiquer la météo (informations sur les précipitations) à l'aide de l'API d'informations météorologiques (YOLP) fournie par Yahoo ~ développement de bot slack avec python ④ ~

Que faire dans cet article

Si vous murmurez au bot "Dites-moi s'il pleut", je vous donnerai les informations sur les précipitations comme suit

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

À propos, les articles jusqu'à présent sont les suivants Création automatique de tickets JIRA avec slack bot ~ développement de slack bot avec python ① ~ Ticket JIRA avec bot slack → Automatisation de la notification Slack ~ développement de bot slack avec python② ~ Avertir slack lorsque la page de vente du commutateur est mise à jour ~ développement du bot slack avec python ③ ~

Méthode de montage

・ Appuyez sur l'API suivante pour obtenir l'intensité des précipitations et utilisez ces informations pour notifier le mou. API des informations météorologiques Avec ça

Une pré-inscription (gratuite) est requise pour accéder à l'API fournie par Yahoo Pour plus de détails sur la façon de vous inscrire, veuillez vous référer aux personnes suivantes qui l'ont merveilleusement résumé. Obtenez des informations météo à l'aide de Yahoo! Open Local Platform (YOLP) et laissez Razpai parler avec AquesTalkPi

Répertoires et fichiers

Je l'ajouterai également à my_mention.py cette fois-ci. Cependant, à mesure que la quantité de code a augmenté, je vais passer à la méthode d'appel du code dans le répertoire des scripts à partir de mymention.py.


slackbot         #Un annuaire qui organise les programmes. N'importe quel nom va bien
├─ run.py        #Démarrez le bot en exécutant ce programme
├─ slackbot_settings.py   #Fichier pour écrire les paramètres liés au bot
└─ plugins                #Ajouter une fonctionnalité de bot à ce répertoire
   ├─ __init__.py         #Un fichier pour indiquer le module. Vider c'est bien
   └─ my_mention.py       #Présente chaque fichier. N'importe quel nom va bien
   └─ files_dir           #Stocker le contenu acquis par curl dans ce répertoire
       ├─ switch.html_1     #Contenu acquis par curl
       └─ switch.html_2     #Contenu acquis par curl
       └─ switch.html_3..4..5..6.. 
   └─ scripts           #Répertoire de stockage des scripts
       ├─ confirm_weather.py     #★ Script pour obtenir ces informations météorologiques
       ├─__init__.py

Programme (my_mention.py)

Le contenu à ajouter à my_mention.py est le suivant


# coding: utf-8

from slackbot.bot import respond_to     # @botname:Décodeur qui réagit avec
from plugins.scripts.confirm_weather import ConfirmWeather

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

Programme (confirm_weather.py)

Le contenu de confirm_weather.py à placer dans le répertoire de script réel est le suivant


     1	import urllib.request
     2	import json
     3
     4
     5	class ConfirmWeather():
     6
     7	    def __init__(self):
     8
     9	#URL de l'API Yahoo
    10	        base_url = 'https://map.yahooapis.jp/weather/V1/place?'
    11	#Latitude et longitude de Ginza
    12	        coordinates_ginza = '139.768976,35.672859'
    13	#CLÉ pour utiliser l'API Yahoo(Pré-inscription requise)
    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	#Chargez le contenu de l'URL cible à l'aide de la bibliothèque urllib
    19	        response = urllib.request.urlopen(self.url).read()
    20
    21	#Les données lues sont un fichier json
    22	        data_json = json.loads(response.decode('utf-8'))
    23	# weaher_Les informations suivantes sont stockées dans une liste dans info
    24	# [{'Rainfall': 0.0, 'Type': 'observation', 'Date': '201707291350'}・ ・ ・ ・]
    25	        weather_info = data_json['Feature'][0]['Property']['WeatherList']['Weather']
    26	        base_minutes = 10
    27
    28	#Faites pivoter la boucle lors de l'obtention de l'index avec la méthode enumerate
    29	        for index, var in enumerate(weather_info):
    30	#Message de retour de l'intensité des précipitations_rain_Obtenir de la fonction de niveau
    31	            info = self.retrun_rain_level(var['Rainfall'])
    32	            if index == 0:
    33	                before_words = "maintenant,"
    34	                if var['Rainfall'] == 0.0:
    35	                    after_words = "ne pas"
    36	                else:
    37	                    after_words = "ing"
    38
    39	            else:
    40	                before_words = '%s minutes plus tard' % (base_minutes)
    41	                if var['Rainfall'] == 0.0:
    42	                    after_words = "Ne fera pas"
    43	                else:
    44	                    after_words = "Volonté"
    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 = "Il pleut"
    53	        elif (rainfall < 20.0):
    54	            rain_level = "Pluie légèrement forte, Zaza et pluie"
    55	        elif (rainfall < 30.0):
    56	            rain_level = "Il pleut et il pleut même avec un parapluie"
    57	        elif (rainfall < 50.0):
    58	            rain_level = "Avez vous un parapluie?Il pleut comme un seau retourné"
    59	        elif (rainfall < 80.0):
    60	            rain_level = "Il pleut très fort comme une cascade"
    61	        elif (rainfall >= 80.0):
    62	            rain_level = "Rentrer à la maison bientôt!!Forte pluie avec un sentiment d'oppression qui vous fait suffoquer"
    63	        return rain_level

point

11 # Latitude et longitude de Ginza Peut être obtenu à partir d'ici http://www.geocoding.jp/

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

Vous pouvez obtenir json au format suivant en appuyant sur api

{'ResultInfo': {'Start': 1, 'Count': 1, 'Description': '', 'Status': 200, 'Latency': 0.003202, 'Copyright': '(C) Yahoo Japan Corporation.', 'Total': 1},
'Feature': [{'Name': 'point(En fait, la latitude et la longitude sont ici)30 juillet 2017 Informations météo pour 60 minutes à partir de 00:15', 
'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': 'En fait, la latitude et la longitude sont ici'}}]}

Tout ce dont vous avez besoin, c'est de la pluie Cette API vous indiquera de la valeur observée actuelle à la valeur prévue une heure plus tard

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

Si seules les informations ci-dessus peuvent être obtenues, c'est ok, alors spécifiez la clé et récupérez-la. Si vous imprimez ceci, vous ne pouvez récupérer que les informations souhaitées comme suit

[{'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'}]

Sur la base de ces informations, nous tournerons la déclaration for

28 Tournez la boucle tout en obtenant l'index avec la méthode # enumerate 29 for index, var in enumerate(weather_info): Tournez l'instruction for lors de l'obtention de l'index. En effet, le premier élément est la valeur mesurée actuelle, il est donc nécessaire de faire le mot à la fin du mot en cours.

50	    def retrun_rain_level(self, rainfall):

Prenez la valeur de Rainfall comme argument et définissez un message en fonction de la valeur mesurée L'intensité de la pluie et la façon dont il pleut sont tirées du site Web suivant de l'Agence météorologique. http://www.jma.go.jp/jma/kishou/know/yougo_hp/amehyo.html

Si vous faites cela, vous obtiendrez un résultat comme le début

c'est tout

Relation

Création automatique de tickets JIRA avec slack bot ~ développement de slack bot avec python ① ~ Ticket JIRA avec bot slack → Automatisation de la notification Slack ~ développement de bot slack avec python② ~ Avertir slack lorsque la page de vente du commutateur est mise à jour ~ développement du bot slack avec python ③ ~ Demandez au bot de vous indiquer la météo (informations sur les précipitations) à l'aide de l'API d'informations météorologiques (YOLP) fournie par Yahoo ~ développement du bot slack ④ ~ avec python

Recommended Posts

Demandez au bot de vous indiquer la météo (informations sur les précipitations) à l'aide de l'API d'informations météorologiques (YOLP) fournie par Yahoo ~ développement de bot slack avec python ④ ~
Ajouter une fonction pour indiquer la météo d'aujourd'hui au bot slack (fabriqué par python)
Demandez à NAO (Pepper) de vous dire la météo
Ajouter une fonction de conversation au robot slack (créé par python) à l'aide de l'API Talk de Recruit
Jouez avec l'API de consommation d'énergie fournie par Yahoo
Je veux connaître la météo avec LINE bot avec Heroku + Python
[Yahoo! Weather Replacement Version] Comment obtenir des informations météo avec LINE Notify + Python
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
Notifier slack lorsque la page de vente du commutateur est mise à jour ~ développement de bot slack avec python ③ ~
Pour envoyer automatiquement des e-mails avec des pièces jointes à l'aide de l'API Gmail en Python
[Python] Mention à plusieurs personnes avec l'API de Slack
[Python] Vous pouvez enregistrer un objet dans un fichier en utilisant le module pickle.
Création automatique de tickets JIRA avec slack bot ~ développement de slack bot avec python ① ~
Comment faire fonctionner l'API Discord avec Python (enregistrement de bot)
Lisez des phrases en anglais en accédant à l'API Google Translation avec Python sans utiliser le module distribué
Essayez d'importer dans la base de données en manipulant ShapeFile d'informations numériques sur les terres nationales avec Python
YOLP Obtenir un fichier XML d'informations cartographiques avec l'API Yahoo! Static Map
La première API à créer avec le framework Python Djnago REST
Touchons l'API de Netatmo Weather Station avec Python. #Python #Netatmo
Rationalisez la collecte d'informations avec l'API Twitter et les robots Slack
[Python] J'ai essayé de laisser LINE BOT répondre aux prévisions météo
Comment entrer dans l'environnement de développement Python avec Vagrant
Exportez les informations produit au format CSV à l'aide de l'API de recherche de produits Rakuten [Python]
Obtenez des informations météorologiques à l'aide de Yahoo! Open Local Platform (YOLP) et laissez Razpai parler avec AquesTalkPi
J'ai essayé de vérifier l'identification du locuteur par l'API de reconnaissance du locuteur d'Azure Cognitive Services avec Python. # 1
J'ai essayé de vérifier l'identification du locuteur par l'API de reconnaissance du locuteur d'Azure Cognitive Services avec Python. # 2