Après avoir étudié Python3, j'ai créé un Slackbot

introduction

Comme le titre l'indique, j'ai créé un Bot pour Slack après avoir étudié Python. Puisque d'autres personnes ont écrit dans l'article, ce sera un niveau à laisser dans mon propre mémorandum. Il ne décrit pas comment enregistrer Slack et comment utiliser Heroku jusqu'à ce que vous commenciez à utiliser Bot. Puisque le code source est affiché, veuillez signaler toute erreur dans la manière d'écrire le code source.

spécification

À l'aide de l'API Guru Navi, entrez un mot de recherche dans slack et renvoyez l'URL du hit. Si vous tapez "riz Shinagawa Yakitori", l'URL d'une boutique qui ressemble à un restaurant Yakitori à Shinagawa sera retournée.

Environnement etc.

Constitution

slackbot/  ├ plugins/  │ └ slackbot_restapi.py  │ └ restapi.py  │ └ gnaviapi.py  │   └ run.py  └ slackbot_settings.py └ Procfile (fichier pour Heroku) └ runtime.txt (fichier pour Heroku)

la mise en oeuvre

run.py et 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 = 'Qu'est-ce que tu racontes?'

PLUGINS = ['plugins']

Comme écrit dans ici. Exécutez run.py et Slackbot commencera à fonctionner.

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('riz')
def search_restraunt(message):
    """
Recherchez Guru Navi en fonction du message reçu et renvoyez l'URL
    """
    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('Je ne suis pas entré dans Guru Navi, alors cherchez-le à nouveau plus tard ...( ´Д`)y━ ・~~')
            return
        except Exception as other:
            message.send(''.join(other.args))
            return
    else:
        message.send('↓ Je veux que vous cherchiez comme ça ...( ̄Д ̄)Non')
        message.send('Mot-clé Rice place (les caractères sont séparés par des espaces)')
        message.send('Exemple) Rice Shinagawa Yakitori')

Il récupère et traite le contenu saisi dans Slack. La subtile addiction ici était que je ne savais pas comment récupérer le message entré dans Slack. Après quelques recherches,

message.body['text']

J'ai trouvé que je pouvais l'obtenir avec. Divisez le message ramassé avec split () et utilisez l'emplacement et le mot libre comme paramètres d'API.

restapi.py et gnaviapi.py

Je l'ai fait en étudiant les classes Python et l'héritage. Dans restapi.py, c'est une classe qui lance simplement une requête et prend une réponse. Dans gnaviapi.py, nous avons ajouté une méthode pour créer et renvoyer une liste URL uniquement à partir de Response. La notation d'inclusion de liste est pratique, n'est-ce pas? C'était quelque chose de frais.

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):
        """
Appel API
        """
        try:
            self.response_data = requests.get(self.url, params=search_dict)
        except RequestException:
            raise Exception('L'accès à l'API a échoué')

plugins/gnaviapi.py


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

class GnaviApi(RestApi):
    """
Classe d'API Guru Navi
    """
    def __init__(self, url):
        super().__init__(url)

    def url_list(self):
        """
Créez une liste d'URL de restaurant à partir de Response et renvoyez-la.
        """
        json_data = self.response_data.json()
        if 'error' in json_data:
            raise Exception('Je n'ai pas pu le trouver avec ce mot-clé ...(´ ・ ω ・ `)')

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

Résultat d'exécution

C'est comme ça.

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

À la fin

Il semble facile de l'étendre pour que vous puissiez rechercher avec d'autres API telles que ATND et les points. Je pense que j'ai passé plus de temps à me battre pour utiliser Heroku que de l'implémenter en python.

Recommended Posts

Après avoir étudié Python3, j'ai créé un Slackbot
J'ai fait un texte Python
Suite ・ J'ai essayé de créer Slackbot après avoir étudié Python3
J'ai fait un Line-bot avec Python!
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
J'ai fait un programme de gestion de la paie en Python!
J'ai fait une carte hexadécimale avec Python
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait un simulateur de neurones avec Python
〇✕ J'ai fait un jeu
J'ai créé un fichier de dictionnaire python pour Neocomplete
J'ai fait une prévision météo de type bot avec Python.
J'ai créé une application graphique avec Python + PyQt5
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
J'ai créé un programme cryptographique César en Python.
J'ai fait un jeu de cueillette avec Python
Made Mattermost Bot avec Python (+ Flask)
Création du wrapper d'API Qiita Python "qiipy"
J'ai fait un Twitter BOT avec GAE (python) (avec une référence)
J'ai effectué un processus de connexion / déconnexion en utilisant Python's Bottle.
J'ai fait un jeu d'éclairage de sapin de Noël avec Python
J'ai fait un blackjack avec du python!
J'ai créé une application de notification de nouvelles en ligne avec Python
J'ai créé une VM qui exécute OpenCV pour Python
J'ai créé un module Python pour traduire les commentaires
J'ai créé un environnement Python3 sur Ubuntu avec direnv.
J'ai essayé de faire LINE BOT avec Python et Heroku
[Python] J'ai créé un classificateur pour les iris [Machine learning]
J'ai créé une bibliothèque python qui fait rouler le rang
J'ai fait un robot discord
J'ai fait un blackjack avec Python.
J'ai créé wordcloud avec Python.
J'ai implémenté une commande de remplacement de type Vim dans Slackbot #Python
J'ai fait un jeu de frappe simple avec tkinter de Python
J'ai créé un package pour filtrer les séries chronologiques avec python
[VSCode] J'ai créé un extrait d'utilisateur pour Python print f-string
J'ai créé un lecteur de flux rapide en utilisant feedparser en Python
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~
J'ai fait un jeu de puzzle (comme) avec Tkinter of Python
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
J'ai créé un site d'apprentissage C ++
J'ai créé un script de traduction basé sur CUI (2)
J'ai fait un wikipedia gacha bot
J'ai créé ma propre bibliothèque Python
J'ai créé un script de traduction basé sur CUI
[Python] Générer un mot de passe avec Slackbot
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
Étudier Python
J'ai fait un package qui peut comparer des analyseurs morphologiques avec Python
Python> J'ai créé un code de test pour mon propre fichier externe
J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
J'ai créé beaucoup de fichiers pour la connexion RDP avec Python
[Python] J'ai créé une visionneuse d'images avec une fonction de tri simple.