Update CoderDojo CSV script

This commit is contained in:
Yannik Rödel 2023-06-21 08:31:52 +02:00
parent d6a67cce91
commit 06ce52968b
2 changed files with 15 additions and 13 deletions

2
.gitignore vendored
View file

@ -20,5 +20,5 @@ _site/
# Private environments in the HTTP playground folder
/playground/*.private.env.json
coderdojo.csv
/playground/*.csv
/httpd.dev.conf

View file

@ -10,13 +10,15 @@ BASE_URL = "https://ticket.z31.it/api/v1"
session = requests.Session()
session.headers.update({
"Authorization": f"Token token={getpass.getpass(prompt='Zammad-Token eingeben: ')}"
"Authorization": f"Token token={getpass.getpass(prompt='Zammad-Token: ')}"
})
if __name__ == "__main__":
ticket_ids = []
tickets = []
print("Suche nach aktuellen CoderDojo-Anmeldungen…", file=sys.stderr)
print("Formular [CoderDojo-Anmeldung]: ", file=sys.stderr, end="", flush=True)
form_name = input() or "CoderDojo-Anmeldung"
print("Suche nach aktuellen Einträgen…", file=sys.stderr)
has_more = True
page = 1
page_size = 50
@ -24,7 +26,7 @@ if __name__ == "__main__":
response = session.get(
f"{BASE_URL}/tickets/search",
params={
"query": 'tags:"Kontaktformular CoderDojo-Anmeldung"',
"query": f'tags:"Kontaktformular {form_name}"',
"page": str(page),
"per_page": page_size,
}
@ -37,7 +39,7 @@ if __name__ == "__main__":
continue
assert isinstance(ticket["title"], str)
if not ticket["title"].endswith(" CoderDojo-Anmeldung"):
if not ticket["title"].endswith(f" {form_name}"):
continue
assert isinstance(ticket["article_ids"], list)
@ -45,27 +47,27 @@ if __name__ == "__main__":
continue
assert isinstance(ticket["id"], int)
ticket_ids.append(ticket["id"])
tickets.append((ticket["id"], ticket["created_at"]))
page += 1
has_more = len(ticket_dict) == page_size
print(f"{len(ticket_ids)} Anmeldung(en) gefunden. Hole jetzt die Details…", file=sys.stderr)
print(f"{len(tickets)} Element(e) gefunden. Hole jetzt die Details…", file=sys.stderr)
fieldnames = []
fieldnames = ["Zeitstempel"]
rows = []
for ticket_id in ticket_ids:
row = {}
for ticket_id, ticket_timestamp in tickets:
row = {"Zeitstempel": ticket_timestamp}
response = session.get(f"{BASE_URL}/ticket_articles/by_ticket/{ticket_id}")
response.raise_for_status()
articles = response.json()
assert len(articles) >= 2
row.update({"Nachricht": articles[0].get("body", "")})
row.update({"Nachricht": articles[0].get("body", "").replace("\r", "").replace("\n", " ")})
for line in articles[1].get("body", "").split("\n"):
key, value = line.split(": ", 1)
row.update({key: value})
row.update({key: value.replace("\r", "").replace("\n", " ")})
if key not in fieldnames:
fieldnames.append(key)