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