From 1d8e18247d09d2d9180f0662765cd723029a0ce1 Mon Sep 17 00:00:00 2001 From: Marta Sienkiewicz Date: Sun, 11 Jan 2026 15:56:30 +0100 Subject: [PATCH] Initial commit - fetch Discourse category topics --- README.md | 41 +++++++++++++++++++++++++++++++++++++++++ dashboard.py | 5 +++++ discourse.py | 32 ++++++++++++++++++++++++++++++++ main.py | 12 ++++++++++++ requirements.txt | 2 ++ zasoby.csv | 0 6 files changed, 92 insertions(+) create mode 100644 README.md create mode 100644 dashboard.py create mode 100644 discourse.py create mode 100644 main.py create mode 100644 requirements.txt create mode 100644 zasoby.csv diff --git a/README.md b/README.md new file mode 100644 index 0000000..04a3df0 --- /dev/null +++ b/README.md @@ -0,0 +1,41 @@ +# HS3 Baza zasobów Dashboard + +Skrypt, który generuje podsumowanie [Bazy Wiedzy zasobów Hackerspace Trójmiasto](https://kb.hs3.pl/docs) w formie statycznej strony internetowej. + +## Sposób działania + +1. Baza Wiedzy znajduje się na Discourse Hackerspace Trójmiasto i jest dostępna publicznie. Projekt wykorzystuje Discourse REST API do pobrania listy zasobów. +1. Lista zasobów zapisana jest w pliku csv `zasoby.csv`. +1. Skrypt tworzy statyczną stronę internetową na podstawie pliku `.csv`. +1. Strona jest hostowana przy pomocy GitHub Pages. + +## Możliwości generatora bazy zasobów csv + +- pobieranie listy wszystkich zasobów z wybranej kategorii +- pobieranie ID, tagów i treści posta każdego zasobu +- wyłuskanie z treści posta informacji: + - nazwa przedmiotu + - miejsce zamieszkania + - ilość + - opiekunowie +- oto jak powinien wyglądać ostateczny wpis: + +``` +ID, nazwa, miejsce, ilość, opiekunowie, tagi +``` + +## Możliwości dashboard'u + +- filtrowanie bazy zasobów po tagach +- sortowanie alfabetyczne bazy zasobów po dowolnej kolumnie +- linki do zasobu na Discourse w ID zasobu +- łatwa zmiana ilości kolumn dashboardu + +## Co chcę dodać w przyszłości + +- wizualizacja statystyk z bazy zasobów +- generowanie drugiego pliku csv służącego do wygenerowania naklejek z kodem QR + +## Dokumentacja + +- [Discourse REST API](https://docs.discourse.org/) \ No newline at end of file diff --git a/dashboard.py b/dashboard.py new file mode 100644 index 0000000..e62e05b --- /dev/null +++ b/dashboard.py @@ -0,0 +1,5 @@ +''' +Class to generate a static website based on a csv file +''' +class Dashboard(): + pass \ No newline at end of file diff --git a/discourse.py b/discourse.py new file mode 100644 index 0000000..7779bdd --- /dev/null +++ b/discourse.py @@ -0,0 +1,32 @@ +''' +Class to generate a csv file based on data fetched via Discourse REST API +''' +import requests +import json + +class Discourse(): + def __init__(self, url): + self.url = url + + def get_category_data(self, category_id: str) -> requests.Response: + """Get data related to a Discourse category""" + headers = { + "content-type": "application/json", + } + url = f"{self.url}/c/{category_id}.json" + res = requests.get(url, headers) + res.raise_for_status() + + res_json = json.loads(res.text) + return res_json + + def get_category_topics(self, category_id: str) -> requests.Response: + """Get topics from a Discourse category""" + cat_data = self.get_category_data(category_id) + for topic in cat_data["topic_list"]["topics"]: + print(f'{topic["id"]}, {topic["title"]}, {topic["tags"]}, {self.url}t/{topic["id"]}') + + +if __name__=="__main__": + dis = Discourse("https://kb.hs3.pl/") + dis.get_category_topics(9) diff --git a/main.py b/main.py new file mode 100644 index 0000000..f5aa226 --- /dev/null +++ b/main.py @@ -0,0 +1,12 @@ +DISCOURSE_URL = "https://kb.hs3.pl/" # Database is hosted here +DISCOURSE_CATEGORY = 9 # Database is stored in this Discourse category + +from discourse import Discourse + +if __name__ == "__main__": + print(f"Discourse database: f{DISCOURSE_URL}/{DISCOURSE_CATEGORY}") + print("Fetching database data to zasoby.csv...") + dis = Discourse(DISCOURSE_URL) + + print("Generating HTML dashboard...") + print("Done!") \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..1653825 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +requests==2.32.5 +Jinja2==3.1.6 \ No newline at end of file diff --git a/zasoby.csv b/zasoby.csv new file mode 100644 index 0000000..e69de29