''' Class to generate a csv file based on data fetched via Discourse REST API ''' import requests import json import csv DISCOURSE_URL = "https://kb.hs3.pl" # Database is hosted here CATEGORY_ID = 9 # Database category ID class DiscourseDatabase(): def __init__(self): data = self.get_category_data() self.category_topics_csv(data) def get_category_data(self) -> requests.Response: """Get data from a Discourse category""" headers = { "content-type": "application/json", } url = f"{DISCOURSE_URL}/c/{CATEGORY_ID}.json" print(f"Fetching data from {url}") res = requests.get(url, headers) res.raise_for_status() res_json = json.loads(res.text) return res_json def category_topics_csv(self, category_data) -> None: """Save category topics to a csv file""" columns = ["id", "title", "place", "tags"] records = category_data["topic_list"]["topics"] with open('zasoby.csv', 'w', encoding='UTF8') as f: write = csv.writer(f) write.writerow(columns) for topic in records: html_url = f'{topic["title"]}' place = self.get_place(topic) write.writerow([topic["id"], html_url, place, topic["tags"]]) print(f"New zasoby.csv generated with {len(records)} records") def get_place(self, topic): """Get place of a topic""" places = ["cow-work", "garage", "workshop"] for place in places: if place in topic["tags"]: return f'{place}' return "unknown"