Pivotal Tracker API でラベルの一覧を取得してみました。 ついでに、ラベルに紐づくストーリーの数も取得しています。
おすすめの方
- Pivotal Tracker APIを利用したい方
- Pivotal Tracker APIでラベルの一覧を取得したい方
- Pivotal Tracker APIでラベルに紐づくストーリーの数を取得したい方
適当なプロジェクトを用意する
適当なプロジェクトです。ラベルやエピックが設定されています。
ラベルとエピックは、次のようになっています。
ラベルの一覧と紐付いているストーリーの数を取得するスクリプト
最初にラベルの一覧を取得し、次にストーリーをラベルで検索します。 検索した結果には次の情報があるので、全件取得していません。
- total_hits
- 検索条件に一致したストーリーの数(未完了のみ)
- total_hits_with_done
- 検索条件に一致したストーリーの数(完了済みを含む)
app.py
import requests
import json
import urllib.parse
API_ENDPOINT = "https://www.pivotaltracker.com/services/v5"
TOKEN = "xxx"
PROJECT_ID = "yyy"
def main():
# ラベルの一覧を取得する
labels = get_labels()
for label in labels:
# ラベルごとにストーリーを検索する
stories = search_stories_with_labes(label["name"])
dump_labels(label, stories)
def dump_labels(label, stories):
print(
f"{label['name']}, {stories['stories']['total_hits']}, {stories['stories']['total_hits_with_done']}"
)
def get_headers():
return {
"X-TrackerToken": TOKEN,
"Content-Type": "application/json",
}
def get_labels():
resp = requests.get(
f"{API_ENDPOINT}/projects/{PROJECT_ID}/labels", headers=get_headers()
)
return resp.json()
def search_stories_with_labes(label):
query = [
# "type:feature,bug,chore",
# "state:unscheduled,unstarted,started",
f'label:"{label}"',
]
url_query = {
# キーワードの区切りは半角空白
"query": " ".join(query),
}
# 数が知りたいだけなので、loopして全件取得しない
# (Response Bodyに数がある)
parameter = urllib.parse.urlencode(url_query)
resp = requests.get(
f"{API_ENDPOINT}/projects/{PROJECT_ID}/search?{parameter}",
headers=get_headers(),
)
return resp.json()
if __name__ == "__main__":
main()
スクリプトを実行する
スクリプトを実行すると、ラベルの一覧とストーリーの数を取得できました。
$ python app.py
開発, 0, 0
保守, 2, 3
デザイ, 0, 0
デザイン, 0, 0
これはエピックです, 2, 3
機能a, 2, 2
ready, 4, 5
spike, 0, 0
CSVファイルとして保存し、フィルタとか編集とかできるようにしています。
$ python app.py > labels.csv