Slack 파일을 단번에 삭제
소개
raspberry pi로 slack bot을 재생하고 slack에 사진과 동영상 파일을 너무 올려 힘들게. . .
필요가 없는 파일을 삭제하려고 했는데, slack에서 파일을 삭제하려고 하면, 파일 1개 1개 선택해 삭제한다고 하는 매우 귀찮은 인터페이스.
그러고 보면, 회사에서 사용하고 있을 때도 파일 정리하려고 생각해 단번에 삭제하는 방법을 모르고 곤란한 기억이. . .
아무래도 방법이 없을 것 같기 때문에, slack api 사용해 하면 되지 않을까.
필요한 것
이번 방법은 php 스크립트이므로 php가 움직이는 환경이 필요합니다. 우리 PC는 Mac이므로 빨리 움직였습니다.
slack api를 사용하기 위한 준비
slack api를 사용하려면 준비가 필요합니다.
요컨대 slack api에 액세스하기 위해 token이 필요하기 때문에 이것을 발행해야합니다.
아래에 @ykhirao씨가 정중하게 정리해 주기 때문에, 그쪽을 참조해 주세요.
주의
이번에는 파일 목록과 파일 삭제 API를 사용합니다.
2. 스코프 설정으로 설정하는 스코프는 이하와 같이 「files:read」와 「files:write:user」의 2개를 추가해 주세요.
덧붙여서 scope를 변경했을 때는 앱의 재설치가 필요하기 때문에 주의가 필요합니다.
무사히 앱을 설치할 수 있으면 token을 가져옵니다. token을 잊었을 때의 취득 방법도 @ykhirao씨가 정중하게 정리해 주기 때문에, 그쪽을 참조해 주세요.
htps : // 이 m/yk 히라오/있어 ms/3b19예6아
PHP 스크립트
php의 curl(Client URL Library)을 사용하여 Web api를 호출합니다.
php의 curl에서 json을 post하는 방법은 아래 사이트의 스크립트를 이용하여 수정했습니다.
ht tp // // 없이. 하테나 bぉg. jp/엔트리/2013/04/12/160836
slack api에서는 "charset = utf-8"을 설정하지 않으면 화가납니다.$token
에는 앞서 설명한 slack api의 token을 설정합니다.$count
에는 한 번에 삭제할 파일의 상한을 설정합니다.
delete_slack_files.php<?php
$token ='xoxp-XXXXXXXXXXX-XXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$count = 100;
# このスクリプトはファイル一覧で取得出来たファイルをすべて削除します。
# 特定のchannelやファイル種別で絞り込むにはオプションを追加してください。
# 以下のAPIリファレンスを参照願います。
# https://api.slack.com/methods/files.list
# 例:channel IDのファイルを取得
# $op ='token=' . $token . "&count=$count" . "&channel=ABCDEF";
$op ='token=' . $token . "&count=$count";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://slack.com/api/files.list?'.$op);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
$result = json_decode($response, true);
$n = $result['paging']['total'];
curl_close($curl);
$files = $result['files'];
# https://slack.com/api/files.list で取得したファイルを削除します。
$json_data = array('file' => 'XXX');
$i = 0;
foreach ($files as $file) {
echo $file['id'].":".$file['name'];
$json_data['file'] = $file['id'];
$data = json_encode($json_data);
$ret = postFromHTTP('https://slack.com/api/files.delete',$data,$token);
if($ret['ok']){ echo ' Delete!';}
else { echo ' ERROR.';}
echo "\n";
$i++;
}
echo "$n files found.\n";
echo "delete $i files.\n";
function postFromHTTP($url, $data, $token) {
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_AUTOREFERER => true,
);
$authorization = "Authorization: Bearer ".$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의 용량을 신경쓰지 않고 여러가지 할 수 있게 됩니다.
덧붙여 web api의 결과가 반영되는데는 다소 타임 러그가 있는 것 같고, 대량으로 파일 삭제하고 있으면 결과가 반영되기까지 몇 초 걸렸습니다. 파일은 삭제되었지만 파일 목록은 검색할 수 있는 상태가 되었습니다. 따라서 위의 스크립트를 연속적으로 사용하는 것처럼 파일이 삭제되지 않을 수 있습니다. 연속적으로 사용할 때는 몇 초 기다렸다가 실행하십시오.
Reference
이 문제에 관하여(Slack 파일을 단번에 삭제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/9umaske/items/49bc1bd89330fe946ff3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번 방법은 php 스크립트이므로 php가 움직이는 환경이 필요합니다. 우리 PC는 Mac이므로 빨리 움직였습니다.
slack api를 사용하기 위한 준비
slack api를 사용하려면 준비가 필요합니다.
요컨대 slack api에 액세스하기 위해 token이 필요하기 때문에 이것을 발행해야합니다.
아래에 @ykhirao씨가 정중하게 정리해 주기 때문에, 그쪽을 참조해 주세요.
주의
이번에는 파일 목록과 파일 삭제 API를 사용합니다.
2. 스코프 설정으로 설정하는 스코프는 이하와 같이 「files:read」와 「files:write:user」의 2개를 추가해 주세요.
덧붙여서 scope를 변경했을 때는 앱의 재설치가 필요하기 때문에 주의가 필요합니다.
무사히 앱을 설치할 수 있으면 token을 가져옵니다. token을 잊었을 때의 취득 방법도 @ykhirao씨가 정중하게 정리해 주기 때문에, 그쪽을 참조해 주세요.
htps : // 이 m/yk 히라오/있어 ms/3b19예6아
PHP 스크립트
php의 curl(Client URL Library)을 사용하여 Web api를 호출합니다.
php의 curl에서 json을 post하는 방법은 아래 사이트의 스크립트를 이용하여 수정했습니다.
ht tp // // 없이. 하테나 bぉg. jp/엔트리/2013/04/12/160836
slack api에서는 "charset = utf-8"을 설정하지 않으면 화가납니다.$token
에는 앞서 설명한 slack api의 token을 설정합니다.$count
에는 한 번에 삭제할 파일의 상한을 설정합니다.
delete_slack_files.php<?php
$token ='xoxp-XXXXXXXXXXX-XXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$count = 100;
# このスクリプトはファイル一覧で取得出来たファイルをすべて削除します。
# 特定のchannelやファイル種別で絞り込むにはオプションを追加してください。
# 以下のAPIリファレンスを参照願います。
# https://api.slack.com/methods/files.list
# 例:channel IDのファイルを取得
# $op ='token=' . $token . "&count=$count" . "&channel=ABCDEF";
$op ='token=' . $token . "&count=$count";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://slack.com/api/files.list?'.$op);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
$result = json_decode($response, true);
$n = $result['paging']['total'];
curl_close($curl);
$files = $result['files'];
# https://slack.com/api/files.list で取得したファイルを削除します。
$json_data = array('file' => 'XXX');
$i = 0;
foreach ($files as $file) {
echo $file['id'].":".$file['name'];
$json_data['file'] = $file['id'];
$data = json_encode($json_data);
$ret = postFromHTTP('https://slack.com/api/files.delete',$data,$token);
if($ret['ok']){ echo ' Delete!';}
else { echo ' ERROR.';}
echo "\n";
$i++;
}
echo "$n files found.\n";
echo "delete $i files.\n";
function postFromHTTP($url, $data, $token) {
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_AUTOREFERER => true,
);
$authorization = "Authorization: Bearer ".$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의 용량을 신경쓰지 않고 여러가지 할 수 있게 됩니다.
덧붙여 web api의 결과가 반영되는데는 다소 타임 러그가 있는 것 같고, 대량으로 파일 삭제하고 있으면 결과가 반영되기까지 몇 초 걸렸습니다. 파일은 삭제되었지만 파일 목록은 검색할 수 있는 상태가 되었습니다. 따라서 위의 스크립트를 연속적으로 사용하는 것처럼 파일이 삭제되지 않을 수 있습니다. 연속적으로 사용할 때는 몇 초 기다렸다가 실행하십시오.
Reference
이 문제에 관하여(Slack 파일을 단번에 삭제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/9umaske/items/49bc1bd89330fe946ff3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
php의 curl(Client URL Library)을 사용하여 Web api를 호출합니다.
php의 curl에서 json을 post하는 방법은 아래 사이트의 스크립트를 이용하여 수정했습니다.
ht tp // // 없이. 하테나 bぉg. jp/엔트리/2013/04/12/160836
slack api에서는 "charset = utf-8"을 설정하지 않으면 화가납니다.
$token
에는 앞서 설명한 slack api의 token을 설정합니다.$count
에는 한 번에 삭제할 파일의 상한을 설정합니다.delete_slack_files.php
<?php
$token ='xoxp-XXXXXXXXXXX-XXXXXXXXXXX-XXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
$count = 100;
# このスクリプトはファイル一覧で取得出来たファイルをすべて削除します。
# 特定のchannelやファイル種別で絞り込むにはオプションを追加してください。
# 以下のAPIリファレンスを参照願います。
# https://api.slack.com/methods/files.list
# 例:channel IDのファイルを取得
# $op ='token=' . $token . "&count=$count" . "&channel=ABCDEF";
$op ='token=' . $token . "&count=$count";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://slack.com/api/files.list?'.$op);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
$result = json_decode($response, true);
$n = $result['paging']['total'];
curl_close($curl);
$files = $result['files'];
# https://slack.com/api/files.list で取得したファイルを削除します。
$json_data = array('file' => 'XXX');
$i = 0;
foreach ($files as $file) {
echo $file['id'].":".$file['name'];
$json_data['file'] = $file['id'];
$data = json_encode($json_data);
$ret = postFromHTTP('https://slack.com/api/files.delete',$data,$token);
if($ret['ok']){ echo ' Delete!';}
else { echo ' ERROR.';}
echo "\n";
$i++;
}
echo "$n files found.\n";
echo "delete $i files.\n";
function postFromHTTP($url, $data, $token) {
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_AUTOREFERER => true,
);
$authorization = "Authorization: Bearer ".$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의 용량을 신경쓰지 않고 여러가지 할 수 있게 됩니다.
덧붙여 web api의 결과가 반영되는데는 다소 타임 러그가 있는 것 같고, 대량으로 파일 삭제하고 있으면 결과가 반영되기까지 몇 초 걸렸습니다. 파일은 삭제되었지만 파일 목록은 검색할 수 있는 상태가 되었습니다. 따라서 위의 스크립트를 연속적으로 사용하는 것처럼 파일이 삭제되지 않을 수 있습니다. 연속적으로 사용할 때는 몇 초 기다렸다가 실행하십시오.
Reference
이 문제에 관하여(Slack 파일을 단번에 삭제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/9umaske/items/49bc1bd89330fe946ff3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)