def download_single_video(self, video_id: str, base_folder: str = "downloads") -> bool: """下载单个视频和封面到 video_id 文件夹""" info = self.get_video_info(video_id) if not info: return False # 显示视频信息 print("\n" + "=" * 60) print(f"📹 视频信息 - {info['video_id']}") print("=" * 60) print(f"📝 标题: {info['title']}") print(f"⏱️ 时长: {info['duration']}秒") print(f"❤️ 点赞: {info['like_count']}") print(f"👀 播放: {info['view_count']}") print("=" * 60) # 询问是否下载 download_choice = input("\n是否下载该视频?(y/n): ").strip().lower() if download_choice != 'y': print("⏭️ 已跳过下载") return False # 创建文件夹 folder = os.path.join(base_folder, f"{info['title'][:10]}") os.makedirs(folder, exist_ok=True) # 下载视频 video_path = os.path.join(folder, "视频.mp4") print(f"\n📥 下载视频中...") if not self.download_file(info['video_url'], video_path): return False print(f"✅ 视频下载完成") # 下载封面 cover_path = os.path.join(folder, "封面.jpg") print(f"📥 下载封面中...") self.download_file(info['cover'], cover_path) print(f"✅ 封面下载完成") return Truedef download_user_videos(self, user_id: str, base_folder: str = "downloads") -> None: """下载用户所有视频和封面到 user_id/作品_id 文件夹""" result = self.get_user_video_list(user_id) if not result or result['total'] == 0: print("❌ 未获取到视频列表") return # 显示用户视频列表 print("\n" + "=" * 60) print(f"👤 用户 {user_id} 的作品列表") print("=" * 60) for idx, video in enumerate(result['video_list'], 1): print(f"{idx:2d}. {video['title'][:50]}...") print(f" ⏱️ {video['duration']}秒 | ❤️ {video['like_count']} | 👀 {video['view_count']}") print("=" * 60) # 询问是否批量下载 batch_choice = input("\n是否批量下载所有作品?(y/n): ").strip().lower() if batch_choice != 'y': print("⏭️ 已跳过批量下载") return user_folder = os.path.join(base_folder, f"用户_{result['user']}") os.makedirs(user_folder, exist_ok=True) success_count = 0 for idx, video in enumerate(result['video_list'], 1): print(f"\n[{idx}/{result['total']}] 📹 处理作品: {video['video_id']}") print(f" 📝 标题: {video['title'][:50]}...") print(f" ⏱️ {video['duration']}秒 | ❤️ {video['like_count']} | 👀 {video['view_count']}") # 检查视频URL是否有效 if not video['video_url']: print(f" ❌ 视频URL为空,跳过") continue # 创建视频专属文件夹 video_folder = os.path.join(user_folder, f"{idx}_{video['title'][:10]}") os.makedirs(video_folder, exist_ok=True) # 下载视频 video_path = os.path.join(video_folder, "视频.mp4") print(f" 📥 下载视频中...") if self.download_file(video['video_url'], video_path): print(f" ✅ 视频下载完成") # 下载封面(如果有) if video['cover']: cover_path = os.path.join(video_folder, "封面.jpg") print(f" 📥 下载封面中...") self.download_file(video['cover'], cover_path) print(f" ✅ 封面下载完成") success_count += 1 print(f" ✅ 作品处理完成") else: print(f" ❌ 视频下载失败") print("\n" + "=" * 60) print(f"📊 下载统计") print("=" * 60) print(f"✅ 成功: {success_count} 个") print(f"❌ 失败: {result['total'] - success_count} 个") print(f"📁 保存路径: {user_folder}") print("=" * 60)