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.
À 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.
slackbot/ ├ plugins/ │ └ slackbot_restapi.py │ └ restapi.py │ └ gnaviapi.py │ └ run.py └ slackbot_settings.py └ Procfile (fichier pour Heroku) └ runtime.txt (fichier pour Heroku)
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.
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']]
C'est comme ça.
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