2026-10-13 17:53:17 +08:00
|
|
|
"""抖音视频/图文解析编排层
|
|
|
|
|
|
|
|
|
|
链路(2026-10 起,免浏览器):短链/全链接 → `douyin_web.fetch_douyin_web`
|
|
|
|
|
(短链重定向、签名请求 web detail 接口、最高码率/最高画质下载都在该模块内)。
|
|
|
|
|
旧链路(iesdouyin SSR 静态解析 + playwright 浏览器拦截)已废弃,
|
|
|
|
|
详见 services/fetchers/douyin_web.py 顶部说明。
|
|
|
|
|
"""
|
2026-09-01 13:13:40 +08:00
|
|
|
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
from typing import Optional, Union
|
|
|
|
|
|
|
|
|
|
from nonebot import logger
|
|
|
|
|
|
2026-10-13 17:53:17 +08:00
|
|
|
from ..services.fetchers.douyin_web import fetch_douyin_web
|
2026-09-03 00:44:38 +08:00
|
|
|
from ..utils import get_data_dir, parse_netscape_cookies
|
2026-09-22 14:23:32 +08:00
|
|
|
from ..policy import Policy
|
2026-09-01 13:13:40 +08:00
|
|
|
from .sender import PendingMedia, _as_paths
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def parse_douyin(
|
|
|
|
|
url: str,
|
|
|
|
|
) -> tuple[Optional[str], Optional[Union[Path, list[Path]]], bool]:
|
2026-10-13 17:53:17 +08:00
|
|
|
"""解析抖音链接(短链 / 全链接),返回 (title, file_paths, is_image_post)"""
|
2026-09-01 13:13:40 +08:00
|
|
|
try:
|
2026-09-03 00:44:38 +08:00
|
|
|
cookies_path = get_data_dir() / "cookies.txt"
|
2026-09-01 13:13:40 +08:00
|
|
|
cookies = parse_netscape_cookies(cookies_path)
|
2026-10-13 17:53:17 +08:00
|
|
|
return await fetch_douyin_web(url, cookies)
|
2026-09-01 13:13:40 +08:00
|
|
|
except Exception:
|
2026-10-13 17:53:17 +08:00
|
|
|
logger.exception(f"获取直链失败 {url}")
|
2026-09-01 13:13:40 +08:00
|
|
|
return None, None, False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
async def process_douyin_res(
|
|
|
|
|
title: str,
|
|
|
|
|
file_paths: Union[Path, list[Path]],
|
|
|
|
|
is_private: bool,
|
|
|
|
|
image_post: bool,
|
2026-09-22 14:23:32 +08:00
|
|
|
policy: Policy | None = None,
|
|
|
|
|
platform: str | None = None,
|
2026-09-01 13:13:40 +08:00
|
|
|
) -> tuple[Optional[PendingMedia], Optional[str]]:
|
|
|
|
|
"""下载已完成 → 打包为待发送媒体(不上传、不发送、不清理)
|
|
|
|
|
|
2026-09-22 14:23:32 +08:00
|
|
|
多级发送(temp 本地 → S3 链接 → 回退本地)与群文件上传由
|
|
|
|
|
send_pending_media 统一按 policy 处理;platform 用于群文件限定平台。
|
2026-09-01 13:13:40 +08:00
|
|
|
"""
|
|
|
|
|
if not file_paths:
|
|
|
|
|
return None, None
|
|
|
|
|
return (
|
|
|
|
|
PendingMedia(
|
|
|
|
|
files=_as_paths(file_paths),
|
|
|
|
|
image_post=image_post,
|
|
|
|
|
is_private=is_private,
|
2026-09-22 14:23:32 +08:00
|
|
|
policy=policy,
|
|
|
|
|
platform=platform,
|
2026-09-01 13:13:40 +08:00
|
|
|
title=title,
|
|
|
|
|
),
|
|
|
|
|
None,
|
|
|
|
|
)
|