こんにちはキーボードの悪魔です。
いい感じのキーボードでお仕事できていますか?
少し前にチームメンバーの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をリストしてぐるぐる(ループ)すれば、チームの課題をまとめてリストできそうですね。
自身やメンバーの課題整理に役立てていただければと思います。