本記事はCocone Advent Calendar 2022の18日目の記事となります。
はじめに
はじめまして、ココネ新卒クライアントエンジニアの、たこくらげです。
ココネのエンジニア文化の1つにcode-festaというものがあります。
これはSlackのチャンネルで自分が実装したコードの共有や技術tips、実装で詰まった部分などを共有し、それに対してのリアクション数で半期毎に表彰を行うというものです。
code-festaは素晴らしい文化なのですが、一方で信じられないことに以前までこのリアクション数の集計は手動でやっていました...。(1時間とか普通にかかっていた)
流石にめんどくさいのでPythonの勉強を兼ねて簡易的な集計アプリを作りました。
作ったもの
まず初めに、このアプリを実行するためにあらかじめslack appを作成し、集計を行いたいチャンネルに追加をします。
今回はconversations.history
とusers.info
を叩ければいいのでスコープはusers:read
とchannels:history
があれば良いかと思います。
次にアプリの内容についてです。
ターミナルから集計期間を入力し、特定のチャンネルの期間内の投稿について
- リアクションをもらった人
- リアクション数
を集計してターミナル上に表示させます。
書いたコードがこちら。
import requests
import json
import datetime
TOKEN = "Slack Appのトークン"
url = "https://slack.com/api/conversations.history"
name_url = "https://slack.com/api/users.info"
header={
"Authorization": "Bearer {}".format(TOKEN)
}
print('開始日時をyyyymmdd形式で入力してください')
start_time_str = input('>> ')
print('終了日時の次の日をyyyymmdd形式で入力してください')
end_time_str = input('>> ')
start_time = datetime.datetime.strptime(start_time_str, '%Y%m%d').timestamp()
end_time = datetime.datetime.strptime(end_time_str, '%Y%m%d').timestamp()
payload = {
"channel" : "チャンネルのID",
"oldest" : str(start_time), #このタイムスタンプ以後の投稿が対象
"latest" : str(end_time), #このタイムスタンプ以前の投稿が対象
"limit" : "100000000000"
}
res = requests.get(url, headers=header, params=payload)
json_data = res.json()
msg = json_data["messages"]
code_festa_dict = {}
for i in msg:
if('reactions' in i):
count = 0
user = i["user"]
payload = {
"user" : user
}
res = requests.get(name_url, headers=header, params=payload)
json_data = res.json()
name = json_data["user"]["name"]
for j in i["reactions"]:
count += j["count"]
if name in code_festa_dict:
tmp = code_festa_dict[name]
tmp += count
else:
code_festa_dict[name] = count
code_festa_dict = sorted(code_festa_dict.items(), key=lambda x: x[1], reverse=True)
[print(i) for i in code_festa_dict]
使い方
ターミナル上で
python3 codeFesta.py
を実行。
開始日時と終了日時の次の日が求められるので入力する。
最後に
今回のアプリを使うことで、これまで1時間ほどかかっていた集計作業時間をなくすことができました。
python触ったことが無かったので、特殊な仕様に困惑しながらも楽しんで作ることができました。
ほかにもスプレッドシートなどと連携して過去の受賞者を除いたり、色々な機能を追加してもっと楽に集計をできるようにしたいですね。
今回の記事がslackの投稿のリアクション数を計測したいんだけどよく分からないんだよなぁ、という方の一助になれば嬉しいです。