REST APIでRedmineアクセス(2)
2025/05/04 | |||
[Prev]
| |||
今回は具体的な操作を
チケット(Issue): offset設定で全チケットのリスト取得
INF: HTTP request is successful for [http://localhost:3000/issues.json] INF: id=30, subject=Test 30, status=新規 ...中略... INF: id=6, subject=Test 06, status=新規 INF: normally finished { "issues": [ ... ], "total_count": 29, "offset": 0, "limit": 25 } # getメソッド引数にパラメータ設定を追加する sUri = 'http://localhost:3000/issues.json' dHeaders = {'X-Redmine-API-Key': '8dc1f63aうんぬんかんぬん'} dParams = {'offset': 0, 'limit': 25} ...略... iTotalCount = dParams['limit'] # 全チケット(Issue)数初期値はlimitとする dIssues = None # 戻り値初期設定 # iTotalCountがoffsetより大きい場合HTTPリクエストを繰り返す while iTotalCount > dParams['offset']: # HTTPリクエスト jIssues = requests.get(sUri, headers=dHeaders, params=dParams) # 取得データを辞書に変更して追加 dIssuesCur = jIssues.json() dIssues['issues'] += dIssuesCur['issues'] # (注)None時の記述を略しています # 全チケット数を取得 iTotalCount = dIssues['total_count'] # 1回目レスポンス結果で正確なチケット数に # offsetのインクリメント dParams['offset'] += dParams['limit'] ... INF: id=[6], subject=[Test 06], status=[新規] INF: id=[4], subject=[Test 04], status=[新規] INF: id=[3], subject=[Test 03], status=[新規] INF: id=[2], subject=[Test 02], status=[新規] INF: id=[1], subject=[Test 01], status=[新規] INF: normally finished チケット(Issue): status_id設定で全ステータスのリスト取得
dParams = {'offset': 0, 'limit': 25, 'status_id': '*'} ...略... jIssues = requests.get(sUri, headers=dHeaders, params=dParams) INF: id=[6], subject=[Test 06], status=[新規] INF: id=[5], subject=[Test 05], status=[終了] INF: id=[4], subject=[Test 04], status=[新規] INF: id=[3], subject=[Test 03], status=[新規] INF: id=[2], subject=[Test 02], status=[新規] INF: id=[1], subject=[Test 01], status=[新規] INF: normally finished チケット(Issue): 指定ID/番号のチケット情報取得
![]() (※)クリックで拡大 import requests import json sUri = 'http://localhost:3000/issues/30.json' dHeaders = {'X-Redmine-API-Key': '8dc1f63aうんぬんかんぬん'} dParams = {'include': 'journals'} jIssue = requests.get(sUri, headers=dHeaders, params=dParams) dIssue = jIssue.json()['issue'] print(f"id=[{dIssue['id']}], subject=[{dIssue['subject']}], ", end='') print(f"assigned=[{dIssue['assigned_to']['name']}], ", end='') print(f"description={dIssue['description']}") for journal in dIssue['journals']: print(f"notes={journal['notes']}") id=[30], subject=[Test 30], assigned=[Altmo Test], description=[Test 30]の説明 notes=ここにまとめ記述予定 チケット(Issue): 指定ID/番号にコメント追加
{ 'issue': { 'notes': 'REST APIで追加したコメント' } } import requests import json sUri = 'http://localhost:3000/issues/30.json' # チケット30のURI dHeaders = {} # ヘッダーdict dHeaders['X-Redmine-API-Key'] = '8dc1f63aうんぬんかんぬん' dHeaders['Content-Type'] = 'application/json' # データがJSONであることを明示的に指定 dData = {} # コメントdict dData['issue'] = {} dData['issue']['notes'] = 'REST APIで追加したコメント' # コメントdictデータ jData = json.dumps(dData) # コメントdict → JSONへ変換 objRet = requests.put(sUri, headers=dHeaders, data=jData) # REST APIでput print(f"return status_code = {objRet.status_code}")
チケット(Issue): チケット(Issue)の追加
{'issue': {'project_id': 1} {'subject': 'Test 31'} } import requests import json sUri = 'http://localhost:3000/issues.json' # issuesのURI dHeaders = {} # ヘッダーdict dHeaders['X-Redmine-API-Key'] = '8dc1f63aうんぬんかんぬん' dHeaders['Content-Type'] = 'application/json' dData = {} # チケットdict dData['issue'] = {} dData['issue']['project_id'] = 1 # project_id: 1 dData['issue']['subject'] = 'Test 31' # チケットのタイトル jData = json.dumps(dData) # JSONへ変換 print(json.dumps(dData, indent=2)) objRet = requests.post(sUri, headers=dHeaders, data=jData) # REST APIでpost print(f"return status_code = {objRet.status_code}") ![]() チケット(Issue): チケット(Issue)の削除
import requests sUri = 'http://localhost:3000/issues/31.json' # チケット31のURI dHeaders = {} # ヘッダーdict dHeaders['X-Redmine-API-Key'] = '8dc1f63aうんぬんかんぬん' objRet = requests.delete(sUri, headers=dHeaders) # REST APIでdelete print(f"return status_code = {objRet.status_code}") ![]() 次回は
| |||
Notes | |||
Copyright(C) 2025 Altmo
本HPについて | |||
[Prev]
|