From f554269cba01f6dd04a158cacc6d189fab5dcf7a Mon Sep 17 00:00:00 2001 From: Vincent Cloutier Date: Mon, 27 Mar 2023 19:48:35 -0400 Subject: [PATCH] little rate limiting for twitter auth --- .../BirdsiteLive.Twitter.csproj | 1 + .../Tools/TwitterAuthenticationInitializer.cs | 45 ++++++++++++------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/src/BirdsiteLive.Twitter/BirdsiteLive.Twitter.csproj b/src/BirdsiteLive.Twitter/BirdsiteLive.Twitter.csproj index caf7b52..6d1746d 100644 --- a/src/BirdsiteLive.Twitter/BirdsiteLive.Twitter.csproj +++ b/src/BirdsiteLive.Twitter/BirdsiteLive.Twitter.csproj @@ -7,6 +7,7 @@ + diff --git a/src/BirdsiteLive.Twitter/Tools/TwitterAuthenticationInitializer.cs b/src/BirdsiteLive.Twitter/Tools/TwitterAuthenticationInitializer.cs index c8b7a57..99cd4f7 100644 --- a/src/BirdsiteLive.Twitter/Tools/TwitterAuthenticationInitializer.cs +++ b/src/BirdsiteLive.Twitter/Tools/TwitterAuthenticationInitializer.cs @@ -8,6 +8,7 @@ using Microsoft.Extensions.Logging; using System.Net.Http; using System.Net; using System.Text.Json; +using System.Threading.RateLimiting; namespace BirdsiteLive.Twitter.Tools { @@ -27,6 +28,8 @@ namespace BirdsiteLive.Twitter.Tools private List _twitterClients = new List(); private List _tokens = new List(); static Random rnd = new Random(); + private RateLimiter _rateLimiter; + static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1, 1); private const int _targetClients = 3; public String BearerToken { get { return "AAAAAAAAAAAAAAAAAAAAAPYXBAAAAAAACLXUNDekMxqa8h%2F40K4moUkGsoc%3DTYfbDKbT3jJPCEVnMYqilB28NHfOPqkca3qaAxGfsyKCs0wRbw"; } @@ -41,7 +44,7 @@ namespace BirdsiteLive.Twitter.Tools aTimer = new System.Timers.Timer(); aTimer.Interval = 20 * 1000; aTimer.Elapsed += async (sender, e) => await RefreshCred(); - + aTimer.Start(); } #endregion @@ -69,22 +72,32 @@ namespace BirdsiteLive.Twitter.Tools private async Task RefreshCred() { - (string bearer, string guest) = await GetCred(); - - HttpClient client = _httpClientFactory.CreateClient(); - //HttpClient client = new HttpClient(); - client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", $"Bearer " + bearer); - client.DefaultRequestHeaders.TryAddWithoutValidation("x-guest-token", guest); - client.DefaultRequestHeaders.TryAddWithoutValidation("Referer", "https://twitter.com/"); - client.DefaultRequestHeaders.TryAddWithoutValidation("x-twitter-active-user", "yes"); - - _twitterClients.Add(client); - _tokens.Add(guest); - - if (_twitterClients.Count > _targetClients) + + await semaphoreSlim.WaitAsync(); + try { - _twitterClients.RemoveAt(0); - _tokens.RemoveAt(0); + (string bearer, string guest) = await GetCred(); + + HttpClient client = _httpClientFactory.CreateClient(); + //HttpClient client = new HttpClient(); + client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", $"Bearer " + bearer); + client.DefaultRequestHeaders.TryAddWithoutValidation("x-guest-token", guest); + client.DefaultRequestHeaders.TryAddWithoutValidation("Referer", "https://twitter.com/"); + client.DefaultRequestHeaders.TryAddWithoutValidation("x-twitter-active-user", "yes"); + + _twitterClients.Add(client); + _tokens.Add(guest); + + if (_twitterClients.Count > _targetClients) + { + _twitterClients.RemoveAt(0); + _tokens.RemoveAt(0); + } + + } + finally + { + semaphoreSlim.Release(); } }