61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
import json
|
|
import logging
|
|
import re
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
def get_info_json(token_data):
|
|
"""Get infoJson from token_data"""
|
|
if hasattr(token_data, 'infoJson') and token_data.infoJson:
|
|
return token_data.infoJson
|
|
|
|
# Log the issue for debugging
|
|
logger.warning("infoJson attribute missing or empty in token_data")
|
|
logger.info(f"Available attributes: {[attr for attr in dir(token_data) if not attr.startswith('__') and not callable(getattr(token_data, attr))]}")
|
|
|
|
return "{}"
|
|
|
|
def is_valid_json(json_str):
|
|
"""Check if a string is valid JSON and not empty"""
|
|
if not json_str or json_str == "{}" or json_str == "":
|
|
return False
|
|
|
|
try:
|
|
data = json.loads(json_str)
|
|
# Check if it's an empty object
|
|
if isinstance(data, dict) and not data:
|
|
return False
|
|
# Check if it has at least some basic fields
|
|
if isinstance(data, dict) and ('id' in data or 'title' in data):
|
|
return True
|
|
# Check if it has token_data which is important
|
|
if isinstance(data, dict) and 'token_data' in data and data['token_data']:
|
|
return True
|
|
return True
|
|
except Exception as e:
|
|
logger.warning(f"Invalid JSON: {e}")
|
|
return False
|
|
|
|
def extract_video_id(url):
|
|
"""Extract video ID from a YouTube URL"""
|
|
# If it's already a video ID
|
|
if re.match(r'^[a-zA-Z0-9_-]{11}$', url):
|
|
return url
|
|
|
|
# Handle youtu.be URLs
|
|
youtu_be_match = re.search(r'youtu\.be/([a-zA-Z0-9_-]{11})', url)
|
|
if youtu_be_match:
|
|
return youtu_be_match.group(1)
|
|
|
|
# Handle youtube.com URLs
|
|
youtube_match = re.search(r'(?:youtube\.com/(?:watch\?v=|embed/|v/)|youtube\.com/.*[?&]v=)([a-zA-Z0-9_-]{11})', url)
|
|
if youtube_match:
|
|
return youtube_match.group(1)
|
|
|
|
# Handle shorts URLs
|
|
shorts_match = re.search(r'youtube\.com/shorts/([a-zA-Z0-9_-]{11})', url)
|
|
if shorts_match:
|
|
return shorts_match.group(1)
|
|
|
|
return None
|