From d74541e1094fc2e7251dc50ed353ad978a10c8cf Mon Sep 17 00:00:00 2001 From: cxfksword <718792+cxfksword@users.noreply.github.com> Date: Fri, 17 Feb 2023 12:39:51 +0800 Subject: [PATCH] Optimize douban cookie reload --- Jellyfin.Plugin.MetaShark/Api/DoubanApi.cs | 140 ++++++--------------- Jellyfin.Plugin.MetaShark/Api/TmdbApi.cs | 4 +- 2 files changed, 42 insertions(+), 102 deletions(-) diff --git a/Jellyfin.Plugin.MetaShark/Api/DoubanApi.cs b/Jellyfin.Plugin.MetaShark/Api/DoubanApi.cs index d2177e2..e93c8e8 100644 --- a/Jellyfin.Plugin.MetaShark/Api/DoubanApi.cs +++ b/Jellyfin.Plugin.MetaShark/Api/DoubanApi.cs @@ -42,7 +42,6 @@ namespace Jellyfin.Plugin.MetaShark.Api private readonly ILogger _logger; private HttpClient httpClient; private CookieContainer _cookieContainer; - private string oldLoadedCookies = string.Empty; private readonly JsonSerializerOptions _jsonOptions = JsonDefaults.Options; private readonly IMemoryCache _memoryCache; private static readonly object _lock = new object(); @@ -106,56 +105,57 @@ namespace Jellyfin.Plugin.MetaShark.Api httpClient.DefaultRequestHeaders.Add("User-Agent", HTTP_USER_AGENT); httpClient.DefaultRequestHeaders.Add("Origin", "https://movie.douban.com"); httpClient.DefaultRequestHeaders.Add("Referer", "https://movie.douban.com/"); + + this.LoadLoadDoubanCookie(); + Plugin.Instance!.ConfigurationChanged += (_, _) => + { + this.LoadLoadDoubanCookie(); + }; } - private void EnsureLoadDoubanCookie() + private void LoadLoadDoubanCookie() { var configCookie = Plugin.Instance?.Configuration.DoubanCookies.Trim() ?? string.Empty; lock (_lock) { - if (oldLoadedCookies != configCookie) + var uri = new Uri("https://douban.com/"); + + // 清空旧的cookie + var cookies = _cookieContainer.GetCookies(uri); + foreach (Cookie co in cookies) { - oldLoadedCookies = configCookie; - - var uri = new Uri("https://douban.com/"); - - // 清空旧的cookie - var cookies = _cookieContainer.GetCookies(uri); - foreach (Cookie co in cookies) - { - co.Expires = DateTime.Now.Subtract(TimeSpan.FromDays(1)); - } - - - // 附加新的cookie - if (!string.IsNullOrEmpty(configCookie)) - { - var arr = configCookie.Split(';'); - foreach (var str in arr) - { - var cookieArr = str.Split('='); - if (cookieArr.Length != 2) - { - continue; - } - - var key = cookieArr[0].Trim(); - var value = cookieArr[1].Trim(); - try - { - _cookieContainer.Add(new Cookie(key, value, "/", ".douban.com")); - } - catch (Exception ex) - { - this._logger.LogError(ex, ex.Message); - } - } - } + co.Expires = DateTime.Now.Subtract(TimeSpan.FromDays(1)); } + + // 附加新的cookie + if (!string.IsNullOrEmpty(configCookie)) + { + var arr = configCookie.Split(';'); + foreach (var str in arr) + { + var cookieArr = str.Split('='); + if (cookieArr.Length != 2) + { + continue; + } + + var key = cookieArr[0].Trim(); + var value = cookieArr[1].Trim(); + try + { + _cookieContainer.Add(new Cookie(key, value, "/", ".douban.com")); + } + catch (Exception ex) + { + this._logger.LogDebug(ex, ex.Message); + } + } + + } } } @@ -168,15 +168,13 @@ namespace Jellyfin.Plugin.MetaShark.Api } var cacheKey = $"search_{keyword}"; - var expiredOption = new MemoryCacheEntryOptions() { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(30) }; + var expiredOption = new MemoryCacheEntryOptions() { AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(5) }; List searchResult; if (_memoryCache.TryGetValue>(cacheKey, out searchResult)) { return searchResult; } - - EnsureLoadDoubanCookie(); await LimitRequestFrequently(); var encodedKeyword = HttpUtility.UrlEncode(keyword); @@ -243,7 +241,6 @@ namespace Jellyfin.Plugin.MetaShark.Api return list; } - EnsureLoadDoubanCookie(); await LimitRequestFrequently(); try @@ -307,7 +304,6 @@ namespace Jellyfin.Plugin.MetaShark.Api return movie; } - EnsureLoadDoubanCookie(); await LimitRequestFrequently(); var url = $"https://movie.douban.com/subject/{sid}/"; @@ -415,7 +411,6 @@ namespace Jellyfin.Plugin.MetaShark.Api return celebrities; } - EnsureLoadDoubanCookie(); await LimitRequestFrequently(); var list = new List(); @@ -491,8 +486,6 @@ namespace Jellyfin.Plugin.MetaShark.Api return celebrity; } - EnsureLoadDoubanCookie(); - var url = $"https://movie.douban.com/celebrity/{id}/"; var response = await httpClient.GetAsync(url, cancellationToken).ConfigureAwait(false); response.EnsureSuccessStatusCode(); @@ -567,9 +560,6 @@ namespace Jellyfin.Plugin.MetaShark.Api } - EnsureLoadDoubanCookie(); - - keyword = HttpUtility.UrlEncode(keyword); var url = $"https://movie.douban.com/celebrities/search?search_text={keyword}"; var response = await httpClient.GetAsync(url, cancellationToken).ConfigureAwait(false); @@ -621,7 +611,6 @@ namespace Jellyfin.Plugin.MetaShark.Api return photos; } - EnsureLoadDoubanCookie(); await LimitRequestFrequently(); try @@ -682,8 +671,6 @@ namespace Jellyfin.Plugin.MetaShark.Api public async Task CheckLoginAsync(CancellationToken cancellationToken) { - EnsureLoadDoubanCookie(); - try { var url = "https://www.douban.com/mine/"; @@ -720,53 +707,6 @@ namespace Jellyfin.Plugin.MetaShark.Api { await this._defaultTimeConstraint; } - - // var diff = 0; - // Double interval = 0.0; - // if (IsEnableAvoidRiskControl()) - // { - // var configCookie = Plugin.Instance?.Configuration.DoubanCookies.Trim() ?? string.Empty; - // if (string.IsNullOrEmpty(configCookie)) - // { - // interval = 3000; - // } - // else - // { - // interval = 6000; - // } - // // // 启用防止封禁 - // // this._logger.LogWarning("thread开始等待." + Thread.CurrentThread.ManagedThreadId); - // // await this._limitTimeConstraint; - // // this._logger.LogWarning("thread等待结束." + Thread.CurrentThread.ManagedThreadId); - // } - // else - // { - // interval = 1000; - // // 默认限制 - // // await this._defaultTimeConstraint; - // } - - // this._logger.LogWarning("thread进入." + Thread.CurrentThread.ManagedThreadId); - // lock (_lock) - // { - // this._logger.LogWarning("thread开始等待." + Thread.CurrentThread.ManagedThreadId); - - // lastRequestTime = lastRequestTime.AddMilliseconds(interval); - // diff = (int)(lastRequestTime - DateTime.Now).TotalMilliseconds; - // if (diff <= 0) - // { - // lastRequestTime = DateTime.Now; - // } - // } - - // if (diff > 0) - // { - // this._logger.LogInformation("请求太频繁,等待{0}毫秒后继续执行..." + Thread.CurrentThread.ManagedThreadId, diff); - // // Thread.Sleep(diff); - // await Task.Delay(diff); - // } - - // this._logger.LogWarning("thread等待结束." + Thread.CurrentThread.ManagedThreadId); } private string GetTitle(string body) diff --git a/Jellyfin.Plugin.MetaShark/Api/TmdbApi.cs b/Jellyfin.Plugin.MetaShark/Api/TmdbApi.cs index bd9563d..2732812 100644 --- a/Jellyfin.Plugin.MetaShark/Api/TmdbApi.cs +++ b/Jellyfin.Plugin.MetaShark/Api/TmdbApi.cs @@ -37,8 +37,8 @@ namespace Jellyfin.Plugin.MetaShark.Api _logger = loggerFactory.CreateLogger(); _memoryCache = new MemoryCache(new MemoryCacheOptions()); var config = Plugin.Instance?.Configuration; - var apiKey = config == null || string.IsNullOrEmpty(config.TmdbApiKey) ? DEFAULT_API_KEY : config.TmdbApiKey; - var host = config == null || string.IsNullOrEmpty(config.TmdbHost) ? DEFAULT_API_HOST : config.TmdbHost; + var apiKey = string.IsNullOrEmpty(config?.TmdbApiKey) ? DEFAULT_API_KEY : config.TmdbApiKey; + var host = string.IsNullOrEmpty(config?.TmdbHost) ? DEFAULT_API_HOST : config.TmdbHost; _tmDbClient = new TMDbClient(apiKey, true, host); _tmDbClient.RequestTimeout = TimeSpan.FromSeconds(10); // Not really interested in NotFoundException