This commit is contained in:
jianzhichu
2025-11-25 14:17:25 +08:00
parent 00aa82e763
commit 898e4c115b
10 changed files with 56 additions and 29 deletions
+22 -20
View File
@@ -130,13 +130,12 @@ namespace dy.net.job
var config = _commonService.GetConfig();
if (config == null)
{
Log.Debug($"{JobType}-请先在设置中初始化配置,再执行同步任务");
Log.Debug($"{JobType}-未获取到系统配置,任务终止!!!");
return;
}
//将配置项打印日志
Console.WriteLine("当前配置如下:");
config.PrintAsTable();
//config.PrintAsTable();
// 2. 从配置中获取每页请求数量
if (config.BatchCount > 0)
@@ -152,11 +151,11 @@ namespace dy.net.job
var cookies = await GetValidCookies();
if (cookies == null || !cookies.Any())
{
Log.Debug($"{JobType}-无可用Cookie,任务终止");
Log.Debug($"{JobType}-无有效Cookie,任务终止!!!");
return;
}
Log.Debug($"{JobType}-当前有{cookies.Count}个cookie开启了同步,即将开始同步");
Log.Debug($"{JobType}-共发现{cookies.Count}个Cookie同步任务即将开始...");
// 6. 遍历每个有效的Cookie,执行同步操作
foreach (var cookie in cookies)
@@ -292,11 +291,11 @@ namespace dy.net.job
// 检查Cookie是否有效
if (!IsCookieValid(cookie))
{
Log.Debug($"{JobType}-Cookie[{cookie.UserName}]无效,跳过");
Log.Debug($"{JobType}-Cookie[{cookie.UserName}]无效,任务终止!!!");
return;
}
Log.Debug($"{JobType}-开始同步 Cookie-[{cookie.UserName}]");
Log.Debug($"{JobType}- Cookie-[{cookie.UserName}]开始同步...");
int syncCount = 0; // 本次同步成功的视频数量
string cursor = "0"; // 初始游标
@@ -309,7 +308,7 @@ namespace dy.net.job
var data = await FetchVideoData(cookie, cursor);
if (data == null)
{
Log.Debug($"{JobType}-Cookie[{cookie.UserName}]取数据失败");
Log.Debug($"{JobType}-Cookie[{cookie.UserName}]取数据失败!!!");
break;
}
@@ -336,7 +335,7 @@ namespace dy.net.job
}
catch (Exception ex)
{
Log.Error(ex, $"{JobType}-处理Cookie[{cookie.Id}]时出错");
Log.Error(ex, $"{JobType}-Cookie[{cookie.Id}]同步出错!!!");
}
}
@@ -361,7 +360,7 @@ namespace dy.net.job
// 如果配置了下载图片视频,则处理图片集并合成视频
if (_downImageVideo)
{
if(config.DownImage||config.DownMp3||config.DownImage)
if(config.DownImageVideo||config.DownMp3||config.DownImage)
{
var mergevideo = await ProcessImageSetAndMergeToVideo(cookie, item, data, config);
if (mergevideo != null)
@@ -406,18 +405,18 @@ namespace dy.net.job
// 如果文件已存在,跳过
if (File.Exists(savePath)) return null;
Log.Debug($"{JobType}-视频[{TikTokFileNameHelper.SanitizePath(item.Desc)}]开始下载");
Log.Debug($"{JobType}-视频[{TikTokFileNameHelper.SanitizePath(item.Desc)}]开始下载...");
// 随机延迟,模拟人类操作
await Task.Delay(_random.Next(1, 4) * 1000);
// 下载视频
if (!await _douyinService.DownloadAsync(videoUrl, savePath, cookie.Cookies))
{
Log.Error($"{JobType}-{item?.Author?.Nickname??""}-视频[{TikTokFileNameHelper.SanitizePath(item.Desc)}]下载失败");
Log.Error($"{JobType}-{item?.Author?.Nickname??""}-视频[{TikTokFileNameHelper.SanitizePath(item.Desc)}]下载失败!!!");
return null;
}
else
{
Log.Debug($"{JobType}-{item?.Author?.Nickname ?? ""}-视频[{TikTokFileNameHelper.SanitizePath(item.Desc)}]下载完成");
Log.Debug($"{JobType}-{item?.Author?.Nickname ?? ""}-视频[{TikTokFileNameHelper.SanitizePath(item.Desc)}]下载完成.");
}
// 下载视频封面
@@ -459,7 +458,7 @@ namespace dy.net.job
// 检查图片保存路径是否配置
if (string.IsNullOrWhiteSpace(cookie.ImgSavePath))
{
Log.Error($"{JobType}-图视频同步-没有配置图片存储路径");
Log.Error($"{JobType}-图视频同步-没有配置图片存储路径,任务终止!!!");
return null;
}
@@ -467,7 +466,7 @@ namespace dy.net.job
var imageService = _serviceProvider.GetService<ImageMergeToVideoService>();
if (imageService == null)
{
Log.Error($"{JobType} -图视频同步-无法实例化 ImageMergeToVideoService。");
Log.Error($"{JobType} -图视频同步异常,请联系作者!!!");
return null;
}
@@ -499,7 +498,7 @@ namespace dy.net.job
var mergeResult = await imageService.MergeToVideo(AppContext.BaseDirectory, reqParams, savePath, fileNamefolder,config.DownImageVideo,config.DownImage,config.DownMp3);
if (!mergeResult)
{
Log.Error($"{JobType}-图视频同步-视频[{TikTokFileNameHelper.SanitizePath(item.Desc)}]合成失败");
Log.Error($"{JobType}-图视频-[{TikTokFileNameHelper.SanitizePath(item.Desc)}]合成失败!!!");
return null;
}
@@ -508,13 +507,13 @@ namespace dy.net.job
// 检查合成后的视频文件是否有效
if (!File.Exists(savePath) || new FileInfo(savePath).Length <= 0)
{
Log.Error($"{JobType}-图视频同步-视频[{TikTokFileNameHelper.SanitizePath(item.Desc)}]合成失败");
Log.Error($"{JobType}-图视频-[{TikTokFileNameHelper.SanitizePath(item.Desc)}]合成失败!!!");
// 清理无效的文件和文件夹
if (Directory.Exists(fileNamefolder))
{
File.Delete(savePath);
Directory.Delete(fileNamefolder, true);
Log.Error($"{JobType}-图视频同步-已删除合成失败的视频文件和目录");
Log.Error($"{JobType}-图视频-删除合成失败的视频文件和目录...");
}
return null;
}
@@ -720,6 +719,8 @@ namespace dy.net.job
/// <returns>一个表示异步操作的任务</returns>
private async Task CleanupFailedVideos(List<DouyinVideo> videos)
{
Log.Debug($"{JobType}-数据库保存失败,开始清理本次下载的视频目录...");
foreach (var video in videos)
{
// 异步删除文件和文件夹,避免阻塞主线程
@@ -736,14 +737,15 @@ namespace dy.net.job
{
Directory.Delete(directory);
}
Log.Debug($"{JobType}-清理失败视频文件成功: {video.VideoSavePath}!!!");
}
catch (Exception ex)
{
Log.Warning(ex, $"{JobType}-清理失败视频文件出错: {video.VideoSavePath}");
Log.Warning(ex, $"{JobType}-清理失败视频文件出错: {video.VideoSavePath}!!!");
}
});
}
Log.Debug($"{JobType}-因数据库保存失败,已清理本次下载的视频目录");
}
/// <summary>