Ajouter une fonction pour indiquer la météo d'aujourd'hui au bot slack (fabriqué par python)

Que faire dans cet article

Si vous demandez au bot "Quel temps fait-il aujourd'hui?", Je vous dirai la météo d'aujourd'hui comme suit.

スクリーンショット 2017-08-17 16.27.56.png

Méthode de montage

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)

Structure des fichiers et répertoire

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

Recommended Posts

Ajouter une fonction pour indiquer la météo d'aujourd'hui au bot slack (fabriqué par python)
Ajouter une fonction de conversation au robot slack (créé par python) à l'aide de l'API Talk de Recruit
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
J'ai fait une fonction pour vérifier le modèle de DCGAN
Annoncer les prévisions météorologiques (pluie, etc.) par DM dans le cadre de la fonction de bot
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 ④ ~
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.
[Python3] Définition d'un décorateur qui mesure le temps d'exécution d'une fonction
J'ai fait un bot mou qui m'informe de la température
[Python] Une fonction simple pour trouver les coordonnées du centre d'un cercle
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
Récupérer l'appelant d'une fonction en Python
[Circuit x Python] Comment trouver la fonction de transfert d'un circuit en utilisant Lcapy
[python] Comment trier par le Nth Mth élément d'un tableau multidimensionnel
J'ai fait un script pour enregistrer la fenêtre active en utilisant win32gui de Python
Note Python: Le mystère de l'attribution d'une variable à une variable
Ajoutez la fonction pour renvoyer la valeur minimale (min) à la pile faite par Python, mais push / pop / min est de base O (1) !!
Essayez d'obtenir la liste des fonctions du paquet Python> os
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
Créez un bot Mastodon avec une fonction pour répondre automatiquement avec Python
Ajoutez une fonction à heatrapy qui peut transférer chaleur + chaleur à température
[Python] J'ai essayé de laisser LINE BOT répondre aux prévisions météo
Attacher au processus Python de la destination SSH et déboguer
Django super introduction par les débutants Python! Partie 6 J'ai essayé d'implémenter la fonction de connexion
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
Procédure de la construction de l'environnement au test de fonctionnement de testinfra, un outil de test d'environnement de serveur réalisé par Python
Comment déterminer l'existence d'un élément sélénium en Python
Je veux connaître la météo avec LINE bot avec Heroku + Python
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
Comment vérifier la taille de la mémoire d'une variable en Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Une fonction qui mesure le temps de traitement d'une méthode en python
[Python] Faire de la fonction une fonction lambda
Impressions de toucher Dash, un outil de visualisation de données réalisé par python
Créez une fonction pour obtenir le contenu de la base de données dans Go
J'ai créé un bot de lecture de chat Discord en imitant l'apparence
[python] Une note que j'ai commencé à comprendre le comportement de matplotlib.pyplot
L'histoire de la création d'un Bot qui affiche les membres actifs dans un canal spécifique de Slack avec Python
J'ai découvert en créant un script python pour enregistrer radiko tout en lisant le code des prédécesseurs
Django super introduction par les débutants Python! Partie 3 J'ai essayé d'utiliser la fonction d'héritage de fichier de modèle
Django super introduction par les débutants Python! Partie 2 J'ai essayé d'utiliser les fonctions pratiques du modèle
Créez un bot qui publie sur Slack le nombre de personnes positives pour le nouveau virus corona à Tokyo
[Python] Explique comment utiliser la fonction range avec un exemple concret
[Python] Un programme qui calcule le nombre de chaussettes jumelées
Je suis abasourdi par le comportement de filter () en raison des différentes versions de Python
Diverses méthodes pour créer numériquement la fonction inverse d'une certaine fonction Introduction
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
[NNabla] Comment ajouter une couche de quantification à la couche intermédiaire d'un modèle entraîné
Comment créer un wrapper qui préserve la signature de la fonction à envelopper
J'ai essayé de vérifier et d'analyser l'accélération de Python par Cython
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
Trouvez la valeur minimale de la fonction par la méthode d'optimisation du groupe de particules (PSO)
Code Python pour déterminer les signaux mensuels pour les investissements de force relative