LoginSignup
3
2

More than 5 years have passed since last update.

Slackで、自分が参加しているPrivateChanel(非公開チャンネル)のリストをCSVでダウンロードする

Posted at
  • Slackでは、管理者権限でもPrivateChannel(非公開チャンネル)の一覧を取得することは出来ないっぽい(たぶん)。
  • PrivateChannelは検索してもヒットしないので、そもそも存在すら検知できない。
  • なので、チーム全体でPrivateChannelを整理することになったとき、「そもそも今はどんなPrivateChannelが存在するのか?」という全容が掴めず途方に暮れた…( ´ー`)フゥー...
  • でも自分が参加しているPrivateChannelの一覧なら、APIから取得できる!
  • 「よし、各部署の何人かのメンバーに頼んで、その人が参加しているPrivateChannel一覧を取得してもらい、寄せ集めて全体像をつかもう(^v^)!」
  • ということで、非エンジニアの社内のメンバーでも簡単にCSV形式でPrivateChannel一覧をダウンロードできるツールを作りました。
  • 使う手順は以下の通り。
    1. 以下のHTMLファイルをダウンロード
    2. Chromeなどのブラウザで開く
    3. 「Tokenを確認」というリンク先にある、自分のSlackのTokenをコピー
    4. 元のページに戻ってTokenを貼り付け
    5. ダウンロードボタンを押す
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>

<body>
    <style type="text/css" media="screen">
    #wrapeer {
        width: 1000px;
        margin: 0 auto;
    }

    #linkToToken {
        display: block;
        padding: 10px;
    }

    input[type=password] {
        font-size: 120%;
        display: block;
        padding: 10px;
        width: 840px;
        float: left;
    }

    #downloadBtn {
        border: 1px solid #ccc;
        padding: 10px;
        border-radius: 5px;
        float: right;
    }

    #downloadBtn:hover {
        background: skyblue;
    }
    </style>
    <div id="wrapeer">
        <a id="linkToToken" href="https://api.slack.com/docs/oauth-test-tokens" target="_blank">Tokenを確認</a>
        <input type="password" id="token" placeholder="↑のページに記載されている”Token”をコピペし、ダウンロードボタンを押してください">
        <a type="button" id="downloadBtn" style="">ダウンロード</a>
    </div>
    <script type="text/javascript">
    <!--
    $(document).ready(function() {
            $('#token').change(function(event) {
                getUserMap(getToken(), getCsvOfGroupList)
            });
            var getToken = function() {
                return $('#token').val()
            }
            var getUserMap = function(token, successCollback) {
                $.ajax({
                        url: 'https://slack.com/api/users.list?token=' + token,
                        type: 'GET',
                        dataType: 'json',
                    })
                    .done(function(result) {
                        var usernameMap = []
                        for (var i = 0, len = result.members.length; i < len; i++) {
                            usernameMap[result.members[i].id] = result.members[i].name
                        }
                        successCollback(usernameMap, token)
                    }).fail(function() {})

            }
            var getCsvOfGroupList = function(usernameMap, token) {
                $.ajax({
                        url: 'https://slack.com/api/groups.list?token=' + token,
                        type: 'GET',
                        dataType: 'json',
                    })
                    .done(function(result) {
                        var csv = [
                            '公開/非公開',
                            'チャンネル名',
                            '作成者',
                            'メンバー数',
                            '目的',
                        ].join(',') + "\n"
                        for (var i = 0, len = result.groups.length; i < len; i++) {
                            var group = result.groups[i]
                            // 複数人でのDirectMessageと、アーカイブ済みのものは除外する
                            if (group.name.indexOf('mpdm-') === 0 || group.is_archived) {
                                continue;
                            }
                            var groupInfo = [
                                '非公開',
                                group.name,
                                usernameMap[group.creator],
                                group.members.length,
                                group.purpose.value,
                            ]
                            csv += groupInfo.join(",") + "\n"

                        }
                        setDownloadLink(csv)
                    }).fail(function() {})
            }

            var setDownloadLink = function(csvString) {
                var bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
                var blob = new Blob([bom, csvString], {
                    "type": "text/csv"
                });
                if (window.navigator.msSaveBlob) {
                    window.navigator.msSaveBlob(blob, "test.csv");
                    // msSaveOrOpenBlobの場合はファイルを保存せずに開ける
                    window.navigator.msSaveOrOpenBlob(blob, "test.csv");
                } else {
                    document.getElementById("downloadBtn").href = window.URL.createObjectURL(blob);
                }
            }
        })
        -->
    </script>
</body>

</html>
  • 一時的にしか使わないツールなので、すごく適当に作りました。所々イケてないかと思いますが、ご容赦くださいm(_ _)m
3
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2