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));
        }
Exemple #6
0
 public ConsumerOnlyCredentials(IReadOnlyTwitterCredentials creds) : base(creds)
 {
 }
Exemple #7
0
 public Task ClearRateLimitCache(IReadOnlyTwitterCredentials credentials)
 {
     return(_rateLimitCacheManager.RateLimitCache.Clear(credentials));
 }
Exemple #8
0
        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);
            }
        }
Exemple #9
0
        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));
        }
Exemple #10
0
        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);
            }
        }
Exemple #11
0
        public static string CreateHash(IReadOnlyTwitterCredentials credentials)
        {
            var hash = $"{credentials.ConsumerKey} - {credentials.ConsumerSecret} - {credentials.BearerToken}";

            return($"{hash} - {credentials.AccessToken}  - {credentials.AccessTokenSecret}");
        }