Faisons un plugin Errbot

Le mécanisme qui correspond au script hubot de Hubot s'appelle un plugin dans Errbot.

Ici a des plugins tiers, Je vais y arriver parce que c'est un gros problème.

Partie de base du plugin

Le plugin nécessite deux fichiers.

Le fichier de plug-in est un ** fichier de métadonnées de plug-in **. Il décrit la spécification de la version de Python, l'explication lors de l'exécution de la commande d'aide, etc.

Le module python est une ** entité plugin **. Écrivez la logique ici.

Plugin juste pour répondre

hello_plugin.png

hello.plug


[Core]
Name = Hello
Module = hello

[Python]
Version = 2+

[Documentation]
Description = Hello plugin

hello.py


# -*- coding:utf8 -*-
from __future__ import division, print_function, absolute_import
from errbot import BotPlugin, botcmd


class Hello(BotPlugin):
    @botcmd
    def hello(self, msg, args):
        return 'Hello world!'

Un peu plus de détails sur le contenu

La classe d'entité du plugin hérite de BotPlugin. Il effectue divers traitements au moment de l'initialisation, mais je vais l'omettre cette fois. Le nom de la méthode décoré avec le décorateur botcmd devient la commande telle quelle.

La méthode qui devient la commande bot nécessite deux arguments.

Si la méthode décorée en botcmd renvoie une chaîne, elle parlera tel quel. C'est facile et agréable.

Plugin qui indique la météo

bl549uY4BE.gif

weather.py


# -*- coding:utf8 -*-
from __future__ import division, print_function, absolute_import
from errbot import BotPlugin, botcmd
import requests
from xml.etree import ElementTree


class Weather(BotPlugin):
    WEATHER_HACK_AREA_URL = \
        'http://weather.livedoor.com/forecast/rss/primary_area.xml'
    WEATHER_HACK_API_URL = \
        'http://weather.livedoor.com/forecast/webservice/json/v1?'

    @botcmd
    def weather(self, msg, args):
        #Trouvez la ville spécifiée dans l'argument
        city_id = self.find_city_id(args)
        if city_id is None:
            return u'{}Est une zone non identifiée'.format(args)
        resp = requests.get(
            self.WEATHER_HACK_API_URL,
            {'city': city_id}
        )
        wt_json = resp.json()
        return u'{}: {}Est{}'.format(
            wt_json['title'],
            wt_json['forecasts'][0]['dateLabel'],
            wt_json['forecasts'][0]['telop']
        )

    def find_city_id(self, city_name):
        """Trouvez une ville qui renvoie la météo avec l'API de Livedoor
        """
        resp = requests.get(self.WEATHER_HACK_AREA_URL)
        tree = ElementTree.fromstring(resp.content)
        cities = {
            elm.attrib['title']: elm.attrib['id']
            for elm in tree.findall('.//city')
        }
        return cities.get(city_name, None)

À ce stade, args est à peu près considéré comme le nom de la ville et la météo est renvoyée, "Si vous lancez plusieurs villes par division spatiale, divisez-les et renvoyez la météo de chaque ville ensemble." C'est également possible. Si vous utilisez ArgumentParser, vous pouvez gérer les arguments de manière flexible, il semble donc qu'il existe plusieurs possibilités.

Recommended Posts

Faisons un plugin Errbot
Faisons un plug-in backend pour Errbot
Créer une boîte de publication MQTT
Faisons Othello avec wxPython
Créer une boîte d'abonné MQTT
Créer un chatbot Slack avec Errbot
Faisons une chemise IoT avec Lambda, Kinesis, Raspberry Pi [Partie 1]
Faisons une rumba distante [Matériel]
Faisons une interface graphique avec python.
Faisons un service de vente au comptant 2
Faisons une rupture de bloc avec wxPython
Créer un diagramme composite RVB 3 couleurs
Faisons un service de vente au comptant 1
Faisons l'IA d'Othello avec Chainer-Part 1-
Faites la programmation Let et Let's One-Line
[Blender] Comment créer un plug-in Blender
Faisons un graphe avec python! !!
Faisons un spacon avec xCAT
Faisons l'IA d'Othello avec Chainer-Part 2-
Créer un exe Scrapy avec Pyinstaller
Faisons un service de vente au comptant 3
Créer une boîte de publication MQTT Partie 2
Créons un modèle de reconnaissance d'image avec vos propres données et jouons!