# requires requests==2.28.2 # requires xmltodict==0.13.0 # requires python-frontmatter==1.0.0 import requests import xmltodict import frontmatter import glob import os import sys api_key = os.environ.get('REDMINE_API_KEY') known_uids = [] url = 'https://chaotikum.org/conferences/all/frab.xml' response = requests.get(url) data = xmltodict.parse(response.content) for day in data['schedule']['day']: if 'event' in day['room']: if '@guid' in day['room']['event']: known_uids.append(day['room']['event']['@guid']) else: for event in day['room']['event']: known_uids.append(event['@guid']) else: for room in day['room']: if '@guid' in room['event']: known_uids.append(room['event']['@guid']) else: for event in room['event']: known_uids.append(event['@guid']) files = glob.glob('_media/*.md') for file in files: post = frontmatter.load(file) if 'uid' in post.keys(): uid = post['uid'] if uid not in known_uids: if api_key is None: print("No environment variable REDMINE_API_KEY present.", file=sys.stderr) sys.exit(1) else: print('new uid, create ticket in redmine') title = post['title'] content = post.content print('Title:' + title) print('uid:' + uid) print(content) # https://www.redmine.org/projects/redmine/wiki/rest_issues # https://www.redmine.org/projects/redmine/wiki/rest_api # https://www.redmine.org/issues/31186 url = f"https://redmine.chaotikum.org/issues.json?key={api_key}" post_content = {} post_content['issue'] = {}; post_content['issue']["project_id"] = 38 post_content['issue']["subject"] = title post_content['issue']["description"] = content post_content['issue']["custom_fields"] = [] uuid_field = {} uuid_field['id'] = 11 uuid_field['value'] = uid uuid_field['name'] = "Video-UUID" post_content['issue']["custom_fields"].append(uuid_field) speaker_field = {} speaker_field['id'] = 8 speaker_field['value'] = "Speaker" speaker_field['name'] = "Sprecher" post_content['issue']["custom_fields"].append(speaker_field) r = requests.post(url=url, json=post_content) print(r.json())