Fügen Sie eine Funktion hinzu, um dem Wetter heute mitzuteilen, dass der Bot locker ist (hergestellt von Python).

Was ist in diesem Artikel zu tun?

Wenn Sie den Bot fragen "Wie ist das Wetter heute?", Werde ich Ihnen das Wetter heute wie folgt mitteilen.

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

Montagemethode

Die Implementierung ist sehr einfach. Wir verwenden den von der folgenden Person erstellten Befehl und geben das Ergebnis vom Bot zurück. [Code zum Zitieren]

curl -s https://weather.yahoo.co.jp/weather/jp/40/8210/40133/8100001.html | tr '\n' ' ' | sed -e 's/<[^>]*>//g' | grep -oE ' - [0-9].*Morgen' | tr ' ' '\n' | grep -v ^$ | head -47 | tr '\n' '\t' | awk '{sub("Zeit", "\nZeit ");sub("Wetter", "\nWetter ");sub("Temperatur (℃)", "\nTemperatur (℃)");sub("Feuchtigkeit (%)", "\nFeuchtigkeit (%)");sub("Niederschlag (mm/h)", "\nNiederschlag (mm/h)");print}'

Eine Zeile zum Abrufen und Anzeigen der Wettervorhersage mit dem Linux-Befehl

Wir werden dem unten erstellten Python-Bot Funktionen hinzufügen [Hinzufügen einer Konversationsfunktion zum Slack Bot (von Python erstellt) mithilfe der Talk-API von 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)

Dateistruktur und Verzeichnis

Erstellen Sie ein neues Verzeichnis und eine Datei mit einem Stern. Nehmen Sie die Route von my_mention.py, um auf die modulare Datei verify_weather.py zuzugreifen

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
★   └─ scripts           #Skript-Speicherverzeichnis
★       ├─ confirm_weather.py     #Skript, um diesmal die Wetterinformationen zu erhalten
★       ├─ confirm_today_weather.sh     #Ein Skript, das den Befehl curl enthält
★       ├─__init__.py

Die aktuelle my_mention.py sollte folgendermaßen aussehen:

# coding: utf-8

from slackbot.bot import respond_to     # @botname:Decoder, der mit reagiert
from slackbot.bot import listen_to      #Decoder, der auf kanalinterne Bemerkungen reagiert
from slackbot.bot import default_reply  #Decoder, der reagiert, wenn keine entsprechende Antwort erfolgt

# @respond_to('string')Nachricht an den Bot
#Zeichenfolge kann ein regulärer Ausdruck sein "r'string'」
# @listen_to('string')Andere Beiträge als Bot im Kanal
#                           @botname:Beachten Sie, dass es nicht reagiert
#Reagieren Sie, wenn Sie anderen gegenüber erwähnen
#Kann normal ausgedrückt werden
# @default_reply()          DEFAULT_Gleiche Funktion wie ANTWORT
#Wenn Sie einen regulären Ausdruck angeben, werden andere Decoder nicht getroffen
#Reagieren Sie, wenn Sie einem regulären Ausdruck entsprechen
#... Aber ist es ein Fehler, wenn ich einen regulären Ausdruck spezifiziere?

# message.reply('string')   @Name des Sprechers:Nachricht mit String senden
# message.send('string')Zeichenfolge senden
# message.react('icon_emoji')Reaktion auf die Nachricht des Sprechers(Stempel)Machen
#In der Zeichenfolge':'Ich brauche nicht
@respond_to('Erwähnen')
def mention_func(message):
    message.reply('Was machst du, wenn du mir Erwähnung sagst?') #Erwähnen

@listen_to('Hör mal zu')
def listen_func(message):
    message.send('Jemand scheint mit listen gepostet zu haben')      #Nur ein Beitrag
    message.reply('Du?')                           #Erwähnen

import pya3rt
@default_reply()
def send_message(message):
    apikey = "XXXXXXXXXXXXXXXXXXXXXXX"
    client = pya3rt.TalkClient(apikey)
    reply_message = client.talk(message.body['text'])
#Da json im folgenden Format zurückgegeben wird, nehmen Sie den Antwortteil heraus
# {'status': 0, 'message': 'ok', 'results': [{'perplexity': 1.2802554542585969, 'reply': 'ich bin mir nicht sicher'}]}
    message.reply(reply_message['results'][0]['reply'] + "Pome" )

Ich werde hier den folgenden Code hinzufügen


from plugins.scripts.confirm_weather import ConfirmWeather
#Eine Funktion, die Ihnen das Wetter heute anzeigt
@respond_to('(^.*heute.*Wetter.*)')
def confirm_today_weather(message, something):
    weather_class = ConfirmWeather()
    weather_class.return_today_weather(message)

Es ist in Ordnung, den Code in my_mention.py zu schreiben, aber es wird lange dauern, daher werde ich mich auf die Funktion spezialisieren, die my_mention.py für die Registrierung nach der Reservierung und den Modulaufruf hat. Der tatsächliche Bestätigungscode wird in verify_weather.py und verify_today_weather.sh unter Skripten beschrieben.

confirm_weather.py

import json
import subprocess
import os


class ConfirmWeather():

    def __init__(self):
    pass

    def return_today_weather(self, message):
#Rufen Sie den Pfad ab, in dem sich dieses Skript befindet
        script_dir = os.path.abspath(os.path.dirname(__file__))
        cmd = os.path.join(script_dir, "confirm_today_weather.sh")
#Speichern Sie das Ausführungsergebnis des Shell-Skripts im selben Verzeichnis in einer Variablen
        weather_info = subprocess.check_output(cmd)
        print(weather_info.decode('utf-8'))
#POST zum Nachlassen
        message.send("Ich werde dir heute das Wetter erzählen")
        message.send(weather_info)

Folgende Punkte sind wichtig: Das Ausführungsergebnis des Shell-Skripts im selben Verzeichnis wird mithilfe der check_output-Methode des Unterprozessmoduls in einer Variablen gespeichert.

#Speichern Sie das Ausführungsergebnis des Shell-Skripts im selben Verzeichnis in einer Variablen
        weather_info = subprocess.check_output(cmd)

confirm_today_weather.sh Der am Anfang angegebene Einzeilerbefehl wird im selben Verzeichnis wie eine Shell-Skriptdatei gespeichert (siehe unten).

-Geben Sie die Ausführungserlaubnis mit chmod 755

curl -s https://weather.yahoo.co.jp/weather/jp/40/8210/40133/8100001.html | tr '\n' ' ' | sed -e 's/<[^>]*>//g' | grep -oE ' - [0-9].*Morgen' | tr ' ' '\n' | grep -v ^$ | head -47 | tr '\n' '\t' | awk '{sub("Zeit", "\nZeit ");sub("Wetter", "\nWetter ");sub("Temperatur (℃)", "\nTemperatur (℃)");sub("Feuchtigkeit (%)", "\nFeuchtigkeit (%)");sub("Niederschlag (mm/h)", "\nNiederschlag (mm/h)");print}'

Führen Sie den Bot mit Python run.py aus. Wie ist das Wetter heute? Ich denke, dass das Ergebnis am Anfang zurückkommt, wenn Sie mit dem Bot sprechen

Recommended Posts

Fügen Sie eine Funktion hinzu, um dem Wetter heute mitzuteilen, dass der Bot locker ist (hergestellt von Python).
Fügen Sie dem Slack Bot (erstellt von Python) mithilfe der Talk-API von Recruit eine Konversationsfunktion hinzu
Ich habe eine Funktion erstellt, um die Bewegung eines zweidimensionalen Arrays (Python) zu sehen.
Ich habe eine Funktion erstellt, um das Modell von DCGAN zu überprüfen
Kündigen Sie die Wettervorhersage (Regen usw.) von DM als Teil der Funktion des Bots an
Bitten Sie den Bot, Ihnen das Wetter (Niederschlagsinformationen) mithilfe der Wetterinformations-API (YOLP) mitzuteilen, die von Yahoo ~ Slack Bot Development mit Python ④ ~ bereitgestellt wird
Ich habe eine Funktion zum Trimmen des Bildes von Python openCV erstellt. Verwenden Sie sie daher bitte.
[Python3] Definition eines Dekorators, der die Ausführungszeit einer Funktion misst
Ich habe einen schlaffen Bot gemacht, der mich über die Temperatur informiert
[Python] Eine einfache Funktion zum Ermitteln der Mittelkoordinaten eines Kreises
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
Python: Ich möchte die Verarbeitungszeit einer Funktion genau messen
Holen Sie sich den Aufrufer einer Funktion in Python
[Circuit x Python] So ermitteln Sie die Übertragungsfunktion eines Schaltkreises mit Lcapy
[Python] So sortieren Sie nach dem N-ten M-ten Element eines mehrdimensionalen Arrays
Ich habe ein Skript erstellt, das das aktive Fenster mit win32gui von Python aufzeichnet
Python Hinweis: Das Rätsel, einer Variablen eine Variable zuzuweisen
Fügen Sie die Funktion hinzu, um den Mindestwert (min) zu dem von Python erstellten Stapel zurückzugeben, aber push / pop / min ist das grundlegende O (1) !!
Versuchen Sie, die Funktionsliste des Python> os-Pakets abzurufen
[Python] So erstellen Sie eine Liste von Zeichenfolgen Zeichen für Zeichen
Erstellen Sie einen Mastodon-Bot mit einer Funktion, die automatisch mit Python antwortet
Fügen Sie Heatrapy eine Funktion hinzu, die Wärme + Wärme bei Temperatur übertragen kann
[Python] Ich habe versucht, LINE BOT die Wettervorhersage beantworten zu lassen
Anhängen an den Python-Prozess des SSH-Ziels und Debuggen
Django super Einführung von Python-Anfängern! Teil 6 Ich habe versucht, die Login-Funktion zu implementieren
Ich habe eine Klasse erstellt, um das Analyseergebnis von MeCab in ndarray mit Python zu erhalten
Verfahren von der Umgebungskonstruktion bis zum Betriebstest von testinfra, einem von Python erstellten Testwerkzeug für die Serverumgebung
So bestimmen Sie die Existenz eines Selenelements in Python
Ich möchte das Wetter mit LINE bot feat.Heroku + Python wissen
[Einführung in Python] So teilen Sie eine Zeichenfolge mit der Funktion split
So überprüfen Sie die Speichergröße einer Variablen in Python
So überprüfen Sie die Speichergröße eines Wörterbuchs in Python
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
[Python] Machen Sie die Funktion zu einer Lambda-Funktion
Impressionen von Touch, einem von Python erstellten Datenvisualisierungstool
Erstellen Sie eine Funktion, um den Inhalt der Datenbank in Go abzurufen
Ich habe einen Discord-Chat-Lesebot erstellt, indem ich das Erscheinungsbild nachgeahmt habe
[Python] Ein Hinweis, dass ich das Verhalten von matplotlib.pyplot zu verstehen begann
Die Geschichte des Erstellens eines Bots, der aktive Mitglieder in einem bestimmten Slack-Kanal mit Python anzeigt
Ich fand es heraus, indem ich ein Python-Skript erstellte, um Radiko aufzuzeichnen, während ich den Code der Vorgänger las
Django super Einführung von Python-Anfängern! Teil 3 Ich habe versucht, die Vererbungsfunktion für Vorlagendateien zu verwenden
Django super Einführung von Python-Anfängern! Teil 2 Ich habe versucht, die praktischen Funktionen der Vorlage zu nutzen
Erstellen Sie einen Bot, der die Anzahl der Personen, die für das neue Corona-Virus in Tokio positiv sind, an Slack sendet
[Python] Erklärt anhand eines konkreten Beispiels, wie die Bereichsfunktion verwendet wird
[Python] Ein Programm, das die Anzahl der gepaarten Socken berechnet
Ich bin verblüfft über das Verhalten von filter () aufgrund verschiedener Versionen von Python
Verschiedene Methoden zum numerischen Erstellen der Umkehrfunktion einer bestimmten Funktion Einführung
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
[NNabla] Hinzufügen einer Quantisierungsschicht zur mittleren Schicht eines trainierten Modells
So erstellen Sie einen Wrapper, der die Signatur der zu umschließenden Funktion beibehält
Ich habe versucht, die Beschleunigung von Python durch Cython zu verifizieren und zu analysieren
[Einführung in Python] So schreiben Sie eine Zeichenfolge mit der Formatierungsfunktion
Ermitteln Sie den Mindestwert der Funktion mithilfe der Partikelgruppenoptimierungsmethode (PSO).
Python-Code zur Bestimmung der monatlichen Signale für Investitionen mit relativer Stärke