個人的に必要だったので、 Slack の Workspace にアップロードされたファイルを一括ダウンロードする Ruby スクリプトを書いて、 GitHub で公開しました。
dounokouno/slack-file-download: A script that download files uploaded to Slack.
使い方
使い方は README の通りで、
- Slack で Slack app を作って、
files:read
scope を設定して、- ワークスペースにインストールして、
- Access Token が発行されるので覚えておいて、
- Access Token を
.env
のACCESS_TOKEN
に設定して、 bundle install --path vendor/bundle
で依存関係のファイルをインストールして(必要であれば事前に Ruby 2.6 以上をインストールして)、bundle exec ruby download.rb
で実行すると、download
ディレクトリにファイルがダウンロードされる。
といった感じです。
download.rb
が本体なので、気に入らない動作や、ダウンロードした後にファイルを削除したい場合などは適宜、修正してください。
開発後記
Slack API は今回はじめて使ったんだけど、 API の機能毎に「Rate Limits」が設定されていて、 API の機能毎に API の呼び出し回数に制限がされている。
今回のスクリプトでは files.list メソッドを使っていて、「Rate limiting」は「Tier 3」となっていて、「Tier 3」は「50+ per minute」の制限がある。
ので、そもそも通信の関係などで API の呼び出しに失敗することもあると思うけど、コードを書き始めたくらいの頃は毎回この制限に引っかかって、途中でダウンロードが止まってしまって、「Rate Limits」の設定に気がつくまでに何度か、スクリプトを実行して、ダウンロードが始まって、途中でエラーになって、スクリプトを修正して、スクリプトを再実行して、という試行錯誤で割と時間がかかってしまった。
.env
の WAIT_SECONDS_ON_ERROR
は、何らかの理由でエラーになった場合に待機する秒数の設定なので、このスクリプトを実行して途中でエラーになることが多い場合は、この設定値の数値を上げるとといいかもしれない。( WAIT_SECONDS_ON_ERROR
の初期値は 10
。)