こんにちはキーボードの悪魔です。
いい感じのキーボードでお仕事できていますか?
少し前にチームメンバーのBacklog課題の状況を把握するために、簡単なスクリプトを作ってみました。
ある担当者について、課題の期限日がn日以内で、完了でない(=未処理、処理中、処理済)の課題をリストします。
サードパーティのライブラリは使わずにurllibを利用してapiの呼び出しを行っています。
コード
せっかちなあなたの為にまずはコードです!
python:deadline_tracker.py
import os
import datetime
import urllib.parse
import urllib.request
import json
apikey = os.environ['APIKEY']
space_key = os.environ['SPACEKEY']
base_url = f'https://{space_key}.backlog.jp/api/v2/issues?apiKey={apikey}'
userid = os.environ['USERID']
today = datetime.date.today() # today!
until = today + datetime.timedelta(days=7) # 7日先まで
param = urllib.parse.urlencode({
'assigneeId[]': userid, # 担当者
'dueDateUntil': until, # 期限
'count': 100 # 取得上限 100件
})
status_param_1 = urllib.parse.urlencode({
'statusId[]': 1 # 未処理
})
status_param_2 = urllib.parse.urlencode({
'statusId[]': 2 # 処理中
})
status_param_3 = urllib.parse.urlencode({
'statusId[]': 3 # 処理済
})
status_param = (f'{status_param_1}&'
f'{status_param_2}&'
f'{status_param_3}')
req = urllib.request.Request(f'{base_url}&{param}&{status_param}')
with urllib.request.urlopen(req) as res:
for issue in json.load(res):
key = issue['issueKey']
summary = issue['summary']
status = issue['status']['name']
duedate = issue['dueDate']
print(f'{key}: {summary}, {status}, {duedate}')
解説
課題一覧を取得するAPIを呼び出します。
理解のためにリファレンスを読みましょう!
以下は環境変数より読み込ませています。このあたりはよしなに。
- スペースキー
- APIキー
- 担当者のID
担当者はasigneeId[]に担当者のIDを指定します。
期限日はdueDateにyyyy-MM-dd形式で指定します。
countに取得される課題の上限を設定します。デフォルトで20件、指定できる上限は100件です。
ステータスが完了でない課題ということで、ステータスIDが 1,2,3(未処理、処理中、処理済)の課題を取得すればよいことになります。
statusId[]のパラメータを指定すれば良いのですが、Tipsによるとリスト形式のパラメータは以下のように指定せよとあります。
リスト形式のパラメータを複数指定する
activityTypeIds[]など[]が付いているパラメータは、アクセス時に下記のような記述をすることで複数指定ができます。&activityTypeIds[]=111&activityTypeIds[]=222& …
というわけで以下のようにステータス部分のクエリパラメータを組み立てています。
status_param_1 = urllib.parse.urlencode({
'statusId[]': 1 # 未処理
})
status_param_2 = urllib.parse.urlencode({
'statusId[]': 2 # 処理中
})
status_param_3 = urllib.parse.urlencode({
'statusId[]': 3 # 処理済
})
status_param = (f'{status_param_1}&'
f'{status_param_2}&'
f'{status_param_3}')
最終的なクエリパラメータは以下のようになります。
https://{space_key}.backlog.jp/api/v2/issues?apiKey={apikey}&assigneeId%5B%5D={userid}&dueDateUntil=2023-05-29&count=100&statusId%5B%5D=1&statusId%5B%5D=2&statusId%5B%5D=3
おまけ:ユーザIDを確認する
担当者指定で利用するBacklogのユーザIDについて、私の知る限りブラウザから確認する方法がないです。
ユーザIDを知りたいユーザが所属するプロジェクトの全ユーザを取得して、そこから探すと良いです。
簡単なスクリプトつきで紹介しておきます。
list_pj_users.py
import os
import urllib.request
import json
apikey = os.environ['APIKEY']
space_key = os.environ['SPACEKEY']
project = os.environ['PROJECT']
url = f'https://{space_key}.backlog.jp/api/v2/projects/{project}/users?apiKey={apikey}'
req = urllib.request.Request(url)
with urllib.request.urlopen(req) as res:
for user in json.load(res):
print(user["id"], user["name"])
スクリプトを実行して、氏名でgrepするのが簡単です。
$ python3 user.py | grep 小早川 1234567890 IRT小早川 隆嗣
まとめ
いかがだったでしょうか?(言ってみたかった。)
チームメンバーのユーザIDをリストしてぐるぐる(ループ)すれば、チームの課題をまとめてリストできそうですね。
自身やメンバーの課題整理に役立てていただければと思います。