Initial commit
This commit is contained in:
30
src/url_utils.py
Normal file
30
src/url_utils.py
Normal 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
|
||||
Reference in New Issue
Block a user