透過Redmine API方便控管議題。
參考https://www.redmine.org/projects/redmine/wiki/rest_api
要使用redmine api,header需加上X-Redmine-API-Key,API存取金鑰要從”我的帳戶”取得。

管理議題
Redmine API的議題提供json檢視,用GET取得議題單內容,用PUT更新議題內容和狀態。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 
 | import requests
 
 requests.packages.urllib3.disable_warnings()
 url = 'https://$redmine_url'
 api_key = '$api_key'
 
 def get_issue(issue_no):
 res = requests.get(f'{url}{issue_no}.json?include=journals',
 verify=False,
 headers={'X-Redmine-API-Key': api_key})
 if res.status_code != requests.codes.ok:
 print('失敗', res.status_code)
 return
 issue = res.json()['issue']
 print('主旨:', issue['subject'])
 print('狀態:', issue['status']['name'])
 assigned_to_name = None
 if 'assigned_to' in issue:
 assigned_to_name = issue['assigned_to']['name']
 print('被分派者:', assigned_to_name)
 
 def update_issue(issue_no):
 payload = {
 'issue': {
 'status_id': '5',
 'notes': 'Hello world'
 }
 }
 res = requests.put(f'{url}{issue_no}.json',
 verify=False,
 headers={'X-Redmine-API-Key': api_key},
 json=payload)
 if res.status_code != requests.codes.ok:
 print('失敗', res.status_code)
 return
 print('成功')
 
 | 
填工時
請求內容使用xml格式,資料需encode()後才代入data參數。
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 
 | import requests
 
 requests.packages.urllib3.disable_warnings()
 url = 'https://$redmine_url/time_entries.xml'
 api_key = '$api_key'
 
 def input_time_entry(issue_id, activity_id, hours, comments, date):
 payload = f'<time_entry issue_id="{issue_id}" ' \
 f'activity_id="{activity_id}" hours="{hours}" ' \
 f'comments="{comments}" spent_on="{date}" />'
 print(payload)
 res = requests.post(url,
 verify=False,
 headers={'X-Redmine-API-Key': api_key, 'Content-Type': 'application/xml'},
 data=payload.encode())
 print(res.status_code)
 
 |