目次

目次

requestsを使ってBacklogAPIから課題を投稿する

松木佑徒
松木佑徒
最終更新日2016/09/24 投稿日2016/09/24

RedmineからBacklogに移行する案件があり、使う前にAPIで何ができるのか調べておきたかったのと ちょうど requests を使って見たかったので一緒に試して見ました。

python3.5で実行しています。

準備

$ pyvenv-3.5 venv
$ venv/bin/pip install requests

実装

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests

HOST = 'https://hamster.backlog.jp'
API_KEY = 'apiKey=#####YOUR_API_KEY#####'
PROJECT_KEY = '#####YOUR_PROJECT_KEY#####'

def main():
    # ユーザ情報の取得
    # GET ${HOST}/api/v2/users/myself?${API_KEY}
    r = requests.get(HOST + '/api/v2/users/myself?' + API_KEY)
    print(r.json()['mailAddress'])

    # プロジェクト情報取得
    # ${HOST}/api/v2/projects/${PROJECT_ID}?${API_KEY}
    r = requests.get(HOST + '/api/v2/projects/' + PROJECT_KEY + '?' + API_KEY)
    PROJECT_ID = r.json()['id']

    # 種別一覧の取得
    # ${HOST}/api/v2/projects/${PROJECT_ID}/issueTypes?${API_KEY}
    r = requests.get(HOST + '/api/v2/projects/' + PROJECT_KEY + '/issueTypes?' + API_KEY)
    print(r.json())
    ISSUE_TYPE_ID = r.json()[0]['id']

    # 優先度一覧の取得
    # ${HOST}/api/v2/priorities?${API_KEY}
    r = requests.get(HOST + '/api/v2/priorities?' + API_KEY)
    print(r.json())
    PRIORITY_ID = r.json()[0]['id']

    # 課題の追加
    # ${HOST}/api/v2/issues?${API_KEY}
    description = """===
    これは課題投稿のテストです。
    Backlog APIを利用してPythonから課題を投稿しています。
    ===

    hogehoge
    """
    data = {
        'projectId': PROJECT_ID,      # 課題を登録するプロジェクトのID
        'summary': '課題投稿サンプル',   # 課題の件名
        'issueTypeId': ISSUE_TYPE_ID, # 課題の種別のID
        'priorityId': PRIORITY_ID,    # 課題の優先度のID
        'description': description    # 課題の詳細
    }
    r = requests.post(HOST + '/api/v2/issues?' + API_KEY, data=data)
    print(r.json())

if __name__ == '__main__':
    main()

実行結果

yuto.matsuki@recochoku.co.jp
[{'color': '#7ea800', 'id': 247919, 'projectId': 54803, 'displayOrder': 0, 'name': 'タスク'}, {'color': '#990000', 'id': 247918, 'projectId': 54803, 'displayOrder': 1, 'name': 'バグ'}, {'color': '#ff9200', 'id': 247920, 'projectId': 54803, 'displayOrder': 2, 'name': '要望'}, {'color': '#2779ca', 'id': 247921, 'projectId': 54803, 'displayOrder': 3, 'name': 'その他'}]
[{'id': 2, 'name': '高'}, {'id': 3, 'name': '中'}, {'id': 4, 'name': '低'}]
{'updatedUser': {'mailAddress': 'yuto.matsuki@recochoku.co.jp', 'id': 124948, 'userId': 'yuto_matsuki', 'name': '[レコチョク]松木佑徒', 'lang': None, 'roleType': 2}, 'attachments': [], 'createdUser': {'mailAddress': 'yuto.matsuki@recochoku.co.jp', 'id': 124948, 'userId': 'yuto_matsuki', 'name': '[レコチョク]松木佑徒', 'lang': None, 'roleType': 2}, 'stars': [], 'actualHours': None, 'keyId': 2, 'id': 5808128, 'created': '2016-09-24T04:22:45Z', 'customFields': [], 'estimatedHours': None, 'category': [], 'assignee': None, 'issueType': {'color': '#7ea800', 'id': 247919, 'projectId': 54803, 'displayOrder': 0, 'name': 'タスク'}, 'summary': '課題投稿サンプル', 'versions': [], 'status': {'id': 1, 'name': '未対応'}, 'startDate': None, 'dueDate': None, 'description': '===\n    これは課題投稿のテストです。\n    Backlog APIを利用してPythonから課題を投稿しています。\n    ===\n\n    hogehoge\n    ', 'issueKey': 'WIZYDEV-2', 'milestone': [], 'parentIssueId': None, 'resolution': None, 'priority': {'id': 2, 'name': '高'}, 'updated': '2016-09-24T04:22:45Z', 'projectId': 54803, 'sharedFiles': []}
171-1.png

感想

  • jQueryに似てる。この程度のAPI呼び出しは簡単に書けた。
  • レスポンスを .json() で辞書型に変換してくれるのでJSONを返すAPIと相性が良さそう
    • JSON変換に失敗すると None になるらしいのでちゃんと使うならチェックも入れるべき
  • 応用でCloudWatchのアラートからチケット登録とか機会があれば使ってみたい
    • AWS Lambdaの環境には残念ながらrequests入っていないようです

参考

松木佑徒

目次