2020/08/12
[Python]SlackにAPIを使ってファイルをアップロードする
概要
こちらの記事でChatworkにアップしていたものを
Slackに移行する必要があったので、対応しました。
実施内容
以下の手順で実施しました。
- SlackでOAuth Applicationを作成します
- OAuth Applicationのaccess tokenを使って、メッセージが投稿できることを確認します
- Pythonを使ってファイルをアップロードする処理を書きます
Create Slack Application
SlackのGUIから、Applicaitonの作成を行います。
その際に、以下のScopeを追加しておきます。
- files:write
- chat:write
作成すると、Access Tokenが発行されるのでメモを取っておきます。
Test Slack Application
試しに、発行されたTokenを使って、generalチャンネルに curl
を使って投稿してみます。
access_token=yout-slack-app-access-token-here
channel=general
curl "https://slack.com/api/chat.postMessage?token=${access_token}&channel=${channel}&text=Test"
ちゃんと投稿できれば確認OKです。
なお、事前に投稿したいchannelにSlack Applicationのusernameを招待しておく必要があります。
これをしておかないと、 not_in_channel
などのエラーメッセージがでます。
Upload File in Python
こんな感じになります。(TSVファイルの場合)
- channel idにする必要があるので注意です。(curlの戻り値にchannel idがあるのでそれをメモしておくと良いです。)
file_name="your-file-name"
file_data = open(f"/path/to/{file_name}", 'rb').read()
files = {
"file": (file_name, file_data, "text/tab-separated-values"),
}
data = {
"token": "yout-slack-app-access-token-here",
"channels": "your-slack-channel-id",
"title": "message-title-here",
"filename": file_name,
"filetype": "tsv",
}
post_message_url = "https://slack.com/api/files.upload"
response = requests.post(
post_message_url,
data=data,
files=files,
)
以上になります。
関連する記事
[Python]ハイフンなし電話番号からハイフン付きに復元
Pythonでハイフンなしの日本の電話番号をハイフン付きのものに変換する
[Python]BeautifulSoup4でhtmlの解析
BeautifulSoup4というPythonのライブラリを使って、特定のURLのコンテンツを取得し、タイトルや説明文を取得できるようにしました。
[Python]銀行コードと支店コードの取扱
Pythonで銀行コード、支店コードデータを取り扱う便利なライブラリzengin-codeを導入しました。
Sendgridを使ってメールの受信を行う
Inbound Email Parse Webhookという機能を利用してメールを受信したらWebhookを呼び出すようにしました