diff --git a/Program.cs b/Program.cs index fd20f5d..d334844 100644 --- a/Program.cs +++ b/Program.cs @@ -28,6 +28,8 @@ namespace dy.net private static bool downImageVideo = false; public static void Main(string[] args) { + Console.ForegroundColor = ConsoleColor.Yellow; + // ³õʼ»¯±àÂëÌṩÆ÷ Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); // ¹¹½¨WebӦÓà @@ -60,8 +62,18 @@ namespace dy.net // ³õʼ»¯ӦÓ÷þÎñ InitApplicationServices(app); - // Æô¶¯ӦÓà - Log.Debug("dysync.net service started successfully"); + Serilog.Log.Debug("dy.sync service is starting..."); + + Log.Debug("ĬÈÏÉèÖÃ-²©Ö÷×÷Ʒ-ͬ²½ȫ²¿-ÅäÖÃΪ¹رգ¬£¨¿ɵ½ÊÚȨ½çÃ濪Æô£¬²»½¨ÒéȫÁ¿ͬ²½£©"); + Log.Debug("dy.sync service is started successfully"); + Console.WriteLine("------------------------------------------------------------------------"); + Console.WriteLine(@" __ \\ \ / ___|\ \ / \ | ___| + | |\ / \___ \ \ / \ | | + | | | | | |\ | | +____/ _|_)_____/ _| _| \_|\____| + +"); + Console.ResetColor(); app.Run(); } @@ -96,7 +108,7 @@ namespace dy.net services.AddSingleton(new Appsettings (config)); // ѩ»¨IDÉú³ÉÆ÷ - services.AddSnowFlakeId(options => options.WorkId = new Random().Next(1, 127)); + services.AddSnowFlakeId(options => options.WorkId = new Random().Next(1, 100)); // MVC¿ØÖÆÆ÷ services.AddControllers(); @@ -203,8 +215,6 @@ namespace dy.net var quartzJobService = services.GetRequiredService(); quartzJobService.StartJob(config?.Cron ?? "30"); - Serilog.Log.Debug("ϵͳ³õʼ»¯£¬ĬÈϽ«-²©Ö÷×÷Ʒ-ͬ²½ȫ²¿-ÅäÖÃΪ¹رգ¬¿ɵ½ÊÚȨҳÃæÖе÷Õû£¨²»½¨Ò鿪ÆôȫÁ¿ͬ²½£©"); - Serilog.Log.Debug($"ĬÈÏÿ´ζÁȡÐÐÊýΪ:{config.BatchCount}£¬¿ÉǰÍùϵͳÅäÖÃÐ޸Ä"); } catch (Exception ex) { diff --git a/Properties/PublishProfiles/FolderProfile.pubxml.user b/Properties/PublishProfiles/FolderProfile.pubxml.user index 9e52cb7..8e8dc53 100644 --- a/Properties/PublishProfiles/FolderProfile.pubxml.user +++ b/Properties/PublishProfiles/FolderProfile.pubxml.user @@ -5,7 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121. <_PublishTargetUrl>E:\code\dysync\bin\Release\net6.0\publish\ - True|2025-11-24T15:53:54.4283003Z||;True|2025-11-24T23:41:15.8248332+08:00||;True|2025-11-24T23:33:57.1844427+08:00||;True|2025-11-24T23:31:54.9228836+08:00||;True|2025-11-24T23:24:15.8681502+08:00||;True|2025-11-24T23:22:57.9046229+08:00||;True|2025-11-24T23:18:04.1131647+08:00||;True|2025-11-24T22:47:54.1336448+08:00||;True|2025-11-24T22:47:18.3613833+08:00||;True|2025-11-24T08:17:50.3994607+08:00||;True|2025-11-24T08:07:00.9951205+08:00||;True|2025-11-23T23:34:50.0030826+08:00||;True|2025-11-23T23:32:36.7452616+08:00||;True|2025-11-22T23:18:56.3202345+08:00||;True|2025-11-22T22:52:51.7203302+08:00||;True|2025-11-22T22:52:42.9620946+08:00||;True|2025-11-22T22:52:09.8257640+08:00||;True|2025-11-22T22:39:31.5894141+08:00||;True|2025-11-22T22:31:11.0704815+08:00||;True|2025-11-22T22:20:36.4579131+08:00||;True|2025-11-22T22:19:10.2281364+08:00||;True|2025-11-22T19:34:45.9336901+08:00||;True|2025-11-12T23:06:38.7834109+08:00||;False|2025-11-12T23:01:02.2269478+08:00||;True|2025-10-22T22:08:11.6423148+08:00||;True|2025-10-22T21:54:24.7180547+08:00||;True|2025-10-22T21:40:03.5194315+08:00||;True|2025-10-22T21:28:28.8962766+08:00||;True|2025-10-22T21:22:47.9631689+08:00||;True|2025-10-22T21:18:24.5274318+08:00||;True|2025-10-22T21:14:51.6386326+08:00||;False|2025-10-22T21:14:07.6282769+08:00||;True|2025-10-22T21:03:48.9892860+08:00||;True|2025-10-22T21:00:56.3617243+08:00||;False|2025-10-22T21:00:30.5472941+08:00||;True|2025-10-22T20:51:29.6155916+08:00||;False|2025-10-22T20:50:47.1882956+08:00||;True|2025-10-22T15:01:04.1668366+08:00||;True|2025-10-22T14:49:43.6340569+08:00||;True|2025-10-22T14:38:39.4685603+08:00||;True|2025-10-21T18:35:28.8392541+08:00||;True|2025-10-20T10:31:05.5865212+08:00||;True|2025-10-20T10:20:41.5717101+08:00||;True|2025-10-19T10:08:33.6669332+08:00||;False|2025-10-19T10:07:22.3337545+08:00||;False|2025-10-19T10:05:22.9484805+08:00||;True|2025-10-10T16:54:27.1472888+08:00||;False|2025-10-10T16:53:44.1700030+08:00||;False|2025-10-10T16:52:48.1740453+08:00||;False|2025-10-10T16:51:21.5067253+08:00||;False|2025-10-10T16:50:19.2140597+08:00||;False|2025-10-10T16:49:21.2213290+08:00||;False|2025-10-10T16:48:47.7229948+08:00||;False|2025-10-10T16:48:15.1258700+08:00||;True|2025-09-30T13:29:42.2354235+08:00||;True|2025-09-25T11:44:52.6858389+08:00||;True|2025-09-25T11:08:27.8810109+08:00||;True|2025-09-25T09:28:50.2563374+08:00||;True|2025-09-24T16:14:02.3072184+08:00||;True|2025-09-23T22:38:52.4414757+08:00||;True|2025-09-23T22:19:07.1006356+08:00||;True|2025-09-23T22:18:01.5945225+08:00||;True|2025-09-23T22:06:15.6293613+08:00||;True|2025-09-23T21:53:14.2977444+08:00||;True|2025-09-23T21:46:55.2322411+08:00||;False|2025-09-23T21:45:23.7858854+08:00||;False|2025-09-23T21:03:51.8325689+08:00||;True|2025-09-23T10:03:32.2251920+08:00||;False|2025-09-23T09:38:08.2372201+08:00||;False|2025-09-23T09:37:49.9390545+08:00||;True|2024-03-11T21:31:45.8102398+08:00||;True|2024-03-11T07:26:24.7660541+08:00||;True|2024-03-08T22:08:40.0154831+08:00||;True|2024-03-03T10:14:36.8109114+08:00||;True|2024-03-02T18:44:57.3288537+08:00||;True|2024-01-24T17:51:37.9164415+08:00||;True|2024-01-24T16:36:50.5612157+08:00||;True|2024-01-24T15:51:35.7556653+08:00||;True|2024-01-17T23:40:40.7526618+08:00||;True|2024-01-17T23:36:10.3692844+08:00||;True|2024-01-17T23:22:03.2378834+08:00||;True|2024-01-03T11:35:44.7118292+08:00||;True|2024-01-03T11:11:23.4270453+08:00||;True|2024-01-03T11:04:35.2081526+08:00||;True|2024-01-03T10:57:03.7053107+08:00||;True|2024-01-03T10:51:50.7463989+08:00||;False|2024-01-03T10:50:24.9775312+08:00||;True|2024-01-03T10:47:30.1128183+08:00||;True|2024-01-03T10:42:55.8640657+08:00||;True|2024-01-03T09:24:24.3436056+08:00||;True|2024-01-02T23:40:38.2001198+08:00||;True|2024-01-02T23:08:36.7230444+08:00||;True|2024-01-02T22:53:43.9658255+08:00||;True|2024-01-02T22:25:38.5545279+08:00||;False|2024-01-02T22:24:42.6577609+08:00||;True|2024-01-02T22:04:33.4708889+08:00||;True|2024-01-02T21:49:57.9249898+08:00||;True|2023-12-28T22:42:58.5976180+08:00||;True|2023-12-28T22:24:09.2051205+08:00||;True|2023-12-28T22:05:48.4865497+08:00||; + True|2025-11-25T06:08:53.3850967Z||;True|2025-11-24T23:53:54.4283003+08:00||;True|2025-11-24T23:41:15.8248332+08:00||;True|2025-11-24T23:33:57.1844427+08:00||;True|2025-11-24T23:31:54.9228836+08:00||;True|2025-11-24T23:24:15.8681502+08:00||;True|2025-11-24T23:22:57.9046229+08:00||;True|2025-11-24T23:18:04.1131647+08:00||;True|2025-11-24T22:47:54.1336448+08:00||;True|2025-11-24T22:47:18.3613833+08:00||;True|2025-11-24T08:17:50.3994607+08:00||;True|2025-11-24T08:07:00.9951205+08:00||;True|2025-11-23T23:34:50.0030826+08:00||;True|2025-11-23T23:32:36.7452616+08:00||;True|2025-11-22T23:18:56.3202345+08:00||;True|2025-11-22T22:52:51.7203302+08:00||;True|2025-11-22T22:52:42.9620946+08:00||;True|2025-11-22T22:52:09.8257640+08:00||;True|2025-11-22T22:39:31.5894141+08:00||;True|2025-11-22T22:31:11.0704815+08:00||;True|2025-11-22T22:20:36.4579131+08:00||;True|2025-11-22T22:19:10.2281364+08:00||;True|2025-11-22T19:34:45.9336901+08:00||;True|2025-11-12T23:06:38.7834109+08:00||;False|2025-11-12T23:01:02.2269478+08:00||;True|2025-10-22T22:08:11.6423148+08:00||;True|2025-10-22T21:54:24.7180547+08:00||;True|2025-10-22T21:40:03.5194315+08:00||;True|2025-10-22T21:28:28.8962766+08:00||;True|2025-10-22T21:22:47.9631689+08:00||;True|2025-10-22T21:18:24.5274318+08:00||;True|2025-10-22T21:14:51.6386326+08:00||;False|2025-10-22T21:14:07.6282769+08:00||;True|2025-10-22T21:03:48.9892860+08:00||;True|2025-10-22T21:00:56.3617243+08:00||;False|2025-10-22T21:00:30.5472941+08:00||;True|2025-10-22T20:51:29.6155916+08:00||;False|2025-10-22T20:50:47.1882956+08:00||;True|2025-10-22T15:01:04.1668366+08:00||;True|2025-10-22T14:49:43.6340569+08:00||;True|2025-10-22T14:38:39.4685603+08:00||;True|2025-10-21T18:35:28.8392541+08:00||;True|2025-10-20T10:31:05.5865212+08:00||;True|2025-10-20T10:20:41.5717101+08:00||;True|2025-10-19T10:08:33.6669332+08:00||;False|2025-10-19T10:07:22.3337545+08:00||;False|2025-10-19T10:05:22.9484805+08:00||;True|2025-10-10T16:54:27.1472888+08:00||;False|2025-10-10T16:53:44.1700030+08:00||;False|2025-10-10T16:52:48.1740453+08:00||;False|2025-10-10T16:51:21.5067253+08:00||;False|2025-10-10T16:50:19.2140597+08:00||;False|2025-10-10T16:49:21.2213290+08:00||;False|2025-10-10T16:48:47.7229948+08:00||;False|2025-10-10T16:48:15.1258700+08:00||;True|2025-09-30T13:29:42.2354235+08:00||;True|2025-09-25T11:44:52.6858389+08:00||;True|2025-09-25T11:08:27.8810109+08:00||;True|2025-09-25T09:28:50.2563374+08:00||;True|2025-09-24T16:14:02.3072184+08:00||;True|2025-09-23T22:38:52.4414757+08:00||;True|2025-09-23T22:19:07.1006356+08:00||;True|2025-09-23T22:18:01.5945225+08:00||;True|2025-09-23T22:06:15.6293613+08:00||;True|2025-09-23T21:53:14.2977444+08:00||;True|2025-09-23T21:46:55.2322411+08:00||;False|2025-09-23T21:45:23.7858854+08:00||;False|2025-09-23T21:03:51.8325689+08:00||;True|2025-09-23T10:03:32.2251920+08:00||;False|2025-09-23T09:38:08.2372201+08:00||;False|2025-09-23T09:37:49.9390545+08:00||;True|2024-03-11T21:31:45.8102398+08:00||;True|2024-03-11T07:26:24.7660541+08:00||;True|2024-03-08T22:08:40.0154831+08:00||;True|2024-03-03T10:14:36.8109114+08:00||;True|2024-03-02T18:44:57.3288537+08:00||;True|2024-01-24T17:51:37.9164415+08:00||;True|2024-01-24T16:36:50.5612157+08:00||;True|2024-01-24T15:51:35.7556653+08:00||;True|2024-01-17T23:40:40.7526618+08:00||;True|2024-01-17T23:36:10.3692844+08:00||;True|2024-01-17T23:22:03.2378834+08:00||;True|2024-01-03T11:35:44.7118292+08:00||;True|2024-01-03T11:11:23.4270453+08:00||;True|2024-01-03T11:04:35.2081526+08:00||;True|2024-01-03T10:57:03.7053107+08:00||;True|2024-01-03T10:51:50.7463989+08:00||;False|2024-01-03T10:50:24.9775312+08:00||;True|2024-01-03T10:47:30.1128183+08:00||;True|2024-01-03T10:42:55.8640657+08:00||;True|2024-01-03T09:24:24.3436056+08:00||;True|2024-01-02T23:40:38.2001198+08:00||;True|2024-01-02T23:08:36.7230444+08:00||;True|2024-01-02T22:53:43.9658255+08:00||;True|2024-01-02T22:25:38.5545279+08:00||;False|2024-01-02T22:24:42.6577609+08:00||;True|2024-01-02T22:04:33.4708889+08:00||;True|2024-01-02T21:49:57.9249898+08:00||;True|2023-12-28T22:42:58.5976180+08:00||;True|2023-12-28T22:24:09.2051205+08:00||; \ No newline at end of file diff --git a/app/public/logo.png b/app/public/logo.png index c3435d4..af2ad7b 100644 Binary files a/app/public/logo.png and b/app/public/logo.png differ diff --git a/app/src/assets/avatar.png b/app/src/assets/avatar.png index d6f5a0a..0a5c486 100644 Binary files a/app/src/assets/avatar.png and b/app/src/assets/avatar.png differ diff --git a/app/src/assets/avatar_github.png b/app/src/assets/avatar_github.png new file mode 100644 index 0000000..d6f5a0a Binary files /dev/null and b/app/src/assets/avatar_github.png differ diff --git a/app/src/assets/logo.png b/app/src/assets/logo.png index c3435d4..af2ad7b 100644 Binary files a/app/src/assets/logo.png and b/app/src/assets/logo.png differ diff --git a/app/src/assets/logo_111.png b/app/src/assets/logo_111.png new file mode 100644 index 0000000..c3435d4 Binary files /dev/null and b/app/src/assets/logo_111.png differ diff --git a/app/src/pages/workplace/RecordTable.vue b/app/src/pages/workplace/RecordTable.vue index c7c6e3e..2083e4d 100644 --- a/app/src/pages/workplace/RecordTable.vue +++ b/app/src/pages/workplace/RecordTable.vue @@ -13,7 +13,7 @@ 喜欢的 收藏的 关注的 - 图文视频 + 图文视频 @@ -85,7 +85,7 @@ const columns = ref([ const loading = ref(false); interface DataItem {} const datas: UnwrapRef = reactive([]); - +const showImageViedo = ref(false); interface QuaryParam { dates?: string[]; pageIndex: number; @@ -135,6 +135,21 @@ const pagination = ref({ showTotal: () => `共 ${0} 条`, }); +const getConfig = () => { + useApiStore() + .apiGetConfig() + .then((res) => { + if (res.code === 0) { + // 监听环境变量配置,控制是否显示图片视频下载选项 + showImageViedo.value = res.data.downImageVideoFromEnv; + } else { + } + }) + .catch((error) => { + console.error('获取配置失败:', error); + }); +}; + const handleTableChange = (e) => { console.log(e); pagination.value.current = e.current; diff --git a/appsettings.json b/appsettings.json index 3c88295..fad79da 100644 --- a/appsettings.json +++ b/appsettings.json @@ -1,5 +1,5 @@ { "dbconn": "", "dbtype": "Sqlite", - "DOWN_IMGVIDEO": "2" + "DOWN_IMGVIDEO": "" } \ No newline at end of file diff --git a/job/DouyinBaseSyncJob.cs b/job/DouyinBaseSyncJob.cs index beb5b14..9f9fce5 100644 --- a/job/DouyinBaseSyncJob.cs +++ b/job/DouyinBaseSyncJob.cs @@ -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(); 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 /// 一个表示异步操作的任务 private async Task CleanupFailedVideos(List 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}-因数据库保存失败,已清理本次下载的视频目录"); } ///