PythonでSlackにファイルをアップロードする方法
WebClient#files_upload_v2()を使わずに画像をアップロードしたい場合の方法です。
slackFileUpload.py
import pathlib
import requests
from slack_sdk import WebClient
file_id_list = list()
slack_file_list = list()
channel_ID = "XXXXXXXXXXX"
client = WebClient(token="xoxb-XXX")
# ファイルが置かれたディレクトリパス
file_path = pathlib.Path("d:/test_directory/")
# ここではPNGファイルのみを対象に
for file in file_path.glob("*.png"):
# files_getUploadURLExternalでファイルID、アップロードURLを取得
# ファイル名、ファイルサイズが必要
res = client.files_getUploadURLExternal(
filename = file.name,
length = file.stat().st_size,
)
# ファイルIDリストに追加
file_id_list.append(
{"id": res["file_id"], "title": file.name}
)
# アップロードURLに対してファイルアップロード(バイナリ読み込み)
filedata = {"file": open(str(file), "rb")}
res = requests.post(res["upload_url"], files=filedata)
# ファイルアップロードが成功していれば処理を続ける(本当はファイルごとに確認が必要)
if res.ok:
# ファイルIDリストを渡してアップロード確認(複数ファイル可)
res = client.files_completeUploadExternal(
files = file_id_list
)
for r in res["files"]:
slack_file_list.append("<" + r["permalink"] + "|" + r["name"] + ">")
# メッセージをポスト
ret = client.chat_postMessage(
channel = channel_ID,
text = "".join(slack_file_list)
)