Si vous murmurez au bot "Dites-moi s'il pleut", je vous donnerai les informations sur les précipitations comme suit
À 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 ③ ~
・ 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
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
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)
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
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
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