本記事は 株式会社ピーアールオー(あったらいいな!を作ります) Advent Calendar 2020 の17日目です
昨日(16日目)は @pro_matuzaki さんの「Notion使う上での小ネタや注意点など」でした
Notion気になってきた
是非、よろしければこちらもどうぞ
2019年のカレンダーはこちら
それでは本題
やりたいこと(実は技術面の目的もあり)
- AzureFunctions 触ってみたい(AWS以外にAzureも社内のお試し用アカウントができたので使ってみる)
- Python触ってみたい(ド素人)
- slackの情報を集計したい
slackの情報を収集して、作りたいランキング
今年、使われたリアクション ランキング
今年、リアクションエンジニア ランキング(リアクションいっぱいした人)
今年、リアクションレシーバー ランキング(リアクションいっぱい受けた人)
今年、いっぱい発言した人 ランキング
結果
チャンネル別使われたリアクション(お試し用ワークスペース)
全チャンネルトータル使われたリアクション(お試し用ワークスペース)
人別(お試し用ワークスペース) ※ほぼ黒塗りでごめんなさい
AzureFunctions(Python)とslack連携
①AzureFunctions(Python)作る
Azureアカウント作りましょう
AzureFunctions(Python)作りましょう
※現時点では無料枠でPython3.8は使えなかった
②開発のためにローカル環境構築(VS Code)
AzureポータルのAzure関数の追加に記載されている手順を実施
windowsはpipの前に「py -m」が必要
- Pythonインストール(①で作成済みのAzureのバージョンと併せましょう)
- VS Codeインストール
- VS CodeにAzure Functionsインストール
- Node.js・npmのインストール
- VS Codeで新しい関数を作成
slackのIncoming Webhookを作成
Pythonでslackに投稿するコードを作成
ローカルでURLを叩いて、slackに「ぼちぼちですよ」が投稿されることを確認
③slackの発言をトリガにAzureFunctions(Python)を動作させる
ローカルで動作した環境をAzureFunctions(Python)で動作させる
②で作成したコードをデプロイしておく
AzureFunctions(Python)で動作させるために必要なライブラリはrequirements.txtに記載してデプロイすることで解決
slackのOutgoing Webhookを作成
slackの発言をトリガにAzureFunctions(Python)が呼び出されるように設定
Pythonの中身を作り込む
①slackAPIで情報を取得してみる(まずは色々お試し)
②全体共通処理を作成する
- ユーザー名はidからnameに変換しないと誰か分からないので取得しておく(users_listを利用)
- publicチャンネル一覧を取得する(conversations_list)
- 発言履歴を取得する(conversations_history)
- 発言履歴にはページングがあった(next_cursorを利用)
- 年単位で集計したかったので、年指定(oldest、latestを利用。指定はUNIX時間)
- スレッドは対応間に合わず
③リアクションランキングを作成する
- 発言に対するリアクションを蓄積する(blocksのemojiとreactions)
- 蓄積したリアクションを集計する(collections.Counterの利用)
- 集計した内容を昇順に並び替え(sortedの利用)
- slackにTOP10を投稿(chat_postMessage)
④リアクションエンジニアランキング(リアクションいっぱいした人)を作成する
- 発言にリアクションしたユーザーを蓄積する(reactionsの中にusers)
- 蓄積したユーザーを集計する(collections.Counterの利用)
- 集計した内容を昇順に並び替え(sortedの利用)
- ユーザーidをユーザー名に変換して、slackにTOP10を投稿(chat_postMessage)
⑤リアクションレシーバーランキング(リアクションいっぱい受けた人)を作成する
- リアクションされたユーザーを蓄積する(reactionsの中のuser)
- 蓄積したユーザーを集計する(collections.Counterの利用)
- 集計した内容を昇順に並び替え(sortedの利用)
- ユーザーidをユーザー名に変換して、slackにTOP10を投稿(chat_postMessage)
⑤いっぱい発言した人ランキングを作成する
- 発言したユーザーを蓄積する(blocksの中のuser)
- 蓄積したユーザーを集計する(collections.Counterの利用)
- 集計した内容を昇順に並び替え(sortedの利用)
- ユーザーidをユーザー名に変換して、slackにTOP10を投稿(chat_postMessage)
最後に
これで年末年始の楽しみが1つ増えました
さて、今年のランキングは