個人的に必要だったので、 Slack の Workspace にアップロードされたファイルを一括ダウンロードする Ruby スクリプトを書いて、 GitHub で公開しました。

dounokouno/slack-file-download: A script that download files uploaded to Slack.

使い方

使い方は README の通りで、

  1. Slack で Slack app を作って、
  2. files:read scope を設定して、
  3. ワークスペースにインストールして、
  4. Access Token が発行されるので覚えておいて、
  5. Access Token を .envACCESS_TOKEN に設定して、
  6. bundle install --path vendor/bundle で依存関係のファイルをインストールして(必要であれば事前に Ruby 2.6 以上をインストールして)、
  7. bundle exec ruby download.rb で実行すると、
  8. download ディレクトリにファイルがダウンロードされる。

といった感じです。

download.rb が本体なので、気に入らない動作や、ダウンロードした後にファイルを削除したい場合などは適宜、修正してください。

開発後記

Slack API は今回はじめて使ったんだけど、 API の機能毎に「Rate Limits」が設定されていて、 API の機能毎に API の呼び出し回数に制限がされている。

今回のスクリプトでは files.list メソッドを使っていて、「Rate limiting」は「Tier 3」となっていて、「Tier 3」は「50+ per minute」の制限がある。

ので、そもそも通信の関係などで API の呼び出しに失敗することもあると思うけど、コードを書き始めたくらいの頃は毎回この制限に引っかかって、途中でダウンロードが止まってしまって、「Rate Limits」の設定に気がつくまでに何度か、スクリプトを実行して、ダウンロードが始まって、途中でエラーになって、スクリプトを修正して、スクリプトを再実行して、という試行錯誤で割と時間がかかってしまった。

.envWAIT_SECONDS_ON_ERROR は、何らかの理由でエラーになった場合に待機する秒数の設定なので、このスクリプトを実行して途中でエラーになることが多い場合は、この設定値の数値を上げるとといいかもしれない。( WAIT_SECONDS_ON_ERROR の初期値は 10 。)