LoginSignup
6
1

More than 3 years have passed since last update.

本記事は 株式会社ピーアールオー(あったらいいな!を作ります) Advent Calendar 2020 の17日目です

昨日(16日目)は @pro_matuzaki さんの「Notion使う上での小ネタや注意点など」でした
Notion気になってきた:pencil:

是非、よろしければこちらもどうぞ
2019年のカレンダーはこちら

それでは本題

:muscle:やりたいこと(実は技術面の目的もあり):muscle:

  • AzureFunctions 触ってみたい(AWS以外にAzureも社内のお試し用アカウントができたので使ってみる)
  • Python触ってみたい(ド素人)
  • slackの情報を集計したい

:trophy:slackの情報を収集して、作りたいランキング:trophy:

今年、使われたリアクション ランキング
今年、リアクションエンジニア ランキング(リアクションいっぱいした人)
今年、リアクションレシーバー ランキング(リアクションいっぱい受けた人)
今年、いっぱい発言した人 ランキング

:tada:結果:tada:

チャンネル別使われたリアクション(お試し用ワークスペース)

image.png

全チャンネルトータル使われたリアクション(お試し用ワークスペース)

image.png

人別(お試し用ワークスペース) ※ほぼ黒塗りでごめんなさい

image.png
image.png
image.png

:robot:AzureFunctions(Python)とslack連携:robot:

①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に「ぼちぼちですよ」が投稿されることを確認
image.png

③slackの発言をトリガにAzureFunctions(Python)を動作させる

ローカルで動作した環境をAzureFunctions(Python)で動作させる
②で作成したコードをデプロイしておく
AzureFunctions(Python)で動作させるために必要なライブラリはrequirements.txtに記載してデプロイすることで解決

slackのOutgoing Webhookを作成
slackの発言をトリガにAzureFunctions(Python)が呼び出されるように設定

slackの発言から②と同じ投稿がされることを確認
image.png

:construction_worker:Pythonの中身を作り込む:construction_worker:

①slackAPIで情報を取得してみる(まずは色々お試し)

②全体共通処理を作成する

  • ユーザー名はidからnameに変換しないと誰か分からないので取得しておく(users_listを利用)
  • publicチャンネル一覧を取得する(conversations_list)
  • 発言履歴を取得する(conversations_history)
  • 発言履歴にはページングがあった(next_cursorを利用)
  • 年単位で集計したかったので、年指定(oldest、latestを利用。指定はUNIX時間)
  • スレッドは対応間に合わず:joy:

③リアクションランキングを作成する

  • 発言に対するリアクションを蓄積する(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)

:bulb:最後に:bulb:

これで年末年始の楽しみが1つ増えました
さて、今年のランキングは:trophy:

6
1
0

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
6
1