Wenn Sie den Bot fragen "Wie ist das Wetter heute?", Werde ich Ihnen das Wetter heute wie folgt mitteilen.
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)
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