Initial commit

This commit is contained in:
2025-11-13 13:01:48 +01:00
commit c347078f27
29 changed files with 2185 additions and 0 deletions

30
src/url_utils.py Normal file
View File

@@ -0,0 +1,30 @@
from urllib.parse import urlparse, parse_qs, urlunparse, urlencode
# Liste gängiger Tracking-Parameter, die entfernt werden sollen
TRACKING_PARAMS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'session', 'ref', 'gclid', 'fbclid']
def normalize_url(url):
"""
Normalisiert eine URL, indem Fragmente entfernt und gängige Tracking-Parameter
aus der Query-Komponente entfernt werden.
"""
parsed = urlparse(url)
# 1. Fragment entfernen
# 2. Query-Parameter bereinigen
query_params = parse_qs(parsed.query)
# Tracking-Parameter entfernen
cleaned_params = {k: v for k, v in query_params.items() if k.lower() not in TRACKING_PARAMS}
# Query neu zusammensetzen
# Da parse_qs Listen von Werten zurückgibt, müssen wir sie für urlunparse/urlencode
# in das Standardformat zurückführen (z.B. k=v1&k=v2)
cleaned_query = urlencode(cleaned_params, doseq=True)
# urlunparse erwartet eine Liste von 6 Elementen: scheme, netloc, path, params, query, fragment
normalized_url = urlunparse(parsed._replace(query=cleaned_query, fragment=''))
return normalized_url