News / redirect_utils.py
Dave67350's picture
Create redirect_utils.py
076e1c4 verified
Raw
History Blame Contribute Delete
1.15 kB
import requests
from urllib.parse import urlparse, parse_qs, unquote
import logging
logger = logging.getLogger(__name__)
import requests
import urllib.parse
def resolve_redirect(url: str, follow_real_redirect=True, timeout=5) -> str:
"""
Resolve final destination URL for Google RSS links and consent redirects.
"""
try:
# Step 1: Handle Google Consent wrapper
parsed = urllib.parse.urlparse(url)
query = urllib.parse.parse_qs(parsed.query)
if parsed.netloc == "consent.google.com" and "continue" in query:
consent_url = query["continue"][0]
if consent_url.startswith("http"):
url = consent_url # unwrap consent
# Step 2: Follow Google News redirect to the real article
if follow_real_redirect and "news.google.com/rss/articles/" in url:
resp = requests.head(url, allow_redirects=True, timeout=timeout, headers={"User-Agent": "Mozilla/5.0"})
if resp.status_code == 200:
return resp.url
except Exception:
pass # fallback silently
return url # return original if resolution fails