Initial commit - fetch Discourse category topics
This commit is contained in:
commit
1d8e18247d
6 changed files with 92 additions and 0 deletions
41
README.md
Normal file
41
README.md
Normal file
|
|
@ -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/)
|
||||
5
dashboard.py
Normal file
5
dashboard.py
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
'''
|
||||
Class to generate a static website based on a csv file
|
||||
'''
|
||||
class Dashboard():
|
||||
pass
|
||||
32
discourse.py
Normal file
32
discourse.py
Normal file
|
|
@ -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)
|
||||
12
main.py
Normal file
12
main.py
Normal file
|
|
@ -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!")
|
||||
2
requirements.txt
Normal file
2
requirements.txt
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
requests==2.32.5
|
||||
Jinja2==3.1.6
|
||||
0
zasoby.csv
Normal file
0
zasoby.csv
Normal file
|
|
Loading…
Add table
Add a link
Reference in a new issue