こんにちはキーボードの悪魔です。
いい感じのキーボードでお仕事できていますか?

少し前にチームメンバーの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を指定します。

期限日はdueDateyyyy-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をリストしてぐるぐる(ループ)すれば、チームの課題をまとめてリストできそうですね。
自身やメンバーの課題整理に役立てていただければと思います。