ss-b-copy / common /utils.py
dws6's picture
Update common/utils.py
9558fea verified
Raw
History Blame Contribute Delete
2.72 kB
# common/utils.py
import urllib.parse
import re
import constants
def normalize_url(url: str) -> str:
parsed = urllib.parse.urlparse(url)
clean = parsed.scheme + "://" + parsed.netloc + parsed.path
return clean.rstrip("/")
def extract_real_video_url(url: str) -> str:
if not url: return ""
parsed_url = urllib.parse.urlparse(url)
query_params = urllib.parse.parse_qs(parsed_url.query)
for param_name, param_values in query_params.items():
for value in param_values:
if value.startswith(('http://', 'https://')):
decoded_value = urllib.parse.unquote(value)
if any(ext in decoded_value.lower() for ext in constants.VIDEO_EXTENSIONS):
return decoded_value
decoded_url = urllib.parse.unquote(url)
if decoded_url != url and any(ext in decoded_url.lower() for ext in constants.VIDEO_EXTENSIONS):
return decoded_url
return url
# ⚖️ Elite Fix: Deterministic Credibility Engine (Rules before AI)
def get_domain_credibility(url):
domain = urllib.parse.urlparse(url).netloc.lower()
if domain.endswith(('.gov', '.edu', '.mil', 'arxiv.org', 'nature.com', 'science.org', 'nasa.gov')):
return "High_Scientific_Gov"
elif domain.endswith(('.org', '.com', '.net')) and any(x in domain for x in ['news', 'bbc', 'cnn', 'reuters', 'natgeo', 'space.com']):
return "Medium_Mainstream_Media"
elif any(x in domain for x in ['reddit', 'medium', 'quora', 'blogspot', 'wordpress', 'pinterest']):
return "Low_Fringe_UGC"
else:
return "Unknown_Evaluate"
# 🛑 NEW: Bouncer for Banned Domains (TikTok, Pinterest, Dailymotion etc.)
def is_banned_domain(url: str) -> bool:
try:
domain = urllib.parse.urlparse(url).netloc.lower()
# इन साइट्स पर कोई आर्टिकल नहीं होता, सिर्फ UI टेक्स्ट होता है
banned_keywords = ['tiktok.com', 'pinterest.', 'dailymotion.com', 'instagram.com', 'facebook.com', 'wattpad.com']
return any(banned in domain for banned in banned_keywords)
except:
return False
# 🎥 NEW: YouTube ID Extractor
def get_youtube_video_id(url: str):
try:
parsed_url = urllib.parse.urlparse(url)
if 'youtube.com' in parsed_url.netloc:
if parsed_url.path == '/watch':
return urllib.parse.parse_qs(parsed_url.query).get('v', [None])[0]
elif parsed_url.path.startswith(('/embed/', '/v/')):
return parsed_url.path.split('/')[2]
elif 'youtu.be' in parsed_url.netloc:
return parsed_url.path[1:]
except:
pass
return None