public ITwitterIterator <IUser, int?> GetSearchUsersIterator(ISearchUsersParameters parameters) { var pageIterator = _client.Raw.Search.GetSearchUsersIterator(parameters); return(new TwitterIteratorProxy <IFilteredTwitterResult <UserDTO[]>, IUser, int?>(pageIterator, twitterResult => _client.Factories.CreateUsers(twitterResult?.FilteredDTO))); }
public void Validate(ISearchUsersParameters parameters) { _searchClientRequiredParametersValidator.Validate(parameters); var maxPageSize = _client.Config.Limits.SEARCH_USERS_MAX_PAGE_SIZE; if (parameters.PageSize > maxPageSize) { throw new TwitterArgumentLimitException($"{nameof(parameters.PageSize)}", maxPageSize, nameof(_client.Config.Limits.SEARCH_USERS_MAX_PAGE_SIZE), "page size"); } }
public ISearchUsersParameters CloneUserSearchParameters(ISearchUsersParameters searchUsersParameters) { var clone = new SearchUsersParameters(searchUsersParameters.SearchQuery) { IncludeEntities = searchUsersParameters.IncludeEntities, Page = searchUsersParameters.Page, MaximumNumberOfResults = searchUsersParameters.MaximumNumberOfResults }; return(clone); }
public void Validate(ISearchUsersParameters parameters) { if (parameters == null) { throw new ArgumentNullException(nameof(parameters)); } if (parameters.Query == null) { throw new ArgumentNullException($"{nameof(parameters)}.{nameof(parameters.Query)}"); } }
public string GetSearchUsersQuery(ISearchUsersParameters parameters) { var query = new StringBuilder(Resources.Search_SearchUsers); query.AddParameterToQuery("q", parameters.Query); query.AddParameterToQuery("page", parameters.Page); query.AddParameterToQuery("count", parameters.PageSize); query.AddParameterToQuery("include_entities", parameters.IncludeEntities); query.AddFormattedParameterToQuery(parameters.FormattedCustomQueryParameters); return(query.ToString()); }
public SearchUsersParameters(ISearchUsersParameters source) : base(source) { if (source == null) { PageSize = TwitterLimits.DEFAULTS.SEARCH_USERS_MAX_PAGE_SIZE; return; } PageSize = source.PageSize; Query = source.Query; IncludeEntities = source.IncludeEntities; Page = source.Page; }
public string GetSearchUsersQuery(ISearchUsersParameters searchUsersParameters) { if (!_searchQueryValidator.IsSearchQueryValid(searchUsersParameters.SearchQuery)) { throw new ArgumentException("Search query is not valid."); } var queryBuilder = new StringBuilder(Resources.Search_SearchUsers); queryBuilder.AddParameterToQuery("q", _searchQueryParameterGenerator.GenerateSearchQueryParameter(searchUsersParameters.SearchQuery)); queryBuilder.AddParameterToQuery("page", searchUsersParameters.Page); queryBuilder.Append(_queryParameterGenerator.GenerateCountParameter(searchUsersParameters.MaximumNumberOfResults)); queryBuilder.Append(_queryParameterGenerator.GenerateIncludeEntitiesParameter(searchUsersParameters.IncludeEntities)); return(queryBuilder.ToString()); }
public void Validate(ISearchUsersParameters parameters) { _searchClientParametersValidator.Validate(parameters); }
public Task <ITwitterResult <UserDTO[]> > SearchUsers(ISearchUsersParameters parameters, ITwitterRequest request) { request.Query.Url = _searchQueryGenerator.GetSearchUsersQuery(parameters); request.Query.HttpMethod = HttpMethod.GET; return(_twitterAccessor.ExecuteRequest <UserDTO[]>(request)); }
public ITwitterPageIterator <IFilteredTwitterResult <UserDTO[]>, int?> GetSearchUsersIterator(ISearchUsersParameters parameters) { _validator.Validate(parameters); var request = TwitterClient.CreateRequest(); return(_searchController.GetSearchUsersIterator(parameters, request)); }
public async Task <IUser[]> SearchUsers(ISearchUsersParameters parameters) { var pageIterator = GetSearchUsersIterator(parameters); return((await pageIterator.NextPage().ConfigureAwait(false)).ToArray()); }
public IEnumerable <IUserDTO> SearchUsers(ISearchUsersParameters searchUsersParameters) { if (searchUsersParameters == null) { throw new ArgumentNullException("Search parameters cannot be null."); } if (searchUsersParameters.SearchQuery == null) { throw new ArgumentNullException("Search query cannot be null."); } if (searchUsersParameters.SearchQuery == string.Empty) { throw new ArgumentException("Search query cannot be empty."); } var maximumNumberOfResults = Math.Min(searchUsersParameters.MaximumNumberOfResults, 1000); var searchParameter = _searchQueryHelper.CloneUserSearchParameters(searchUsersParameters); searchParameter.MaximumNumberOfResults = Math.Min(searchParameter.MaximumNumberOfResults, 20); string query = _searchQueryGenerator.GetSearchUsersQuery(searchParameter); var currentResult = _twitterAccessor.ExecuteGETQuery <List <IUserDTO> >(query); if (currentResult == null) { return(null); } var result = currentResult.ToDictionary(user => user.Id); var totalTweets = result.Count; while (totalTweets < maximumNumberOfResults) { if (currentResult.Count == 0) { // If Twitter does not have any result left, stop the search break; } searchParameter.MaximumNumberOfResults = Math.Min(searchUsersParameters.MaximumNumberOfResults - totalTweets, 20); ++searchParameter.Page; query = _searchQueryGenerator.GetSearchUsersQuery(searchParameter); currentResult = _twitterAccessor.ExecuteGETQuery <List <IUserDTO> >(query); bool searchIsComplete = currentResult == null; if (!searchIsComplete) { foreach (var userDTO in currentResult) { if (result.ContainsKey(userDTO.Id)) { searchIsComplete = true; } else { result.Add(userDTO.Id, userDTO); ++totalTweets; } } } if (searchIsComplete) { break; } } return(result.Values); }
public ITwitterPageIterator <IFilteredTwitterResult <UserDTO[]>, int?> GetSearchUsersIterator(ISearchUsersParameters parameters, ITwitterRequest request) { var pageNumber = parameters.Page ?? 1; var previousResultIds = new HashSet <long>(); return(new TwitterPageIterator <IFilteredTwitterResult <UserDTO[]>, int?>( parameters.Page, async cursor => { var cursoredParameters = new SearchUsersParameters(parameters) { Page = cursor }; var page = await _searchQueryExecutor.SearchUsersAsync(cursoredParameters, new TwitterRequest(request)).ConfigureAwait(false); return new FilteredTwitterResult <UserDTO[]>(page) { FilteredDTO = page.Model.Where(x => !previousResultIds.Contains(x.Id)).ToArray() }; }, page => { if (page.Model.Length == 0) { return null; } return ++pageNumber; }, page => { var requestUserIds = page.Model.Select(x => x.Id).ToArray(); var newItemIds = requestUserIds.Except(previousResultIds).ToArray(); foreach (var newItemId in newItemIds) { previousResultIds.Add(newItemId); } return newItemIds.Length == 0 || page.Model.Length == 0; })); }
public IEnumerable <IUser> SearchUsers(ISearchUsersParameters searchUsersParameters) { var userDTOs = _searchQueryExecutor.SearchUsers(searchUsersParameters); return(_userFactory.GenerateUsersFromDTO(userDTOs)); }
public string GetSearchUsersQuery(ISearchUsersParameters searchUsersParameters) { if (!_searchQueryValidator.IsSearchQueryValid(searchUsersParameters.SearchQuery)) { throw new ArgumentException("Search query is not valid."); } var queryBuilder = new StringBuilder(Resources.Search_SearchUsers); queryBuilder.AddParameterToQuery("q", _searchQueryParameterGenerator.GenerateSearchQueryParameter(searchUsersParameters.SearchQuery)); queryBuilder.AddParameterToQuery("page", searchUsersParameters.Page); queryBuilder.Append(_queryParameterGenerator.GenerateCountParameter(searchUsersParameters.MaximumNumberOfResults)); queryBuilder.Append(_queryParameterGenerator.GenerateIncludeEntitiesParameter(searchUsersParameters.IncludeEntities)); return queryBuilder.ToString(); }