Nachdem ich Python3 studiert hatte, machte ich einen Slackbot

Einführung

Wie der Titel schon sagt, habe ich nach dem Studium von Python einen Bot für Slack gemacht. Da andere Leute in dem Artikel geschrieben haben, wird es eine Ebene sein, die ich in meinem eigenen Memorandum belassen werde. Es wird nicht beschrieben, wie Sie Slack registrieren und Heroku verwenden, bis Sie Bot verwenden. Da der Quellcode veröffentlicht ist, weisen Sie bitte auf Fehler beim Schreiben des Quellcodes hin.

Spezifikation

Geben Sie mithilfe der Guru Navi-API ein Suchwort in Slack ein und geben Sie die Treffer-URL zurück. Wenn Sie "Reis Shinagawa Yakitori" eingeben, wird die URL eines Geschäfts zurückgegeben, das wie ein Yakitori-Restaurant in Shinagawa aussieht.

Umwelt etc.

Verfassung

slackbot/  ├ plugins/  │ └ slackbot_restapi.py  │ └ restapi.py  │ └ gnaviapi.py  │   └ run.py  └ slackbot_settings.py └ Procfile (Heroku-Datei) └ runtime.txt (Datei für Heroku)

Implementierung

run.py und slackbot_settings.py

run.py


"""Slack Bot Program."""
# coding: utf-8

from slackbot.bot import Bot

def main():
    """
    Slackbot
    """
    bot = Bot()
    bot.run()

if __name__ == '__main__':
    main()

slackbot_settings.py


"""
Configuration file for slackbot
"""
API_TOKEN = 'YOUR_API_TOKEN'

DEFAULT_REPLY = 'Worüber redest du?'

PLUGINS = ['plugins']

Wie in [hier] geschrieben (https://github.com/lins05/slackbot). Führen Sie run.py aus und Slackbot beginnt zu arbeiten.

slackbot_restapi.py

plugins/slackbot_restapi.py


"""
Plugin Program
"""
from requests.exceptions import RequestException
from slackbot.bot import listen_to
from plugins.gnaviapi import GnaviApi

@listen_to('Reis')
def search_restraunt(message):
    """
Suchen Sie anhand der empfangenen Nachricht nach Guru Navi und geben Sie die URL zurück
    """
    gnavi = GnaviApi('https://api.gnavi.co.jp/RestSearchAPI/20150630/')
    key = 'YOUR_API_KEY'

    search_word = message.body['text'].split()

    if len(search_word) == 3:
        params = {
            'keyid': key,
            'format': 'json',
            'address': search_word[1],
            'freeword': search_word[2]
        }
        try:
            gnavi.api_request(params)
            for rest_url in gnavi.url_list():
                message.send(rest_url)
        except RequestException:
            message.send('Ich bin nicht in Guru Navi eingestiegen, also suche es später noch einmal ...( ´Д`)y━ ━~~')
            return
        except Exception as other:
            message.send(''.join(other.args))
            return
    else:
        message.send('↓ Ich möchte, dass Sie so suchen ...( ̄Д ̄)Nein')
        message.send('Reisplatz-Schlüsselwort (Zeichen werden durch Leerzeichen getrennt)')
        message.send('Beispiel) Reis Shinagawa Yakitori')

Es nimmt den in Slack eingegebenen Inhalt auf und verarbeitet ihn. Die subtile Sucht hier war, dass ich nicht wusste, wie ich die in Slack eingegebene Nachricht aufnehmen sollte. Nach ein wenig Recherche

message.body['text']

Ich fand, dass ich es mit bekommen kann. Teilen Sie die aufgenommene Nachricht mit split () und verwenden Sie den Speicherort und das freie Wort als API-Parameter.

restapi.py und gnaviapi.py

Ich habe es geschafft, indem ich Python-Klassen und Vererbung studiert habe. In restapi.py ist es eine Klasse, die nur eine Anfrage auslöst und eine Antwort entgegennimmt. In gnaviapi.py haben wir eine Methode hinzugefügt, um eine Nur-URL-Liste von Response zu erstellen und zurückzugeben. Die Notation der Listeneinbeziehung ist praktisch, nicht wahr? Es war etwas Frisches.

plugins/restapi.py


"""
REST API CLASS
"""
# -*- coding: utf-8 -*-
import requests
from requests.exceptions import RequestException

class RestApi():
    """
    REST API CLASS
    """
    def __init__(self, url):
        self.url = url
        self.response_data = None

    def api_request(self, search_dict):
        """
API-Aufruf
        """
        try:
            self.response_data = requests.get(self.url, params=search_dict)
        except RequestException:
            raise Exception('API-Zugriff fehlgeschlagen')

plugins/gnaviapi.py


"""
Guru Navi API
"""
# -*- coding: utf-8 -*-
from plugins.restapi import RestApi

class GnaviApi(RestApi):
    """
Guru Navi API-Klasse
    """
    def __init__(self, url):
        super().__init__(url)

    def url_list(self):
        """
Erstellen Sie aus Response eine Liste mit Restaurant-URLs und geben Sie diese zurück.
        """
        json_data = self.response_data.json()
        if 'error' in json_data:
            raise Exception('Ich konnte es mit diesem Schlüsselwort nicht finden ...(´ ・ ω ・ `)')

        return [rest_data['url'] for rest_data in json_data['rest']]

Ausführungsergebnis

Es ist so.

スクリーンショット 2017-05-16 1.45.09.png

Am Ende

Es scheint einfach zu erweitern, so dass Sie mit anderen APIs wie ATND und Punkten suchen können. Ich glaube, ich habe mehr Zeit damit verbracht, Heroku zu verwenden, als es in Python zu implementieren.

Recommended Posts

Nachdem ich Python3 studiert hatte, machte ich einen Slackbot
Ich habe einen Python-Text gemacht
Fortsetzung ・ Ich habe versucht, Slackbot zu erstellen, nachdem ich Python3 studiert habe
Ich habe einen Line-Bot mit Python gemacht!
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
Ich habe ein Pay-Management-Programm in Python erstellt!
Ich habe mit Python eine Hex-Map erstellt
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe mit Python einen Neuronensimulator erstellt
〇✕ Ich habe ein Spiel gemacht
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Ich habe mit Python eine Bot-Wettervorhersage gemacht.
Ich habe eine GUI-App mit Python + PyQt5 erstellt
Ich habe versucht, mit Python einen Twitter-Blocker für faule Mädchen zu machen
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Ich habe mit Python ein Bin-Picking-Spiel gemacht
Mattermost Bot mit Python gemacht (+ Flask)
Python Qiita API Wrapper "qiipy" gemacht
Ich habe einen Twitter BOT mit GAE (Python) gemacht (mit einer Referenz)
Ich habe einen Anmelde- / Abmeldevorgang mit Python's Bottle durchgeführt.
Ich habe mit Python ein Weihnachtsbaum-Beleuchtungsspiel gemacht
Ich habe einen Blackjack mit Python gemacht!
Ich habe mit Python eine App für die Benachrichtigung über Netznachrichten erstellt
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Ich habe ein Python-Modul erstellt, um Kommentare zu übersetzen
Ich habe eine Python3-Umgebung unter Ubuntu mit direnv erstellt.
Ich habe versucht, LINE BOT mit Python und Heroku zu machen
[Python] Ich habe einen Klassifikator für Iris erstellt [Maschinelles Lernen]
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat
Ich habe einen Zwietrachtbot gemacht
Ich habe mit Python einen Blackjack gemacht.
Ich habe Wordcloud mit Python gemacht.
Ich habe einen Vim-ähnlichen Ersetzungsbefehl in Slackbot #Python implementiert
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Ich habe ein Paket erstellt, um Zeitreihen mit Python zu filtern
[VSCode] Ich habe ein Benutzer-Snippet für Python-Druck-F-String erstellt
Ich habe einen schnellen Feed-Reader mit Feedparser in Python erstellt
Ich habe eine einfache Buch-App mit Python + Flask ~ Introduction ~ erstellt
Ich habe mit Tkinter of Python ein Puzzlespiel (wie) gemacht
Ich habe Chatbot mit LINE Messaging API und Python erstellt
Ich habe eine C ++ - Lernseite erstellt
Ich habe ein CUI-basiertes Übersetzungsskript erstellt (2)
Ich habe einen Wikipedia Gacha Bot gemacht
Ich habe meine eigene Python-Bibliothek erstellt
Ich habe ein CUI-basiertes Übersetzungsskript erstellt
[Python] Generiere ein Passwort mit Slackbot
[Python] Ich habe einen Line-Bot erstellt, der zufällig nach englischen Wörtern fragt
Ich habe eine einfache Schaltung mit Python gemacht (AND, OR, NOR, etc.)
Ich habe eine Bibliothek erstellt, die Konfigurationsdateien mit Python einfach lesen kann
Python studieren
Ich habe ein Paket erstellt, das morphologische Analysegeräte mit Python vergleichen kann
Python> Ich habe einen Testcode für meine eigene externe Datei erstellt
Ich habe mit Python, Flask und Heroku ein Nyanko-Tweet-Formular erstellt
Ich habe viele Dateien für die RDP-Verbindung mit Python erstellt
[Python] Ich habe einen Bildbetrachter mit einer einfachen Sortierfunktion erstellt.