chore: limit bilibili request frequently. #106

This commit is contained in:
cxfksword
2026-01-10 14:49:21 +08:00
parent 9407b4f72c
commit 796569727d

View File

@@ -21,7 +21,7 @@ public class BilibiliApi : AbstractApi
{ {
private static readonly object _lock = new object(); private static readonly object _lock = new object();
private TimeLimiter _timeConstraint = TimeLimiter.GetFromMaxCountByInterval(1, TimeSpan.FromMilliseconds(1000)); private TimeLimiter _timeConstraint = TimeLimiter.GetFromMaxCountByInterval(1, TimeSpan.FromMilliseconds(1000));
private TimeLimiter _delayExecuteConstraint = TimeLimiter.GetFromMaxCountByInterval(1, TimeSpan.FromMilliseconds(100)); private TimeLimiter _limitDownloadRequestConstraint = TimeLimiter.GetFromMaxCountByInterval(1, TimeSpan.FromSeconds(10));
private TimeLimiter _delayShortExecuteConstraint = TimeLimiter.GetFromMaxCountByInterval(1, TimeSpan.FromMilliseconds(10)); private TimeLimiter _delayShortExecuteConstraint = TimeLimiter.GetFromMaxCountByInterval(1, TimeSpan.FromMilliseconds(10));
private static readonly Regex regBiliplusVideoInfo = new Regex(@"view\((.+?)\);", RegexOptions.Compiled); private static readonly Regex regBiliplusVideoInfo = new Regex(@"view\((.+?)\);", RegexOptions.Compiled);
@@ -151,7 +151,7 @@ public class BilibiliApi : AbstractApi
throw new ArgumentNullException(nameof(cid)); throw new ArgumentNullException(nameof(cid));
} }
await this.LimitRequestFrequently(); await this._limitDownloadRequestConstraint;
var url = $"https://api.bilibili.com/x/v1/dm/list.so?oid={cid}"; var url = $"https://api.bilibili.com/x/v1/dm/list.so?oid={cid}";
using var response = await this.httpClient.GetAsync(url, cancellationToken).ConfigureAwait(false); using var response = await this.httpClient.GetAsync(url, cancellationToken).ConfigureAwait(false);
@@ -322,6 +322,8 @@ public class BilibiliApi : AbstractApi
danmaku.ChatServer = "api.bilibili.com"; danmaku.ChatServer = "api.bilibili.com";
danmaku.Items = new List<ScraperDanmakuText>(); danmaku.Items = new List<ScraperDanmakuText>();
await this._limitDownloadRequestConstraint;
await this.EnsureSessionCookie(cancellationToken).ConfigureAwait(false); await this.EnsureSessionCookie(cancellationToken).ConfigureAwait(false);
try try