Slackのダイレクトメッセージを保管したい

PowerShellの情報って少ないよね~Windows10だと標準で動作するのでもっと情報が増えても良いと思うんだけど。

今日は,ダイレクトメッセージを保存しておきたいな~とふと思ったときに使えるスクリプトを招待するよ。チャンネルの取得も同じなので色々と使いまわしが出来るので覚えておこう。この記事の売りはもちろん,Pythonやcurlコマンドではないのですぐ使えるよ。

初めてWeb APIを触ったときはPython勉強しないとダメ?とかcurlコマンドで動くことは分かったけど次はどうすれば?って困ったんだけど,curlコマンドをPowerShellで記述できれば開発環境はWindows10標準のPowerShell ISEで十分なので困ることも少ないよね


https://api.slack.com/apps を開いてSlack appを作るけど,必要なUser Token Scopesは「im:read」と「im:history」と「mpim:read」と「mpim:history」だね。

添付ファイルも取得するなら「file:read」が必要。

アプリをインストールしたらOAuthトークンが手に入るので変数「$OAuthToken」に入れておこう。

$OAuthToken = "xoxp-XXXXXXXX"

ダイレクトメッセージを取得する準備としてチャネルIDを取得しないといけないので,次のスクリプトを実行する。今回は1対1のみを指定したよ。
3人以上のダイレクトメッセージならUriのtypes=をmpimに変更しよう。
成功したら ok : true,~って感じに表示されるよ。

$param = @{
    Uri = "https://slack.com/api/conversations.list?types=im"
    headers = @{
        Authorization = "Bearer " + $OAuthToken
    }
    Method = "GET"
}
Invoke-RestMethod @param | ConvertTo-Json

メッセージを取得する時は,下のスクリプトを実行するよ。
大切なのはさっき得られた結果の「id:」の部分を「channel=XXXXXXXX」のXX部分を変更すること。どの会話を取得するか指定しないとダメなので忘れないようにしようね。

$param = @{
    Uri = "https://slack.com/api/conversations.history?channel=XXXXXXXX"
    headers = @{
        Authorization = "Bearer " + $OAuthToken
    }
    Method = "GET"
}
Invoke-RestMethod @param | ConvertTo-Json

さて,うまくいったかな?

ファイルに保存したいときはこんな感じにするとよいね。
「Invoke-RestMethod @param -OutFile ファイル名」
変数に代入してごにょごにょするのもありだね。

私にはメッセージ送信したい要望はないけど,PowerShellで動作するメンテナンス用スクリプトの完了通知とかをSlackに送るとちょっとかっこいいよね。

ところで,今回は Invoke-RestMethod を使ったけど Invoke-WebRequest でも良いっぽい。前者はコンテンツだけ,後者はヘッダーなども含まれるのはわかるんだけど,これの使い分けって何だろうね~ってかんじ。

0 件のコメント:

コメントを投稿

Viva ラーニングのSharePointコンテンツで既定の言語がまじめに動き出した?

相変わらず挙動が安定しないVivaラーニングさん。 既定の言語設定がまじめに仕事を始めたのかもしれません。 ちょっと確認したいことがあってラーニングを開くとコンテンツが一つだけになってしまいました。すべてのコンテンツが表示された状態から何も操作していないのに表示コンテンツ数が変わ...