54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
# api/utils.py
|
|
|
|
import requests
|
|
|
|
def load_keywords():
|
|
"""Load scam-related keywords from file."""
|
|
try:
|
|
with open("data/scam_keywords.txt", "r", encoding="utf-8") as f:
|
|
# Ensure keywords are converted to lowercase
|
|
return [line.strip().lower() for line in f]
|
|
except FileNotFoundError:
|
|
print("File 'scam_keywords.txt' not found.")
|
|
return []
|
|
|
|
def load_numbers():
|
|
"""Load scam phone numbers from file."""
|
|
try:
|
|
with open("data/scam_numbers.txt", "r", encoding="utf-8") as f:
|
|
return [line.strip() for line in f]
|
|
except FileNotFoundError:
|
|
print("File 'scam_numbers.txt' not found.")
|
|
return []
|
|
|
|
def load_domains():
|
|
"""Load known scam domains from file."""
|
|
try:
|
|
with open("data/scam_domains.txt", "r", encoding="utf-8") as f:
|
|
return [line.strip().lower() for line in f]
|
|
except FileNotFoundError:
|
|
print("File 'scam_domains.txt' not found.")
|
|
return []
|
|
|
|
def load_shorteners():
|
|
"""Load known URL shorteners from file."""
|
|
try:
|
|
with open("data/url_shorteners.txt", "r", encoding="utf-8") as f:
|
|
return [line.strip().lower() for line in f]
|
|
except FileNotFoundError:
|
|
print("File 'url_shorteners.txt' not found.")
|
|
return []
|
|
|
|
def resolve_redirect(url: str) -> str:
|
|
"""
|
|
Resolves redirects for shortened URLs like bit.ly, tinyurl, etc.
|
|
Returns the final URL or the original if redirect fails.
|
|
"""
|
|
try:
|
|
response = requests.head(url, allow_redirects=True, timeout=5)
|
|
return response.url
|
|
except Exception as e:
|
|
print(f"[WARN] Failed to resolve redirect: {e}")
|
|
return url
|
|
|