30 lines
1.2 KiB
Python
30 lines
1.2 KiB
Python
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 |