スラックは、簡単に他サービスとのAPI連携が出来て使いやすくおすすめなチャットツールです。
無料でも利用できますのでまずは、お試しで導入し、さまざまなAPPとの連携を試してみることをおすすめします。
無料で利用する場合の注意点
無料で利用する場合、以下の制限があります。
- メッセージ履歴の上限 1万件
- 追加可能なAPP 10個
- ビデオ通話 1対1まで
- ファイルストレージ 5G
この中でも、個人的に無料で利用していて不便と感じたことは、ファイルストレージ5Gでした。
チャットで共有したファイル容量の累積が上限に達した瞬間、ファイルのアップロードが出来なくなります。
手動ですぐにファイル削除を行ったとしても、3~4日は改善しなかったように思います。
無料で長く利用するため、ファイル削除を自動化する
有料アカウントにすれば話は簡単なのですが、予算を回せない。
少数で利用しているなどの場合で、趣味レベルなのでお金を使いたくない場合など。
slackのAPIを利用することで、自動ファイル削除を行うことができます。
PHPでSlackファイル削除クラスを作成
今回はファイル削除だけですが、後で他のAPIも利用するかと思いクラスにしました。
適当に作成したクラスなので、コメントやコードに不備があるかもしれません(;´Д`)
こちらをslack.phpとして作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
<?php class slack { const API_URL = 'https://slack.com/api/'; var $_token = null; /** * コンストラクタ * @param type $_token */ function __construct($_token = null) { mb_internal_encoding("UTF-8"); $this->_token = $_token; } /** * デストラクタ */ function __destruct() { } /** * ファイルリスト取得 * https://api.slack.com/methods/files.list * @param type $from 期間開始 * @param type $to 期間終了 * @param type $cnt 取得数 * @return type */ public function getFilesListAll($from=null,$to=null,$cnt=100){ $op ="token={$this->_token}&count={$cnt}"; if($from != null) { $op.="&ts_from={$from}"; } if($to != null) { $op.="&ts_to={$to}"; } return $this->_getApi('files.list?'.$op); } public function setDeleteFile($data=array()){ return $this->_postApi('files.delete?',$data); } /** * 取得系API * @param type $url * @return type */ private function _getApi($url){ $_url=self::API_URL.$url; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $_url); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($curl); curl_close($curl); return json_decode($response, true); } /** * 更新系API * @param type $url * @param type $data * @return type */ private function _postApi($url, $data) { $_url=self::API_URL.$url; $options = array( CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_AUTOREFERER => true, ); $authorization = "Authorization: Bearer ".$this->_token; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $_url); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json; charset=utf-8' , $authorization )); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_VERBOSE, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_POST, true); curl_setopt_array($ch, $options); $result = curl_exec($ch); curl_close($ch); $ret = json_decode($result, true); return $ret; } } |
Slackクラスを呼び出してファイルを削除
上記のクラスを呼び出して、1か月前までのファイルを削除するコードを記述します。
「Slack APIトークン」の部分に、それぞれ取得したAPIトークンを指定してください。
このphpを定期的に実行することで、ある程度ファイルストレージ上限に達することを回避できるかと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php date_default_timezone_set('Asia/Tokyo'); require_once __DIR__.'/slack.php'; $token ='Slack APIトークン'; $slack = new com\slack($token); //1か月前までのファイル一覧を取得する $chk = strtotime("-1 month"); $result = $slack->getFilesListAll(null, $chk); $files = $result['files']; //取得したファイル分削除を行う foreach ($files as $file) { //一応ここでもタイムスタンプのチェック if($file['created'] > $chk ) { continue; } $json_data = array(); $json_data['file'] = $file['id']; $data = json_encode($json_data); $ret = $slack->setDeleteFile($data); } |
ぶっちゃけ自動ファイル削除しても、うまくいかないことが多々あるため
結局オープンソースのSlack亜種のMattermostに切り替えました(;^_^A