增加同步指定博主的作品
This commit is contained in:
+51
-15
@@ -17,9 +17,9 @@ namespace dy.net.job
|
||||
private readonly DyCollectVideoService _douyinVideoService;
|
||||
private readonly CommonService commonService;
|
||||
private readonly Random _random = new Random();
|
||||
private string count = "20"; // 每页请求的视频数量,默认20
|
||||
private string count = "18"; // 每页请求的视频数量,默认18
|
||||
|
||||
public DouYinCollectSyncJob(DyCookieService dyCookieService, DyHttpClientService dyHttpClientService, DyCollectVideoService dyCollectVideoService,CommonService commonService)
|
||||
public DouYinCollectSyncJob(DyCookieService dyCookieService, DyHttpClientService dyHttpClientService, DyCollectVideoService dyCollectVideoService, CommonService commonService)
|
||||
{
|
||||
_dyCookieService = dyCookieService;
|
||||
_douyinService = dyHttpClientService;
|
||||
@@ -53,10 +53,14 @@ namespace dy.net.job
|
||||
//return;
|
||||
}
|
||||
|
||||
//每天凌晨1点到1点半之间执行一次重置同步状态-全部cookie
|
||||
UpdateCookieSyncedToZero();
|
||||
|
||||
foreach (var cookie in cookies)
|
||||
{
|
||||
|
||||
Serilog.Log.Debug($"collect-开始同步 Cookie-[{cookie.UserName}]收藏视频");
|
||||
if (string.IsNullOrWhiteSpace(cookie.Cookies)|| cookie.Cookies.Length<1000)
|
||||
if (string.IsNullOrWhiteSpace(cookie.Cookies) || cookie.Cookies.Length < 1000)
|
||||
{
|
||||
Serilog.Log.Debug($"collect-Cookie-[{cookie.UserName}]无效,跳过");
|
||||
continue;
|
||||
@@ -68,12 +72,16 @@ namespace dy.net.job
|
||||
int index = 0;
|
||||
bool hasMore = true;
|
||||
|
||||
string cursor = "0";
|
||||
string cursor = "0";
|
||||
|
||||
while (hasMore)
|
||||
{
|
||||
var data = await _douyinService.SyncCollectVideos(cursor, count, cookie.Cookies);
|
||||
hasMore = data != null && data.HasMore == 1;
|
||||
hasMore = data != null && data.HasMore == 1 && cookie.CollHasSyncd == 0;
|
||||
if (cookie.CollHasSyncd == 1)
|
||||
{
|
||||
Serilog.Log.Debug($"collect-Cookie[{cookie.UserName}]已完整同步过,后续只获取最新一页数据");
|
||||
}
|
||||
//Serilog.Log.Debug($"还有数据需要同步吗?{(hasMore ? "YES" : "NO")}");
|
||||
if (data == null)
|
||||
{
|
||||
@@ -87,7 +95,7 @@ namespace dy.net.job
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
List<DyCollectVideo> videos = new List<DyCollectVideo>();
|
||||
foreach (var item in data.AwemeList)
|
||||
{
|
||||
@@ -120,7 +128,7 @@ namespace dy.net.job
|
||||
if (!File.Exists(savePath))
|
||||
{
|
||||
Serilog.Log.Debug($"collect-视频[{SanitizePath(item.Desc)}]开始下载");
|
||||
|
||||
await Task.Delay(_random.Next(1, 4) * 1000);
|
||||
var downVideo = await _douyinService.DownloadAsync(videoUrl, savePath, cookie.Cookies);
|
||||
Serilog.Log.Debug($"collect-视频[{SanitizePath(item.Desc)}]下载{(downVideo ? "成功" : "失败")}");
|
||||
if (downVideo)
|
||||
@@ -132,9 +140,15 @@ namespace dy.net.job
|
||||
var avatarSavePath = Path.Combine(cookie.SavePath, "author", avatarImgName);
|
||||
await DownAuthorAvatar(cookie.SavePath, item, avatarSavePath, cookie.Cookies);
|
||||
var avatarUrl = item.Author?.AvatarLarger?.UrlList != null && item.Author.AvatarLarger.UrlList.Any()
|
||||
? item.Author.AvatarLarger.UrlList[0] : null;
|
||||
? item.Author.AvatarLarger.UrlList[0] : null;
|
||||
// 备用头像链接
|
||||
if (string.IsNullOrWhiteSpace(avatarUrl))
|
||||
{
|
||||
avatarUrl = item.Author?.AvatarThumb?.UrlList != null && item.Author.AvatarThumb.UrlList.Any()
|
||||
? item.Author.AvatarThumb.UrlList[0] : null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// 构造视频数据
|
||||
DyCollectVideo video = new()
|
||||
@@ -171,11 +185,12 @@ namespace dy.net.job
|
||||
Author = video.Author,
|
||||
Poster = Path.Combine(saveFolder, "poster.jpg"),
|
||||
Title = video.VideoTitle,
|
||||
Thumbnail= Path.Combine(saveFolder, "fanart.jpg"),
|
||||
Thumbnail = Path.Combine(saveFolder, "fanart.jpg"),
|
||||
ReleaseDate = video.CreateTime,
|
||||
Genres = new List<string> { tag1, tag2, tag3 }.Where(t => !string.IsNullOrWhiteSpace(t)).ToList()
|
||||
}, nfoPath);
|
||||
|
||||
}
|
||||
await Task.Delay(_random.Next(1, 3) * 1000);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -210,14 +225,21 @@ namespace dy.net.job
|
||||
Serilog.Log.Debug("collect-因为数据库没有保存成功,本次下载的视频目录已尝试删除,将继续处理下一页数据");
|
||||
}
|
||||
}
|
||||
else {
|
||||
//Serilog.Log.Debug($"没有查询到新的视频");
|
||||
else
|
||||
{
|
||||
//Serilog.Log.Debug($"没有查询到新的视频");
|
||||
}
|
||||
await Task.Delay(_random.Next(2, 5) * 1000);
|
||||
await Task.Delay(_random.Next(5, 10) * 1000);
|
||||
}
|
||||
if (syncCount > 0)
|
||||
{
|
||||
Serilog.Log.Debug($"collect-Cookie-[{cookie.UserName}],本次共同步成功{syncCount}条视频");
|
||||
else {
|
||||
// 更新同步状态为已同步
|
||||
cookie.CollHasSyncd = 1;
|
||||
await _dyCookieService.UpdateAsync(cookie);
|
||||
}
|
||||
else
|
||||
{
|
||||
Serilog.Log.Debug($"collect-Cookie-[{cookie.UserName}],本次没有查询到新的视频");
|
||||
}
|
||||
|
||||
@@ -325,5 +347,19 @@ namespace dy.net.job
|
||||
}
|
||||
return path.Trim();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 重置Cookie的同步状态为0(每天凌晨1点到1点半之间执行一次)
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private void UpdateCookieSyncedToZero()
|
||||
{
|
||||
var now = DateTime.Now;
|
||||
//如果当时间为凌晨1点到1点半之间,则重置为0
|
||||
if (now.Hour == 1 && now.Minute < 30)
|
||||
{
|
||||
commonService.UpdateAllCookieSyncedToZero();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user