diff --git a/src/BirdsiteLive.Twitter/Statistics/TwitterStatisticsHandler.cs b/src/BirdsiteLive.Twitter/Statistics/TwitterStatisticsHandler.cs index 668be76..8063985 100644 --- a/src/BirdsiteLive.Twitter/Statistics/TwitterStatisticsHandler.cs +++ b/src/BirdsiteLive.Twitter/Statistics/TwitterStatisticsHandler.cs @@ -13,6 +13,8 @@ namespace BirdsiteLive.Statistics.Domain void CalledTweetApi(); void CalledTimelineApi(); ApiStatistics GetStatistics(); + + int GetCurrentUserCalls(); } //Rate limits: https://developer.twitter.com/en/docs/twitter-api/v1/rate-limits @@ -60,7 +62,12 @@ namespace BirdsiteLive.Statistics.Domain foreach (var old in oldSnapshots) _snapshots.TryRemove(old, out var data); } - public void CalledUserApi() //GET users/show - 900/15mins + public int GetCurrentUserCalls() + { + return _userCalls; + } + + public void CalledUserApi() //GET users/show - 300/15mins { Interlocked.Increment(ref _userCalls); } diff --git a/src/BirdsiteLive.Twitter/TwitterUserService.cs b/src/BirdsiteLive.Twitter/TwitterUserService.cs index 6a27dc1..df6e5ad 100644 --- a/src/BirdsiteLive.Twitter/TwitterUserService.cs +++ b/src/BirdsiteLive.Twitter/TwitterUserService.cs @@ -32,6 +32,12 @@ namespace BirdsiteLive.Twitter public TwitterUser GetUser(string username) { + //Check if API is saturated + var currentCalls = _statisticsHandler.GetCurrentUserCalls(); + var maxCalls = _statisticsHandler.GetStatistics().UserCallsMax; + if (currentCalls > maxCalls) return null; + + //Proceed to account retrieval _twitterAuthenticationInitializer.EnsureAuthenticationIsInitialized(); ExceptionHandler.SwallowWebExceptions = false; @@ -49,9 +55,6 @@ namespace BirdsiteLive.Twitter catch (Exception e) { _logger.LogError(e, "Error retrieving user {Username}", username); - - // TODO keep track of error, see where to remove user if too much errors - return null; }