public virtual async Task <ICredentialsRateLimits> GetCredentialsRateLimitsAsync(IReadOnlyTwitterCredentials credentials) { var rateLimits = await _rateLimitCache.GetCredentialsRateLimitsAsync(credentials).ConfigureAwait(false); if (rateLimits == null) { rateLimits = await RefreshCredentialsRateLimitsAsync(credentials).ConfigureAwait(false); } return(rateLimits); }
public virtual Task UpdateCredentialsRateLimitsAsync(IReadOnlyTwitterCredentials credentials, ICredentialsRateLimits credentialsRateLimits) { return(_rateLimitCache.RefreshEntryAsync(credentials, credentialsRateLimits)); }
public static void ThrowIfInvalidAccessCredentials(string credentialsParameterName, IReadOnlyTwitterCredentials credentials) { if (string.IsNullOrEmpty(credentials?.AccessToken)) { throw new ArgumentException("Cannot be null or empty", $"{credentialsParameterName}.{nameof(credentials.AccessToken)}"); } if (string.IsNullOrEmpty(credentials.AccessTokenSecret)) { throw new ArgumentException("Cannot be null or empty", $"{credentialsParameterName}.{nameof(credentials.AccessTokenSecret)}"); } }
public virtual async Task <IEndpointRateLimit> GetQueryRateLimitAsync(IGetEndpointRateLimitsParameters parameters, IReadOnlyTwitterCredentials credentials) { var credentialsRateLimits = await RateLimitsClient.GetRateLimitsAsync(parameters).ConfigureAwait(false); var endpointRateLimit = _rateLimitHelper.GetEndpointRateLimitFromQuery(parameters.Url, credentialsRateLimits, false); if (parameters.From == RateLimitsSource.CacheOrTwitterApi && ShouldEndpointCacheBeUpdated(endpointRateLimit)) { var updatedCredentialsRateLimits = await RefreshCredentialsRateLimitsAsync(credentials).ConfigureAwait(false); endpointRateLimit = _rateLimitHelper.GetEndpointRateLimitFromQuery(parameters.Url, updatedCredentialsRateLimits, false); } return(endpointRateLimit); }
public virtual async Task <ICredentialsRateLimits> RefreshCredentialsRateLimits(IReadOnlyTwitterCredentials credentials) { var tokenRateLimits = await GetTokenRateLimitsFromTwitter(credentials).ConfigureAwait(false); await _rateLimitCache.RefreshEntry(credentials, tokenRateLimits).ConfigureAwait(false); return(await _rateLimitCache.GetCredentialsRateLimits(credentials).ConfigureAwait(false)); }
public ConsumerOnlyCredentials(IReadOnlyTwitterCredentials creds) : base(creds) { }
public Task ClearRateLimitCache(IReadOnlyTwitterCredentials credentials) { return(_rateLimitCacheManager.RateLimitCache.Clear(credentials)); }
private async Task <ICredentialsRateLimits> GetTokenRateLimitsFromTwitterAsync(IReadOnlyTwitterCredentials credentials) { var isApplicationOnlyCreds = string.IsNullOrEmpty(credentials.AccessToken) || string.IsNullOrEmpty(credentials.AccessTokenSecret); if (isApplicationOnlyCreds && string.IsNullOrEmpty(credentials.BearerToken)) { return(null); } try { return(await RateLimitsClient.GetRateLimitsAsync(new GetRateLimitsParameters { From = RateLimitsSource.TwitterApiOnly, TrackerMode = RateLimitTrackerMode.None }).ConfigureAwait(false)); } catch (TwitterException) { return(null); } }
public async Task <TimeSpan> TimeToWaitBeforeTwitterRequestAsync(string query, IReadOnlyTwitterCredentials credentials, ITwitterExecutionContext twitterExecutionContext) { var queryRateLimits = await _rateLimitCacheManager.GetQueryRateLimitAsync(new GetEndpointRateLimitsParameters(query), credentials).ConfigureAwait(false); return(GetTimeToWaitFromQueryRateLimit(queryRateLimits, twitterExecutionContext)); }
public async Task WaitForCredentialsRateLimitAsync(IEndpointRateLimit queryRateLimit, IReadOnlyTwitterCredentials credentials, ITwitterExecutionContext executionContext) { var timeToWait = GetTimeToWaitFromQueryRateLimit(queryRateLimit, executionContext); if (timeToWait > TimeSpan.Zero) { executionContext.Events.RaiseWaitingForRateLimit(new WaitingForRateLimitEventArgs(null, queryRateLimit, credentials)); await _taskDelayer.Delay(timeToWait).ConfigureAwait(false); } }
public static string CreateHash(IReadOnlyTwitterCredentials credentials) { var hash = $"{credentials.ConsumerKey} - {credentials.ConsumerSecret} - {credentials.BearerToken}"; return($"{hash} - {credentials.AccessToken} - {credentials.AccessTokenSecret}"); }