Client API Slack simple réalisé avec Python

Je pense que le client Python officiel pour l'API Slack est bien fait, mais pour une raison quelconque, j'ai besoin d'utiliser l'API Slack de Python sans l'utiliser. J'ai écrit mon propre client Slack d'une manière très simple.

import urllib.request
import json

class SlackAPI:
    
    def __init__(self, token: str, api_base: str = 'https://slack.com/api/'):
        self.token = token
        self.api_base = api_base
    
    def __call__(self, name: str, charset: str = 'utf-8', **kwargs) -> dict:
        req = urllib.request.Request(
            url = self.api_base + name,
            data = json.dumps(kwargs).encode(charset),
            headers = {
                'Authorization': f'Bearer {self.token}',
                'Content-Type': f'application/json; charset={charset}',
            })
        with urllib.request.urlopen(req) as res:
            return json.load(res)
    
    def __getitem__(self, key: str):
        return lambda **kwargs: self(key, **kwargs)

Vous pouvez l'utiliser comme ça.

token = 'xoxb-000000000000-0000000000000-xxxxxxxxxxxxxxxxxxxxxxxx'
slack_api = SlackAPI(token)
#Obtenir la liste des utilisateurs
slack_api['users.list']()
#Envoyer un message
slack_api['chat.postMessage'](channel='XXXXXXXXX',text='Yo!',as_user=True)

Bien sûr, vous ne pouvez pas utiliser l'API RTM, mais s'il s'agit d'une API Web, vous pouvez probablement le faire avec cela. (Je n'ai pas essayé tant de choses, alors veuillez commenter si vous ne pouvez pas exécuter cette API.)

Post-scriptum (2020.05.18)

[Comment](# comment-a97ebf6ddf92cfa5447a) a souligné que certaines API ne prennent pas en charge le corps de la requête JSON, j'ai donc essayé de le prendre en charge.

import urllib.request
import json

class SlackAPI:

    def __init__(self, token: str, api_base: str = 'https://slack.com/api/'):
        self.token = token
        self.api_base = api_base

    def __getitem__(self, key: str):
        return lambda **kwargs: self.post(key, **kwargs)

    def get(self, name: str, **kwargs) -> dict:
        req = urllib.request.Request(
            url = self.api_base + name + '?' + urllib.parse.urlencode(kwargs),
            headers = {
                'Authorization': f'Bearer {self.token}',
            })
        with urllib.request.urlopen(req) as res:
            return json.load(res)

    def post(self, name: str, charset: str = 'utf-8', **kwargs) -> dict:
        req = urllib.request.Request(
            url = self.api_base + name,
            data = json.dumps(kwargs).encode(charset),
            headers = {
                'Authorization': f'Bearer {self.token}',
                'Content-Type': f'application/json; charset={charset}',
            })
        with urllib.request.urlopen(req) as res:
            return json.load(res)

Si vous utilisez explicitement la méthode get, envoyez les données avec ʻapplication / x-www-form-urlencoded`.

slack_api.get('conversations.list', limit=20)

Recommended Posts

Client API Slack simple réalisé avec Python
API de reconnaissance faciale sans serveur conçue avec Python
J'ai fait un simple blackjack avec Python
[Python] Mention à plusieurs personnes avec l'API de Slack
Utiliser l'API Trello avec python
Utiliser l'API Twitter avec Python
J'ai fait un blackjack avec du python!
Publiez sur Slack avec Python 3
API Web avec Python + Falcon
Exploration avec Python et Twitter API 1 - Fonction de recherche simple
Appelez l'API avec python3.
Utiliser l'API subsonique avec python3
J'ai fait un blackjack avec Python.
Client IRC simple avec python
Othello fait avec python (comme GUI)
J'ai créé wordcloud avec Python.
[Vagrant] Configurer un serveur API simple avec python
J'ai essayé de frapper l'API avec le client python d'echonest
Client de publication Twitter créé avec Flask avec une fonction de connexion simple
J'ai fait un jeu de frappe simple avec tkinter de Python
J'ai essayé de créer LINE-bot avec Python + Flask + ngrok + LINE Messaging API
J'ai créé une application de livre simple avec python + Flask ~ Introduction ~
Obtenez des données de l'API d'analyse avec le client API Google pour python
Jouez avec l'API de données YouTube v3 à l'aide du client Python de l'API Google
Bases de SNS Python faites avec Flask
Créer Awaitable avec l'API Python / C
Exécutez Rotrics DexArm avec l'API Python
Numer0n avec des objets fabriqués avec Python
Quine Post avec l'API Qiita (Python)
J'ai fait une loterie avec Python.
Accédez à l'API Etherpad-lite avec Python
Développement de jeux Othello avec Python
Automatisez des tâches simples avec Python Part0
Client de recherche Twitter fait avec bouteille
J'ai créé un démon avec Python
J'ai fait un circuit simple avec Python (AND, OR, NOR, etc.)
Une histoire sur l'ajout d'une API REST à un démon créé avec Python
[Python] J'ai créé une visionneuse d'images avec une fonction de tri simple.
J'ai essayé ChatOps avec Slack x API Gateway x Lambda (Python) x RDS
Collecter des informations sur Twitter avec Python (API Twitter)
Votre propre client Twitter réalisé avec Django
Lecteur RSS simple réalisé avec Django
Obtenez des données alimentaires avec l'API Amazon (Python)
Type de téléchargement de partage HTTP réalisé avec Python
Automatisez des tâches simples avec Python Part1 Scraping
J'ai fait un compteur de caractères avec Python
Apprentissage automatique avec python (2) Analyse de régression simple
Utiliser Amazon Simple Notification Service avec Python
Ecrire un client TCP avec Python Twisted
[Python] Créez rapidement une API avec Flask
J'ai fait une carte hexadécimale avec Python
"Première recherche élastique" commençant par un client python
[Python] Obtenez des informations sur le package Python avec l'API PyPI
J'ai fait un jeu rogue-like avec Python
J'ai créé un fichier de configuration avec Python
J'ai fait un simulateur de neurones avec Python
Application Othello (application iOS) réalisée avec Python (Kivy)
API REST du modèle réalisé avec Python avec Watson Machine Learning (édition CP4D)
[Python] Python et sécurité-② Outil d'analyse de port réalisé avec Python