38 lines
868 B
Python
38 lines
868 B
Python
|
|
import re
|
||
|
|
from urllib.parse import urlparse
|
||
|
|
from typing import Optional
|
||
|
|
|
||
|
|
|
||
|
|
def validate_url(url: str) -> bool:
|
||
|
|
try:
|
||
|
|
result = urlparse(url)
|
||
|
|
return all([result.scheme, result.netloc])
|
||
|
|
except:
|
||
|
|
return False
|
||
|
|
|
||
|
|
|
||
|
|
def sanitize_filename(filename: str, max_length: int = 200) -> str:
|
||
|
|
invalid_chars = r'[<>:"/\\|?*\x00-\x1f]'
|
||
|
|
filename = re.sub(invalid_chars, '_', filename)
|
||
|
|
filename = filename.strip('. ')
|
||
|
|
|
||
|
|
if len(filename) > max_length:
|
||
|
|
filename = filename[:max_length]
|
||
|
|
|
||
|
|
return filename or 'untitled'
|
||
|
|
|
||
|
|
|
||
|
|
def parse_url_type(url: str) -> Optional[str]:
|
||
|
|
if 'v.douyin.com' in url:
|
||
|
|
return 'video'
|
||
|
|
|
||
|
|
path = urlparse(url).path
|
||
|
|
|
||
|
|
if '/video/' in path:
|
||
|
|
return 'video'
|
||
|
|
if '/user/' in path:
|
||
|
|
return 'user'
|
||
|
|
if '/note/' in path or '/gallery/' in path:
|
||
|
|
return 'gallery'
|
||
|
|
return None
|