feat(cli): 支持双比例封面参数

This commit is contained in:
yoqu
2026-06-02 16:30:27 +08:00
parent 99a392af2c
commit aa526b6ca8
4 changed files with 232 additions and 40 deletions
+26 -3
View File
@@ -54,6 +54,8 @@ class DouyinVideoUploadRequest:
tags: list[str]
publish_date: datetime | int
thumbnail_file: Path | None = None
thumbnail_landscape_file: Path | None = None
thumbnail_portrait_file: Path | None = None
product_link: str = ""
product_title: str = ""
publish_strategy: str = DOUYIN_PUBLISH_STRATEGY_IMMEDIATE
@@ -148,6 +150,8 @@ class TencentVideoUploadRequest:
tags: list[str]
publish_date: datetime | int
thumbnail_file: Path | None = None
thumbnail_landscape_file: Path | None = None
thumbnail_portrait_file: Path | None = None
short_title: str | None = None
category: str | None = None
is_draft: bool = False
@@ -285,7 +289,12 @@ async def upload_video(request: DouyinVideoUploadRequest) -> Path:
request.publish_date,
str(account_file),
desc=request.description,
thumbnail_portrait_path=str(request.thumbnail_file) if request.thumbnail_file else None,
thumbnail_landscape_path=(
str(request.thumbnail_landscape_file) if request.thumbnail_landscape_file else None
),
thumbnail_portrait_path=str(
request.thumbnail_portrait_file or request.thumbnail_file
) if request.thumbnail_portrait_file or request.thumbnail_file else None,
productLink=request.product_link,
productTitle=request.product_title,
publish_strategy=request.publish_strategy,
@@ -463,6 +472,12 @@ async def upload_tencent_video(request: TencentVideoUploadRequest) -> Path:
is_draft=request.is_draft,
desc=request.description,
thumbnail_path=str(request.thumbnail_file) if request.thumbnail_file else None,
thumbnail_landscape_path=(
str(request.thumbnail_landscape_file) if request.thumbnail_landscape_file else None
),
thumbnail_portrait_path=(
str(request.thumbnail_portrait_file) if request.thumbnail_portrait_file else None
),
short_title=request.short_title,
publish_strategy=request.publish_strategy,
debug=request.debug,
@@ -520,7 +535,9 @@ def build_parser() -> argparse.ArgumentParser:
upload_video_parser.add_argument("--desc", default="", help="Optional video description")
upload_video_parser.add_argument("--tags", default="", help="Comma-separated tags, such as tag1,tag2")
upload_video_parser.add_argument("--schedule", type=schedule_value, help=f"Schedule time in {schedule_help}")
upload_video_parser.add_argument("--thumbnail", type=existing_file_path, help="Optional thumbnail path")
upload_video_parser.add_argument("--thumbnail", type=existing_file_path, help="Optional 3:4 portrait thumbnail path")
upload_video_parser.add_argument("--thumbnail-landscape", type=existing_file_path, help="Optional 4:3 landscape thumbnail path")
upload_video_parser.add_argument("--thumbnail-portrait", type=existing_file_path, help="Optional 3:4 portrait thumbnail path")
upload_video_parser.add_argument("--product-link", default="", help="Optional product link")
upload_video_parser.add_argument("--product-title", default="", help="Optional product title")
add_runtime_flags(upload_video_parser)
@@ -622,7 +639,9 @@ def build_parser() -> argparse.ArgumentParser:
tencent_upload_video_parser.add_argument("--desc", default="", help="Optional video description")
tencent_upload_video_parser.add_argument("--tags", default="", help="Comma-separated tags, such as tag1,tag2")
tencent_upload_video_parser.add_argument("--schedule", type=schedule_value, help=f"Schedule time in {schedule_help}")
tencent_upload_video_parser.add_argument("--thumbnail", type=existing_file_path, help="Optional thumbnail path")
tencent_upload_video_parser.add_argument("--thumbnail", type=existing_file_path, help="Optional 3:4 portrait thumbnail path")
tencent_upload_video_parser.add_argument("--thumbnail-landscape", type=existing_file_path, help="Optional 4:3 landscape thumbnail path")
tencent_upload_video_parser.add_argument("--thumbnail-portrait", type=existing_file_path, help="Optional 3:4 portrait thumbnail path")
tencent_upload_video_parser.add_argument("--short-title", help="Optional WeChat Channels short title")
tencent_upload_video_parser.add_argument("--category", help="Optional original content category")
tencent_upload_video_parser.add_argument("--draft", action="store_true", help="Save as draft instead of publishing")
@@ -655,6 +674,8 @@ async def dispatch(args: argparse.Namespace) -> int:
tags=parse_tags(args.tags),
publish_date=args.schedule or 0,
thumbnail_file=args.thumbnail,
thumbnail_landscape_file=args.thumbnail_landscape,
thumbnail_portrait_file=args.thumbnail_portrait,
product_link=args.product_link,
product_title=args.product_title,
publish_strategy=publish_strategy,
@@ -838,6 +859,8 @@ async def dispatch(args: argparse.Namespace) -> int:
tags=parse_tags(args.tags),
publish_date=args.schedule or 0,
thumbnail_file=args.thumbnail,
thumbnail_landscape_file=args.thumbnail_landscape,
thumbnail_portrait_file=args.thumbnail_portrait,
short_title=args.short_title,
category=args.category,
is_draft=args.draft,