目次
Backlog API とは
Backlog のプロジェクト情報(課題・Wiki・ファイル)の追加や取得等、Web でできる操作の大部分を、API 経由で実行することができます。
詳細については、「Backlog API とは」をご参照ください。
本記事では、Python を使って、Backlog のプロジェクト情報を取得する手順を紹介します。
Backlog API の使い方
API Key 取得
- 以下の URL にアクセスし「登録」をクリックします。
※xxxx の部分は、個人の環境に置き換えてください。
https://xxxx.backlog.com/EditApiSettings.action - 「登録された API キー」に API キーが表示されますのでコピーします。
Project ID の確認
プロジェクトの左ペインから「プロジェクト設定」をクリックすると確認できます。
URL 欄の一番右に表示されるのが「Project ID」になります。
Python 実行例
課題一覧を取得する例
以下のスクリプトを実行すると、全ての課題を JSON 形式で出力します。nulabAccount
や mailAddress
といった不要な情報もたくさん出力されますので、あまり実用的ではありません。
# -*- coding: Shift-JIS -*-
import csv
import requests
import pprint
def main():
payload = {
'apiKey': 'xxxxx', # xxxxx は API キーを設定
}
issues = requests.get('https://xxxxx.backlog.com/api/v2/issues', payload) # xxxxx は環境にあわせて設定
pprint.pprint(issues.json())
if __name__ == '__main__':
main()
特定の課題を CSV 出力する例
ステータスが「完了」以外(未対応 / 処理中 / 処理済)かつ優先度が「高」の課題を取得し、CSV ファイルに出力する例です。
# -*- coding: Shift-JIS -*-
import csv
import requests
import pprint
def main():
target_projects = {
xxxxx: 'マイプロジェクト', # xxxxx はプロジェクト ID を設定
}
target_statuses = [
1, # 未対応
2, # 処理中
3, # 処理済
]
target_priority = [
2, # 高
]
payload = {
'apiKey': 'xxxxx', # xxxxx は API キーを設定
'projectId[]': [list(target_projects.keys())], # 対象プロジェクトを指定
'statusId[]': [target_statuses], # ステータスが「完了」以外の課題を抽出
'priorityId[]': [target_priority], # プライオリティが「高」の課題を抽出
'sort': 'dueDate', # 期限日でソートを宣言
'order': 'desc', # 降順ソート
'count': '50', # 取得する課題の数を50件に設定(指定しない場合は20件まで)
}
issues = requests.get('https:/xxxxx.backlog.com/api/v2/issues', payload) # xxxxx は環境にあわせて設定
results = []
for issue in issues.json():
result = {
'プロジェクトID': issue['projectId'],
'プロジェクト名': target_projects[issue['projectId']],
'件名': issue['summary'],
'ステータス': issue['status']['name'],
'優先度': issue['priority']['name'],
'期限日': issue['dueDate'] if issue['dueDate'] else '(指定なし)',
}
results.append(result)
with open('backlog2.csv', 'w', encoding='utf_8_sig', newline="") as f:
writer = csv.DictWriter(f,
quotechar='"',
quoting=csv.QUOTE_ALL,
fieldnames=list(results[0].keys()))
writer.writeheader()
for i, r in enumerate(results, start=1):
writer.writerow(r)
pprint.pprint(results)
if __name__ == '__main__':
main()
なお、「ステータス」や「優先度」等、指定可能なクエリパラメータについては、以下をご参照ください。
以上
参考サイト
akiblog
弊社(アパルーサ・ユニバース株式会社)では課題管理に Backlog を使用することがあります。(他にも Redmine…