Einfacher Slack API-Client mit Python

Ich denke, der Offizielle Python-Client für Slack-API ist gut gemacht, aber aus irgendeinem Grund muss ich die Slack-API von Python verwenden, anstatt sie zu verwenden. Ich habe meinen eigenen Slack-Client auf supereinfache Weise geschrieben.

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)

Sie können es so verwenden.

token = 'xoxb-000000000000-0000000000000-xxxxxxxxxxxxxxxxxxxxxxxx'
slack_api = SlackAPI(token)
#Benutzerliste abrufen
slack_api['users.list']()
#Sende eine Nachricht
slack_api['chat.postMessage'](channel='XXXXXXXXX',text='Yo!',as_user=True)

Natürlich können Sie die RTM-API nicht verwenden, aber wenn es sich um eine Web-API handelt, können Sie dies wahrscheinlich damit tun. (Ich habe noch nicht so viele Dinge ausprobiert. Bitte kommentieren Sie, wenn Sie diese API nicht ausführen können.)

Nachtrag (2020.05.18)

[Kommentar](# comment-a97ebf6ddf92cfa5447a) wies darauf hin, dass einige APIs den JSON-Anforderungshauptteil nicht unterstützen, daher habe ich versucht, ihn zu unterstützen.

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)

Wenn Sie explizit die Methode "get" verwenden, senden Sie die Daten mit "application / x-www-form-urlencoded".

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

Recommended Posts

Einfacher Slack API-Client mit Python
Serverlose Gesichtserkennungs-API mit Python
Ich habe mit Python einen einfachen Blackjack gemacht
[Python] Erwähnen Sie mit der Slack-API mehrere Personen
Verwenden Sie die Trello-API mit Python
Verwenden Sie die Twitter-API mit Python
Ich habe einen Blackjack mit Python gemacht!
Post to Slack mit Python 3
Web-API mit Python + Falcon
Crawlen mit Python und Twitter API 1-Einfache Suchfunktion
Rufen Sie die API mit python3 auf.
Verwenden Sie die Unterschall-API mit Python3
Ich habe mit Python einen Blackjack gemacht.
Einfacher IRC-Client mit Python
Othello gemacht mit Python (wie GUI)
Ich habe Wordcloud mit Python gemacht.
[Vagrant] Richten Sie einen einfachen API-Server mit Python ein
Ich habe versucht, die API mit dem Python-Client von echonest zu erreichen
Twitter-Posting-Client mit Flask mit einfacher Anmeldefunktion
Ich habe ein einfaches Tippspiel mit tkinter of Python gemacht
Ich habe versucht, LINE-Bot mit Python + Flask + ngrok + LINE Messaging API zu erstellen
Ich habe eine einfache Buch-App mit Python + Flask ~ Introduction ~ erstellt
Abrufen von Daten aus der Analyse-API mit Google API Client für Python
Spielen Sie mit der YouTube Data API v3 mit dem Google API Python Client
Mit Flask erstellte SNS Python-Grundlagen
Erstellen Sie Awaitable mit der Python / C-API
Führen Sie Rotrics DexArm mit der Python-API aus
Numer0n mit Elementen, die mit Python erstellt wurden
Quine Post mit Qiita API (Python)
Ich habe mit Python eine Lotterie gemacht.
Klicken Sie mit Python auf die Etherpad-Lite-API
Othello-Spieleentwicklung mit Python
Automatisieren Sie einfache Aufgaben mit Python Part0
Twitter-Such-Client mit Flasche gemacht
Ich habe mit Python einen Daemon erstellt
Ich habe eine einfache Schaltung mit Python gemacht (AND, OR, NOR, etc.)
Eine Geschichte über das Hinzufügen einer REST-API zu einem mit Python erstellten Daemon
[Python] Ich habe einen Bildbetrachter mit einer einfachen Sortierfunktion erstellt.
Ich habe ChatOps mit Slack x API Gateway x Lambda (Python) x RDS ausprobiert
Sammeln von Informationen von Twitter mit Python (Twitter API)
Ihr eigener Twitter-Client mit Django
Einfacher RSS-Reader mit Django
Holen Sie sich Lebensmitteldaten mit Amazon API (Python)
HTTP Split Download Typ mit Python gemacht
Automatisieren Sie einfache Aufgaben mit Python Part1 Scraping
Ich habe mit Python einen Zeichenzähler erstellt
Maschinelles Lernen mit Python (2) Einfache Regressionsanalyse
Verwenden Sie den Amazon Simple Notification Service mit Python
Schreiben Sie einen TCP-Client mit Python Twisted
[Python] Erstellen Sie schnell eine API mit Flask
Ich habe mit Python eine Hex-Map erstellt
"Erste elastische Suche" beginnend mit einem Python-Client
[Python] Python-Paketinformationen mit der PyPI-API abrufen
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe mit Python einen Neuronensimulator erstellt
Othello App (iOS App) erstellt mit Python (Kivy)
REST-API eines mit Python erstellten Modells mit Watson Machine Learning (CP4D-Edition)
[Python] Python und Sicherheit - Port-Scan-Tool mit Python