search
LoginSignup
1

More than 1 year has 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:

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
What you can do with signing up
1