この記事は最終更新日から1年以上が経過しています。
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': []} |
感想
- jQueryに似てる。この程度のAPI呼び出しは簡単に書けた。
- レスポンスを .json() で辞書型に変換してくれるのでJSONを返すAPIと相性が良さそう
- JSON変換に失敗すると None になるらしいのでちゃんと使うならチェックも入れるべき
- 応用でCloudWatchのアラートからチケット登録とか機会があれば使ってみたい
- AWS Lambdaの環境には残念ながらrequests入っていないようです
参考
この記事を書いた人
最近書いた記事
- 2021.12.10React NativeでWallet風UIを実装する
- 2018.11.19Elasticsearchで簡単な検索とscoreを調整する方法
- 2018.10.05ECSをEC2からFargateに切り替える際の注意点
- 2018.09.12AKB48グループ映像倉庫のWeb版をリリースしました