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.)
[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