import requests import sys import json #------------------------------------------------------------------------------- def showRequestStatus(sHead, iCode, sUri, iOffset): print(f"{sHead}: status_code=[{iCode}] for [{sUri}] in offset=[{iOffset}]") #------------------------------------------------------------------------------- def getAllIssues(sUri, dHeaders, dParams): iTotalCount = dParams['limit'] # 全チケット(Issue)数初期値はlimitとする dIssues = None # 戻り値初期設定 # iTotalCountがoffsetより大きい場合HTTPリクエストを繰り返す while iTotalCount > dParams['offset']: # HTTPリクエスト jIssues = requests.get(sUri, headers=dHeaders, params=dParams) # HTTPリクエストステータス確認 if jIssues.status_code == 200: showRequestStatus('INF', jIssues.status_code, sUri, dParams['offset']) # 取得データを辞書に変更して追加 dIssuesCur = jIssues.json() if dIssues is None: dIssues = dIssuesCur else: dIssues['issues'] += dIssuesCur['issues'] # 全チケット数を取得 iTotalCount = dIssues['total_count'] # 1回目レスポンスで正確なチケット数に # offsetのインクリメント dParams['offset'] += dParams['limit'] else: showRequestStatus('ERR', jIssues.status_code, sUri, dParams['offset']) break # 取得終了後dIssuesを戻す return dIssues #=============================================================================== def main(): # getメソッド引数にパラメータ設定を追加する sUri = 'http://localhost:3000/issues.json' dHeaders = {'X-Redmine-API-Key': '8dc1f63aうんぬんかんぬん'} dParams = {'offset': 0, 'limit': 25} # 全Issueリスト取得 dIssues = getAllIssues(sUri, dHeaders, dParams) # Issueリスト表示 if dIssues is None: return 1 for dIssue in dIssues['issues']: iId = dIssue['id'] sSubject = dIssue['subject'] sStatus = dIssue['status']['name'] print(f"INF: id=[{iId}],\tsubject=[{sSubject}],\tstatus=[{sStatus}]") # 終了コード return 0 #=============================================================================== if main() == 0: print("INF: normally finished") else: print("INF: some errors occured") #===============================================================================