#経緯
会社で使っているslackのファイル容量がオーバーしそうになった。
調べたら、Slackにアップロードしたファイルは一括削除ができないらしい。
そしたら、どこからともなくGASでSlackのファイルを削除するBotが作れるらしいよ
というメッセージと共に、URLが送られてきた。
Slackの古くなったファイルを自動で削除してみた
http://lyncs.hateblo.jp/entry/2017/06/04/191421
なんで俺が……と思いながら、GAS(GoogleAppsScript)で1ヶ月経過したファイルを削除するbotを作った。その際にfiles.listではまったので、メモ。
やりたいこと
- 指定した日数(1ヶ月)、経過したファイルを削除
- 指定したタイプのファイル以外、削除(今回は、画像とPOSTは残したい)
作業の流れ
だいたい送られてきたページを参考にするとそれらしいものが完成する。
作業の手順を手短にまとめると、
- Tokenの発行ページでTokenを発行する
- GoogleAppsScriptを新規作成してAPIドキュメントとにらめっこしながらせっせと実装する
- 適当なSlackで挙動を確認する
みたいな感じですかね。
#ソースコード
作成したソースコード
- GASで呼ぶメソッド以外はオブジェクトにまとめた
- ライブラリ使うより、URLで直接API叩いた方が早いらしいので、そのように
【2017/10/29追記】
パラメータにchannelidを指定し忘れるという痛恨のミスが発覚。(↓コメント参照)
修正しておきました。
確認したら会社のSlackも全てのチャンネルが削除対象となっていた模様。(ゝω・)
【201803/18追記】
修正をリモートにpushし忘れていたことが発覚。(↓コメント参照)
遅ればせながらpushしておきました。m(_ _;)m
加えて、全チャンネル削除(channelId指定しない)とした場合でも、 自アカウントが参加していないチャンネルのファイルは削除されない という仕様であることが発覚したので、合わせて報告しておきます。
types
APIドキュメントによると、files.listメソッドで指定できるtypeは、以下の7種類とのこと。(POSTもファイルとして扱われるよ)
- all - All files
- spaces - Posts
- snippets - Snippets
- images - Image files
- gdocs - Google docs
- zips - Zip files
- pdfs - PDF files
しかし、一見良くわからなかったので、よく使いそうな拡張子のファイルを準備して、指定したオプションでどれが取ってこれるのかをテストした。
用意したのは以下のファイル
形式 | 拡張子 |
---|---|
Excelファイル | .xlsx |
zipファイル | .zip |
画像ファイル | .jpg .png .gif .bmp |
テキストファイル | .txt |
dumpファイル | .sql |
pdfファイル | |
謎の拡張子 | .hoge |
SlackのPOST | (拡張子無し) |
結果
オプション | 取得できた拡張子 |
---|---|
all | 全部 |
snippets | .txt .sql |
images | .jpg .png .gif |
zips | .zip |
pdfs | |
gdocs | |
spaces | SlackのPOST |
つまり、「画像以外が削除したい」、みたいな場合は
1. すべてのファイルを取得
2. 削除したくないファイルを取得
3. 1と2の差分をとる
という処理が必要ということが分かった。(.bmpは画像として認識してくれない)
あと、typeオプションを利用して「xlsxは削除するけどdocxは残す」
みたいなことは出来ないということが分かった。
もし、そういう処理がしたいなら「ファイル名から拡張子を取り出して個別に指定する」みたいにすれば出来ると思う。
他に良い方法があれば教えてくださいまし。