Si vous demandez au bot "Quel temps fait-il aujourd'hui?", Je vous dirai la météo d'aujourd'hui comme suit.
C'est très simple à mettre en œuvre, j'utiliserai la commande créée par la personne suivante et retournerai le résultat du bot. [Code à citer]
curl -s https://weather.yahoo.co.jp/weather/jp/40/8210/40133/8100001.html | tr '\n' ' ' | sed -e 's/<[^>]*>//g' | grep -oE ' - [0-9].*demain' | tr ' ' '\n' | grep -v ^$ | head -47 | tr '\n' '\t' | awk '{sub("temps", "\ntemps ");sub("Météo", "\nMétéo ");sub("Température (℃)", "\nTempérature (℃)");sub("Humidité (%)", "\nHumidité (%)");sub("Précipitations (mm/h)", "\nPrécipitations (mm/h)");print}'
Une ligne pour obtenir et afficher les prévisions météorologiques avec la commande Linux
Nous ajouterons des fonctions au bot python créé ci-dessous [Ajouter une fonction de conversation au robot slack (créé par python) à l'aide de l'API Talk de Recruit](http://qiita.com/takahirono7/items/197375db24a03cbcd591#%E3%81%93%E3%81%AE%E8 % A8% 98% E4% BA% 8B% E3% 81% A7% E3% 82% 84% E3% 82% 8B% E3% 81% 93% E3% 81% A8)
Créez un nouveau répertoire et un fichier avec une étoile. Suivez l'itinéraire depuis my_mention.py pour accéder à la modulaire confirm_weather.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
★ └─ scripts #Répertoire de stockage des scripts
★ ├─ confirm_weather.py #Script pour obtenir les informations météorologiques cette fois
★ ├─ confirm_today_weather.sh #Un script contenant la commande curl
★ ├─__init__.py
Le my_mention.py actuel devrait ressembler à ceci:
# coding: utf-8
from slackbot.bot import respond_to # @botname:Décodeur qui réagit avec
from slackbot.bot import listen_to #Décodeur qui répond aux remarques dans le canal
from slackbot.bot import default_reply #Décodeur qui réagit lorsqu'il n'y a pas de réponse correspondante
# @respond_to('string')Message au bot
#la chaîne peut être une expression régulière "r'string'」
# @listen_to('string')Messages autres que pour bot dans la chaîne
# @botname:Notez qu'il ne réagit pas
#Réagissez lorsque vous en parlez aux autres
#Peut être exprimé normalement
# @default_reply() DEFAULT_Même fonction que REPLY
#Si vous spécifiez une expression régulière, elle n'atteindra pas les autres décodeurs
#Réagir lors de la mise en correspondance d'une expression régulière
#... Mais est-ce une erreur si je spécifie une expression régulière?
# message.reply('string') @Nom du haut-parleur:Envoyer un message avec une chaîne
# message.send('string')Envoyer la chaîne
# message.react('icon_emoji')Réaction au message de l'orateur(timbre)Faire
#Dans la chaîne':'Je n'ai pas besoin
@respond_to('Mention')
def mention_func(message):
message.reply('Que faites-vous quand vous dites me mentionner') #Mention
@listen_to('Ecoutez')
def listen_func(message):
message.send('Quelqu'un semble avoir posté avec écoute') #Juste un post
message.reply('Tu?') #Mention
import pya3rt
@default_reply()
def send_message(message):
apikey = "XXXXXXXXXXXXXXXXXXXXXXX"
client = pya3rt.TalkClient(apikey)
reply_message = client.talk(message.body['text'])
#Puisque json est retourné au format suivant, retirez la partie réponse
# {'status': 0, 'message': 'ok', 'results': [{'perplexity': 1.2802554542585969, 'reply': 'je ne suis pas sûr'}]}
message.reply(reply_message['results'][0]['reply'] + "Pome" )
Je vais ajouter le code suivant ici
from plugins.scripts.confirm_weather import ConfirmWeather
#Fonction qui vous indique la météo du jour
@respond_to('(^.*aujourd'hui.*Météo.*)')
def confirm_today_weather(message, something):
weather_class = ConfirmWeather()
weather_class.return_today_weather(message)
C'est correct d'écrire le code dans my_mention.py, mais ce sera long, donc je vais spécialiser la fonction que my_mention.py a pour l'enregistrement post-réservation et l'appel de module. Le code de confirmation réel est décrit dans confirm_weather.py et confirm_today_weather.sh sous scripts.
confirm_weather.py
import json
import subprocess
import os
class ConfirmWeather():
def __init__(self):
pass
def return_today_weather(self, message):
#Obtenez le chemin où se trouve ce script
script_dir = os.path.abspath(os.path.dirname(__file__))
cmd = os.path.join(script_dir, "confirm_today_weather.sh")
#Stocker le résultat de l'exécution du script shell placé dans le même répertoire dans une variable
weather_info = subprocess.check_output(cmd)
print(weather_info.decode('utf-8'))
#POST pour relâcher
message.send("Je te dirai la météo aujourd'hui")
message.send(weather_info)
Les points suivants sont importants: Le résultat de l'exécution du script shell dans le même répertoire est stocké dans une variable à l'aide de la méthode check_output du module de sous-processus.
#Stocker le résultat de l'exécution du script shell placé dans le même répertoire dans une variable
weather_info = subprocess.check_output(cmd)
confirm_today_weather.sh La commande one-liner citée au début est stockée dans le même répertoire qu'un fichier de script shell comme indiqué ci-dessous.
-Donner l'autorisation d'exécution avec chmod 755
-Pour modulariser __init __. Py
dans le même répertoire
N'oublie pas
curl -s https://weather.yahoo.co.jp/weather/jp/40/8210/40133/8100001.html | tr '\n' ' ' | sed -e 's/<[^>]*>//g' | grep -oE ' - [0-9].*demain' | tr ' ' '\n' | grep -v ^$ | head -47 | tr '\n' '\t' | awk '{sub("temps", "\ntemps ");sub("Météo", "\nMétéo ");sub("Température (℃)", "\nTempérature (℃)");sub("Humidité (%)", "\nHumidité (%)");sub("Précipitations (mm/h)", "\nPrécipitations (mm/h)");print}'
Exécutez le bot avec python run.py, quel temps fait-il aujourd'hui? Je pense que le résultat au début reviendra quand tu parleras au bot