From 2b1e3a36c0a410d1cccd9226a031fe3178a79fee Mon Sep 17 00:00:00 2001 From: Deimos Date: Mon, 11 Feb 2019 18:30:09 -0700 Subject: [PATCH] Remove Facebook fbclid tracking query param --- tildes/tests/test_url_transform.py | 8 ++++++++ tildes/tildes/lib/url_transform.py | 13 +++++++++++++ 2 files changed, 21 insertions(+) diff --git a/tildes/tests/test_url_transform.py b/tildes/tests/test_url_transform.py index 23db521..b83a9ff 100644 --- a/tildes/tests/test_url_transform.py +++ b/tildes/tests/test_url_transform.py @@ -48,6 +48,14 @@ def test_other_mobile_subdomain_not_removed(): assert cleaned_url == url +def test_facebook_tracking_removed(): + """Ensure that Facebook's "click tracking" query param is removed.""" + url = "https://example.com/?fbclid=qwertyuiopasdfghjkl" + cleaned_url = apply_url_transformations(url) + + assert cleaned_url == "https://example.com/" + + def test_reddit_tracking_removed(): """Ensure that Reddit's "share tracking" query params are removed.""" url = "https://www.reddit.com/r/tildes/comments/8k14is/_/?sort=new&st=abcdefgh&sh=1234asd" diff --git a/tildes/tildes/lib/url_transform.py b/tildes/tildes/lib/url_transform.py index 6b38bc8..0df68b9 100644 --- a/tildes/tildes/lib/url_transform.py +++ b/tildes/tildes/lib/url_transform.py @@ -156,6 +156,19 @@ class TwitterMobileConverter(UrlTransformer): return parsed_url._replace(netloc="twitter.com") +class FacebookTrackingRemover(UrlTransformer): + """Remove Facebook's "click tracking" query parameter (fbclid).""" + + @classmethod + def apply_transformation(cls, parsed_url: ParseResult) -> ParseResult: + """Apply the actual transformation process to the url.""" + query_params = parse_qs(parsed_url.query, keep_blank_values=True) + + query_params.pop("fbclid", None) + + return parsed_url._replace(query=urlencode(query_params, doseq=True)) + + class RedditTrackingRemover(UrlTransformer): """Remove Reddit's "share tracking" query parameters (st and sh)."""