import pandas as pd from src.utils.markdown_processing.md_preprocessing import convert_html_to_md from src.persistence.db import * import streamlit_nested_layout @st.cache_resource def init_connection(): return init_db() def render_url_content(element): with st.container(border=True, height=400): md = convert_html_to_md(element["cleaned_html"]) st.markdown(md, unsafe_allow_html=True) db = init_connection() # Titel der App st.title("Übersicht über die Datenbank-Inhalte") st.subheader("Aktuelle Einträge in der DB") st.write(""" - **unsorted_urls**: Enthält Daten-Objekte bestehend aus Start-Urls, Url-Typ (z.b. "city", "theater") sowie vom Crawler gefundene Sub-Urls. - **event_urls**: Enthält Daten-Objekte bestehend aus Url, Referenz zur Basis-Url (Start-Url), Klasse (EventDetail / EventOverview) sowie HTML der Seite""") df = pd.DataFrame({ "DB-Collection":[ CollectionNames.UNSORTED_URLS, CollectionNames.EVENT_URLS], "Anzahl an Einträgen":[ db.unsorted_urls.count_documents({}), db.event_urls.count_documents({})], "Bereits verarbeitet":[ db.unsorted_urls.count_documents({"crawled": True}), db.event_urls.count_documents({"final":True}) ]}) st.table(df) overview_pages = list(db.event_urls.find(filter={"class":"EventOverview", "final":True}, projection={"url":1,"base_url_id":1,"cleaned_html":1})) detail_pages = list(db.event_urls.find(filter={"class":"EventDetail", "final":True}, projection={"url":1,"base_url_id":1,"cleaned_html":1, "data":1}) ) st.subheader("Fertige Einträge in Event Urls:") st.write("Die fertigen Daten sind mithilfe der gpt-api in markdown übersetzt und nur der Veranstaltungsbereich heraus geschnitten.") data = [el for el in detail_pages if "data" in el] st.write(f"Fertig verarbeitete Urls: {len(data)} von {len(detail_pages)}") st.subheader("Einträge in Event Urls") st.write(""" Die Übersicht zeigt die finalen Daten aus **event_urls**, sortiert nach ihrer Klasse.""") with st.expander(f"Event-Übersichtsseiten ({len(overview_pages)})"): for el in overview_pages: try: with st.expander(f"{el['url']} - ({db.unsorted_urls.find_one(filter={'_id':el['base_url_id']}, projection={'url_type':1})['url_type']})"): render_url_content(el) except Exception as e: st.write(f"Fehler: {e}") with st.expander(f"Event-Detailseiten ({len(detail_pages)})"): for el in detail_pages: try: with st.expander(f"{el['url']}"): render_url_content(el) except Exception as e: st.write(f"Fehler bei {el['url']}: {e} ")