ytdlp / utils.py
kavion's picture
Fix: Support TikTok photo posts by resolving redirects and normalizing /photo/ to /video/
9b5e11b unverified
Raw
History Blame Contribute Delete
1.23 kB
import json
import re
import urllib.request
from flask import make_response
def jsonify(data, status=200):
"""Custom jsonify dengan indent 2 dan ensure_ascii False."""
response = make_response(json.dumps(data, indent=2, ensure_ascii=False), status)
response.headers["Content-Type"] = "application/json; charset=utf-8"
return response
def validate_tiktok_url(url):
"""Validasi apakah URL adalah URL TikTok yang valid (video atau photo)."""
patterns = [
r'https?://(www\.)?tiktok\.com/@[\w.]+/(video|photo)/\d+/?',
r'https?://(vm|vt)\.tiktok\.com/[\w]+/?',
r'https?://(www\.)?tiktok\.com/t/[\w]+/?',
]
return any(re.match(pattern, url) for pattern in patterns)
def resolve_url(url):
"""Mengikuti redirect URL untuk mendapatkan URL final (misal dari vt.tiktok ke tiktok.com/@user/video/id)."""
try:
req = urllib.request.Request(
url,
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
)
with urllib.request.urlopen(req, timeout=15) as response:
return response.geturl()
except Exception:
return url