优化
This commit is contained in:
@@ -5,7 +5,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
|
|||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<_PublishTargetUrl>F:\work\code\me\dysync.net\bin\Release\net6.0\publish\</_PublishTargetUrl>
|
<_PublishTargetUrl>F:\work\code\me\dysync.net\bin\Release\net6.0\publish\</_PublishTargetUrl>
|
||||||
<History>True|2025-10-20T02:31:05.5865212Z||;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|2023-12-28T21:50:57.4549336+08:00||;True|2023-12-28T21:45:30.4557939+08:00||;True|2023-12-28T21:19:59.3614594+08:00||;False|2023-12-28T21:17:04.3069097+08:00||;False|2023-12-28T21:15:56.7788810+08:00||;False|2023-12-28T21:14:57.3617402+08:00||;False|2023-12-28T21:10:45.4382469+08:00||;True|2023-12-28T19:45:33.1431914+08:00||;True|2023-12-26T11:30:36.6418716+08:00||;True|2023-12-26T11:17:40.6433651+08:00||;True|2023-12-26T09:13:56.0741559+08:00||;True|2023-12-26T09:10:55.5358737+08:00||;True|2023-12-25T23:15:34.6534359+08:00||;True|2023-12-25T23:09:47.1566176+08:00||;False|2023-12-25T23:07:32.1118803+08:00||;True|2023-12-25T22:59:50.4643459+08:00||;True|2023-12-25T22:50:14.3584798+08:00||;False|2023-12-25T22:49:20.0279513+08:00||;True|2023-12-25T22:44:07.4183973+08:00||;True|2023-12-25T22:35:27.3847085+08:00||;True|2023-12-25T22:23:21.3542658+08:00||;True|2023-12-25T22:12:00.5219522+08:00||;True|2023-12-25T16:52:12.5089621+08:00||;True|2023-12-25T16:43:30.8348193+08:00||;True|2023-12-25T16:35:08.2421925+08:00||;True|2023-12-25T16:25:21.3233455+08:00||;False|2023-12-25T16:24:39.1703901+08:00||;True|2023-12-25T16:24:01.4340091+08:00||;True|2023-12-25T16:10:06.5213850+08:00||;True|2023-12-25T15:42:17.1376331+08:00||;True|2023-12-25T15:29:47.8537015+08:00||;True|2023-12-25T14:04:54.3750643+08:00||;False|2023-12-25T14:04:07.9330700+08:00||;True|2023-12-25T13:51:58.1949269+08:00||;True|2023-12-25T13:41:42.4832670+08:00||;True|2023-12-25T13:00:25.3861450+08:00||;True|2023-12-25T12:48:45.3851245+08:00||;True|2023-12-25T12:46:54.1266013+08:00||;True|2023-12-25T12:37:03.2615780+08:00||;False|2023-12-25T12:36:06.2657224+08:00||;True|2023-12-25T12:31:59.6032354+08:00||;</History>
|
<History>True|2025-10-21T10:35:28.8392541Z||;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|2023-12-28T21:50:57.4549336+08:00||;True|2023-12-28T21:45:30.4557939+08:00||;True|2023-12-28T21:19:59.3614594+08:00||;False|2023-12-28T21:17:04.3069097+08:00||;False|2023-12-28T21:15:56.7788810+08:00||;False|2023-12-28T21:14:57.3617402+08:00||;False|2023-12-28T21:10:45.4382469+08:00||;True|2023-12-28T19:45:33.1431914+08:00||;True|2023-12-26T11:30:36.6418716+08:00||;True|2023-12-26T11:17:40.6433651+08:00||;True|2023-12-26T09:13:56.0741559+08:00||;True|2023-12-26T09:10:55.5358737+08:00||;True|2023-12-25T23:15:34.6534359+08:00||;True|2023-12-25T23:09:47.1566176+08:00||;False|2023-12-25T23:07:32.1118803+08:00||;True|2023-12-25T22:59:50.4643459+08:00||;True|2023-12-25T22:50:14.3584798+08:00||;False|2023-12-25T22:49:20.0279513+08:00||;True|2023-12-25T22:44:07.4183973+08:00||;True|2023-12-25T22:35:27.3847085+08:00||;True|2023-12-25T22:23:21.3542658+08:00||;True|2023-12-25T22:12:00.5219522+08:00||;True|2023-12-25T16:52:12.5089621+08:00||;True|2023-12-25T16:43:30.8348193+08:00||;True|2023-12-25T16:35:08.2421925+08:00||;True|2023-12-25T16:25:21.3233455+08:00||;False|2023-12-25T16:24:39.1703901+08:00||;True|2023-12-25T16:24:01.4340091+08:00||;True|2023-12-25T16:10:06.5213850+08:00||;True|2023-12-25T15:42:17.1376331+08:00||;True|2023-12-25T15:29:47.8537015+08:00||;True|2023-12-25T14:04:54.3750643+08:00||;False|2023-12-25T14:04:07.9330700+08:00||;True|2023-12-25T13:51:58.1949269+08:00||;True|2023-12-25T13:41:42.4832670+08:00||;True|2023-12-25T13:00:25.3861450+08:00||;True|2023-12-25T12:48:45.3851245+08:00||;True|2023-12-25T12:46:54.1266013+08:00||;True|2023-12-25T12:37:03.2615780+08:00||;False|2023-12-25T12:36:06.2657224+08:00||;</History>
|
||||||
<LastFailureDetails />
|
<LastFailureDetails />
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -89,38 +89,33 @@ docker run -d --restart=always \
|
|||||||
### Arm设备请使用 registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:arm_0.1.1 版本镜像
|
### Arm设备请使用 registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net:arm_0.1.1 版本镜像
|
||||||
创建 docker-compose.yml 文件,复制以下内容,替换「本地路径」后执行 docker-compose up -d:
|
创建 docker-compose.yml 文件,复制以下内容,替换「本地路径」后执行 docker-compose up -d:
|
||||||
|
|
||||||
```yaml
|
|
||||||
version: '3.8'
|
version: '3.8'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
dysync:
|
dysync:
|
||||||
image: registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net
|
image: registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net
|
||||||
container_name: dysync2025 # 容器名称可自定义
|
container_name: dysync2025
|
||||||
restart: always # 容器异常退出时自动重启
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- "10101:10101" # 端口映射:本地端口:容器端口(容器端口10101不可修改)
|
- "10101:10101"
|
||||||
volumes:
|
volumes:
|
||||||
# 第一个账号:收藏视频存储路径(本地路径:容器路径)
|
- /volume1/docker/dysync/db:/app/db
|
||||||
- /本地/收藏视频路径:/app/collect
|
|
||||||
# 第一个账号:喜欢视频存储路径(本地路径:容器路径)
|
- /volume2/mediay/dysync:/app/collect
|
||||||
- /本地/喜欢视频路径:/app/favorite
|
- /volume2/mediay/dysync_fav:/app/favorite
|
||||||
# 数据库存储路径(持久化配置和同步记录)
|
- /volume2/mediay/dysync_up:/app/uper
|
||||||
- /本地/数据库路径:/app/db
|
# 下面是多账号路径映射示例(可选)
|
||||||
# 指定博主视频存储路径
|
- /volume2/mediay/dysync2:/app/yeyeye
|
||||||
- /本地/博主视频路径:/app/uper
|
- /volume2/mediay/dysync2_fav:/app/yeyeye_fav
|
||||||
# 多账号示例:第二个账号视频存储路径(需在后台对应配置)
|
- /volume2/mediay/dysync2_up:/app/yeyeye_up
|
||||||
- /本地/第二个账号视频路径:/app/yeyeye
|
# 配置DNS服务器(解决域名解析失败导致的无法访问外网)
|
||||||
# (可选)环境变量配置(取消注释并修改)
|
network_mode: bridge
|
||||||
# environment:
|
dns:
|
||||||
# - ENV_VAR_NAME=value
|
- 8.8.8.8 # Google DNS
|
||||||
# (可选)自定义网络配置(取消注释并修改)
|
- 114.114.114.114 # 国内DNS
|
||||||
# networks:
|
- 223.5.5.5
|
||||||
# - custom_network
|
|
||||||
|
|
||||||
# (可选)自定义网络配置
|
|
||||||
# networks:
|
|
||||||
# custom_network:
|
|
||||||
# driver: bridge
|
|
||||||
```
|
```
|
||||||
## 🚀 5. 软件截图
|
## 🚀 5. 软件截图
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ActiveDebugProfile>tiny.ddns</ActiveDebugProfile>
|
<ActiveDebugProfile>tiny.ddns</ActiveDebugProfile>
|
||||||
<NameOfLastUsedPublishProfile>FolderProfile</NameOfLastUsedPublishProfile>
|
<NameOfLastUsedPublishProfile>F:\work\code\me\dysync.net\Properties\PublishProfiles\FolderProfile.pubxml</NameOfLastUsedPublishProfile>
|
||||||
<Controller_SelectedScaffolderID>ApiControllerEmptyScaffolder</Controller_SelectedScaffolderID>
|
<Controller_SelectedScaffolderID>ApiControllerEmptyScaffolder</Controller_SelectedScaffolderID>
|
||||||
<Controller_SelectedScaffolderCategoryPath>root/Common/Api</Controller_SelectedScaffolderCategoryPath>
|
<Controller_SelectedScaffolderCategoryPath>root/Common/Api</Controller_SelectedScaffolderCategoryPath>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|||||||
@@ -117,11 +117,7 @@ namespace dy.net.job
|
|||||||
var tag3 = tags.FirstOrDefault(x => x.Level == 3)?.TagName;
|
var tag3 = tags.FirstOrDefault(x => x.Level == 3)?.TagName;
|
||||||
string saveFolder = CreateSaveFolder(cookie, item, tag1, tag2);
|
string saveFolder = CreateSaveFolder(cookie, item, tag1, tag2);
|
||||||
|
|
||||||
// 创建文件夹(提前创建,避免下载时才操作)
|
|
||||||
if (!Directory.Exists(saveFolder))
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(saveFolder);
|
|
||||||
}
|
|
||||||
var fileName = $"{item.AwemeId}.{v.Format}"; // 用ID做文件名,避免特殊字符
|
var fileName = $"{item.AwemeId}.{v.Format}"; // 用ID做文件名,避免特殊字符
|
||||||
var savePath = Path.Combine(saveFolder, fileName);
|
var savePath = Path.Combine(saveFolder, fileName);
|
||||||
|
|
||||||
@@ -130,7 +126,16 @@ namespace dy.net.job
|
|||||||
Serilog.Log.Debug($"collect-视频[{SanitizePath(item.Desc)}]开始下载");
|
Serilog.Log.Debug($"collect-视频[{SanitizePath(item.Desc)}]开始下载");
|
||||||
await Task.Delay(_random.Next(1, 4) * 1000);
|
await Task.Delay(_random.Next(1, 4) * 1000);
|
||||||
var downVideo = await _douyinService.DownloadAsync(videoUrl, savePath, cookie.Cookies);
|
var downVideo = await _douyinService.DownloadAsync(videoUrl, savePath, cookie.Cookies);
|
||||||
Serilog.Log.Debug($"collect-视频[{SanitizePath(item.Desc)}]下载{(downVideo ? "成功" : "失败")}");
|
|
||||||
|
if (downVideo)
|
||||||
|
{
|
||||||
|
Serilog.Log.Debug($"collect-视频[{SanitizePath(item.Desc)}]下载{(downVideo ? "成功" : "失败")}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Serilog.Log.Error($"collect-视频[{SanitizePath(item.Desc)}]下载{(downVideo ? "成功" : "失败")}");
|
||||||
|
|
||||||
|
}
|
||||||
if (downVideo)
|
if (downVideo)
|
||||||
{
|
{
|
||||||
await DownVideoCover(item, saveFolder, cookie.Cookies);
|
await DownVideoCover(item, saveFolder, cookie.Cookies);
|
||||||
@@ -323,7 +328,14 @@ namespace dy.net.job
|
|||||||
// 路径中避免特殊字符,用ID替代描述
|
// 路径中避免特殊字符,用ID替代描述
|
||||||
var safeTag1 = string.IsNullOrWhiteSpace(tag1) ? "other" : SanitizePath(tag1);
|
var safeTag1 = string.IsNullOrWhiteSpace(tag1) ? "other" : SanitizePath(tag1);
|
||||||
List<string> pathParts = new List<string> { cookie.SavePath, safeTag1 };
|
List<string> pathParts = new List<string> { cookie.SavePath, safeTag1 };
|
||||||
return Path.Combine(pathParts[0], string.Join("-", pathParts.Skip(1)), SanitizePath(item.Desc) + "@" + item.AwemeId);
|
var saveFolder = Path.Combine(pathParts[0], string.Join("-", pathParts.Skip(1)), SanitizePath(item.Desc) + "@" + item.AwemeId);
|
||||||
|
|
||||||
|
// 创建文件夹(提前创建,避免下载时才操作)
|
||||||
|
if (!Directory.Exists(saveFolder))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(saveFolder);
|
||||||
|
}
|
||||||
|
return saveFolder;
|
||||||
//if (string.IsNullOrWhiteSpace(tag2))
|
//if (string.IsNullOrWhiteSpace(tag2))
|
||||||
// return Path.Combine(pathParts[0], string.Join("-", pathParts.Skip(1)), SanitizePath(item.Desc) + "@" + item.AwemeId);
|
// return Path.Combine(pathParts[0], string.Join("-", pathParts.Skip(1)), SanitizePath(item.Desc) + "@" + item.AwemeId);
|
||||||
//else
|
//else
|
||||||
|
|||||||
@@ -118,11 +118,6 @@ namespace dy.net.job
|
|||||||
var tag3 = tags.FirstOrDefault(x => x.Level == 3)?.TagName;
|
var tag3 = tags.FirstOrDefault(x => x.Level == 3)?.TagName;
|
||||||
string saveFolder = CreateSaveFolder(cookie, item, tag1, tag2);
|
string saveFolder = CreateSaveFolder(cookie, item, tag1, tag2);
|
||||||
|
|
||||||
// 创建文件夹(提前创建,避免下载时才操作)
|
|
||||||
if (!Directory.Exists(saveFolder))
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(saveFolder);
|
|
||||||
}
|
|
||||||
var fileName = $"{item.AwemeId}.{v.Format}"; // 用ID做文件名,避免特殊字符
|
var fileName = $"{item.AwemeId}.{v.Format}"; // 用ID做文件名,避免特殊字符
|
||||||
var savePath = Path.Combine(saveFolder, fileName);
|
var savePath = Path.Combine(saveFolder, fileName);
|
||||||
|
|
||||||
@@ -131,7 +126,15 @@ namespace dy.net.job
|
|||||||
Serilog.Log.Debug($"favorite-视频[{SanitizePath(item.Desc)}]开始下载");
|
Serilog.Log.Debug($"favorite-视频[{SanitizePath(item.Desc)}]开始下载");
|
||||||
await Task.Delay(_random.Next(1, 4) * 1000);
|
await Task.Delay(_random.Next(1, 4) * 1000);
|
||||||
var downVideo = await _douyinService.DownloadAsync(videoUrl, savePath, cookie.Cookies);
|
var downVideo = await _douyinService.DownloadAsync(videoUrl, savePath, cookie.Cookies);
|
||||||
Serilog.Log.Debug($"favorite-视频[{SanitizePath(item.Desc)}]下载{(downVideo ? "成功" : "失败")}");
|
|
||||||
|
if (downVideo)
|
||||||
|
{
|
||||||
|
Serilog.Log.Debug($"favorite-视频[{SanitizePath(item.Desc)}]下载{(downVideo ? "成功" : "失败")}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Serilog.Log.Error($"favorite-视频[{SanitizePath(item.Desc)}]下载{(downVideo ? "成功" : "失败")}");
|
||||||
|
}
|
||||||
if (downVideo)
|
if (downVideo)
|
||||||
{
|
{
|
||||||
await DownVideoCover(item, saveFolder, cookie.Cookies);
|
await DownVideoCover(item, saveFolder, cookie.Cookies);
|
||||||
@@ -327,7 +330,14 @@ namespace dy.net.job
|
|||||||
// 路径中避免特殊字符,用ID替代描述
|
// 路径中避免特殊字符,用ID替代描述
|
||||||
var safeTag1 = string.IsNullOrWhiteSpace(tag1) ? "other" : SanitizePath(tag1);
|
var safeTag1 = string.IsNullOrWhiteSpace(tag1) ? "other" : SanitizePath(tag1);
|
||||||
List<string> pathParts = new List<string> { cookie.FavSavePath, safeTag1 };
|
List<string> pathParts = new List<string> { cookie.FavSavePath, safeTag1 };
|
||||||
return Path.Combine(pathParts[0], string.Join("-", pathParts.Skip(1)), SanitizePath(item.Desc) + "@" + item.AwemeId);
|
var saveFolder= Path.Combine(pathParts[0], string.Join("-", pathParts.Skip(1)), SanitizePath(item.Desc) + "@" + item.AwemeId);
|
||||||
|
|
||||||
|
// 创建文件夹(提前创建,避免下载时才操作)
|
||||||
|
if (!Directory.Exists(saveFolder))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(saveFolder);
|
||||||
|
}
|
||||||
|
return saveFolder;
|
||||||
//if (string.IsNullOrWhiteSpace(tag2))
|
//if (string.IsNullOrWhiteSpace(tag2))
|
||||||
// return Path.Combine(pathParts[0], string.Join("-", pathParts.Skip(1)), SanitizePath(item.Desc) + "@" + item.AwemeId);
|
// return Path.Combine(pathParts[0], string.Join("-", pathParts.Skip(1)), SanitizePath(item.Desc) + "@" + item.AwemeId);
|
||||||
//else
|
//else
|
||||||
|
|||||||
@@ -125,13 +125,9 @@ namespace dy.net.job
|
|||||||
var tag1 = tags.FirstOrDefault(x => x.Level == 1)?.TagName;
|
var tag1 = tags.FirstOrDefault(x => x.Level == 1)?.TagName;
|
||||||
var tag2 = tags.FirstOrDefault(x => x.Level == 2)?.TagName;
|
var tag2 = tags.FirstOrDefault(x => x.Level == 2)?.TagName;
|
||||||
var tag3 = tags.FirstOrDefault(x => x.Level == 3)?.TagName;
|
var tag3 = tags.FirstOrDefault(x => x.Level == 3)?.TagName;
|
||||||
string saveFolder = CreateSaveFolder(cookie, item, tag1, tag2);
|
string saveFolder = CreateSaveFolder(cookie, uper.uper);
|
||||||
|
|
||||||
|
|
||||||
// 创建文件夹(提前创建,避免下载时才操作)
|
|
||||||
if (!Directory.Exists(saveFolder))
|
|
||||||
{
|
|
||||||
Directory.CreateDirectory(saveFolder);
|
|
||||||
}
|
|
||||||
var fileName = $"{item.AwemeId}.{v.Format}"; // 用ID做文件名,避免特殊字符
|
var fileName = $"{item.AwemeId}.{v.Format}"; // 用ID做文件名,避免特殊字符
|
||||||
var savePath = Path.Combine(saveFolder, fileName);
|
var savePath = Path.Combine(saveFolder, fileName);
|
||||||
|
|
||||||
@@ -140,7 +136,14 @@ namespace dy.net.job
|
|||||||
Serilog.Log.Debug($"dyuploder-[{uper.uper}]-视频[{SanitizePath(item.Desc)}]开始下载");
|
Serilog.Log.Debug($"dyuploder-[{uper.uper}]-视频[{SanitizePath(item.Desc)}]开始下载");
|
||||||
await Task.Delay(_random.Next(1, 4) * 1000);
|
await Task.Delay(_random.Next(1, 4) * 1000);
|
||||||
var downVideo = await _douyinService.DownloadAsync(videoUrl, savePath, cookie.Cookies);
|
var downVideo = await _douyinService.DownloadAsync(videoUrl, savePath, cookie.Cookies);
|
||||||
Serilog.Log.Debug($"dyuploder-[{uper.uper}]-视频[{SanitizePath(item.Desc)}]下载{(downVideo ? "成功" : "失败")}");
|
if(downVideo)
|
||||||
|
{
|
||||||
|
Serilog.Log.Debug($"dyuploder-[{uper.uper}]-视频[{SanitizePath(item.Desc)}]下载{(downVideo ? "成功" : "失败")}");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Serilog.Log.Error($"dyuploder-[{uper.uper}]-视频[{SanitizePath(item.Desc)}]下载{(downVideo ? "成功" : "失败")}");
|
||||||
|
}
|
||||||
if (downVideo)
|
if (downVideo)
|
||||||
{
|
{
|
||||||
await DownVideoCover(item, saveFolder, cookie.Cookies);
|
await DownVideoCover(item, saveFolder, cookie.Cookies);
|
||||||
@@ -154,7 +157,7 @@ namespace dy.net.job
|
|||||||
// 有可能下载大头像失败,尝试用缩略图地址
|
// 有可能下载大头像失败,尝试用缩略图地址
|
||||||
if (string.IsNullOrWhiteSpace(avatarUrl))
|
if (string.IsNullOrWhiteSpace(avatarUrl))
|
||||||
{
|
{
|
||||||
avatarUrl=item.Author?.AvatarThumb?.UrlList != null && item.Author.AvatarThumb.UrlList.Any()
|
avatarUrl = item.Author?.AvatarThumb?.UrlList != null && item.Author.AvatarThumb.UrlList.Any()
|
||||||
? item.Author.AvatarThumb.UrlList[0] : null;
|
? item.Author.AvatarThumb.UrlList[0] : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,16 +329,21 @@ namespace dy.net.job
|
|||||||
/// 创建目录
|
/// 创建目录
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="cookie"></param>
|
/// <param name="cookie"></param>
|
||||||
/// <param name="item"></param>
|
/// <param name="uperName"></param>
|
||||||
/// <param name="tag1"></param>
|
|
||||||
/// <param name="tag2"></param>
|
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private static string CreateSaveFolder(DyUserCookies cookie, Aweme item, string? tag1, string? tag2)
|
private static string CreateSaveFolder(DyUserCookies cookie, string uperName)
|
||||||
{
|
{
|
||||||
|
var saveFolder = Path.Combine(cookie.UpSavePath, uperName);
|
||||||
|
// 创建文件夹(提前创建,避免下载时才操作)
|
||||||
|
if (!Directory.Exists(saveFolder))
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(saveFolder);
|
||||||
|
}
|
||||||
|
return saveFolder;
|
||||||
// 路径中避免特殊字符,用ID替代描述
|
// 路径中避免特殊字符,用ID替代描述
|
||||||
var safeTag1 = string.IsNullOrWhiteSpace(tag1) ? "other" : SanitizePath(tag1);
|
//var safeTag1 = string.IsNullOrWhiteSpace(tag1) ? "other" : SanitizePath(tag1);
|
||||||
List<string> pathParts = new List<string> { cookie.UpSavePath, safeTag1 };
|
//List<string> pathParts = new List<string> { cookie.UpSavePath, safeTag1 };
|
||||||
return Path.Combine(pathParts[0], string.Join("-", pathParts.Skip(1)), SanitizePath(item.Desc) + "@" + item.AwemeId);
|
//return Path.Combine(pathParts[0], string.Join("-", pathParts.Skip(1)), SanitizePath(item.Desc) + "@" + item.AwemeId);
|
||||||
//if (string.IsNullOrWhiteSpace(tag2))
|
//if (string.IsNullOrWhiteSpace(tag2))
|
||||||
// return Path.Combine(pathParts[0], string.Join("-", pathParts.Skip(1)), SanitizePath(item.Desc) + "@" + item.AwemeId);
|
// return Path.Combine(pathParts[0], string.Join("-", pathParts.Skip(1)), SanitizePath(item.Desc) + "@" + item.AwemeId);
|
||||||
//else
|
//else
|
||||||
|
|||||||
Reference in New Issue
Block a user