public IUserSearchParameters CloneUserSearchParameters(IUserSearchParameters userSearchParameters)
        {
            var clone = new UserSearchParameters(userSearchParameters.SearchQuery)
            {
                IncludeEntities = userSearchParameters.IncludeEntities,
                Page = userSearchParameters.Page,
                MaximumNumberOfResults = userSearchParameters.MaximumNumberOfResults
            };

            return clone;
        }
Example #2
0
        public IUserSearchParameters CloneUserSearchParameters(IUserSearchParameters userSearchParameters)
        {
            var clone = new UserSearchParameters(userSearchParameters.SearchQuery)
            {
                IncludeEntities        = userSearchParameters.IncludeEntities,
                Page                   = userSearchParameters.Page,
                MaximumNumberOfResults = userSearchParameters.MaximumNumberOfResults
            };

            return(clone);
        }
Example #3
0
        public IEnumerable <IUserDTO> SearchUsers(IUserSearchParameters userSearchParameters)
        {
            if (string.IsNullOrEmpty(userSearchParameters.SearchQuery))
            {
                return(null);
            }

            var maximumNumberOfResults = Math.Min(userSearchParameters.MaximumNumberOfResults, 1000);
            var searchParameter        = _searchQueryHelper.CloneUserSearchParameters(userSearchParameters);

            searchParameter.MaximumNumberOfResults = Math.Min(searchParameter.MaximumNumberOfResults, 20);

            string query         = _searchQueryGenerator.GetSearchUsersQuery(searchParameter);
            var    currentResult = _twitterAccessor.ExecuteGETQuery <List <IUserDTO> >(query);
            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(userSearchParameters.MaximumNumberOfResults - totalTweets, 20);
                ++searchParameter.Page;
                query         = _searchQueryGenerator.GetSearchUsersQuery(searchParameter);
                currentResult = _twitterAccessor.ExecuteGETQuery <List <IUserDTO> >(query);

                bool searchIsComplete = false;
                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 string GetSearchUsersQuery(IUserSearchParameters userSearchParameters)
        {
            if (!_searchQueryValidator.IsSearchTweetsQueryValid(userSearchParameters.SearchQuery))
            {
                return(null);
            }

            var queryBuilder = new StringBuilder(Resources.Search_SearchUsers);

            queryBuilder.AddParameterToQuery("q", _searchQueryParameterGenerator.GenerateSearchQueryParameter(userSearchParameters.SearchQuery));
            queryBuilder.AddParameterToQuery("page", userSearchParameters.Page);
            queryBuilder.Append(_queryParameterGenerator.GenerateCountParameter(userSearchParameters.MaximumNumberOfResults));
            queryBuilder.Append(_queryParameterGenerator.GenerateIncludeEntitiesParameter(userSearchParameters.IncludeEntities));

            return(queryBuilder.ToString());
        }
        public string GetSearchUsersQuery(IUserSearchParameters userSearchParameters)
        {
            var baseQuery = GetSearchUsersQuery(userSearchParameters.SearchQuery);

            if (string.IsNullOrEmpty(baseQuery))
            {
                return(null);
            }

            var queryBuilder = new StringBuilder(baseQuery);

            queryBuilder.AddParameterToQuery("page", userSearchParameters.Page);
            queryBuilder.Append(_queryParameterGenerator.GenerateCountParameter(userSearchParameters.MaximumNumberOfResults));
            queryBuilder.Append(_queryParameterGenerator.GenerateIncludeEntitiesParameter(userSearchParameters.IncludeEntities));

            return(queryBuilder.ToString());
        }
        public string GetSearchUsersQuery(IUserSearchParameters userSearchParameters)
        {
            var baseQuery = GetSearchUsersQuery(userSearchParameters.SearchQuery);
            if (string.IsNullOrEmpty(baseQuery))
            {
                return null;
            }

            var queryBuilder = new StringBuilder(baseQuery);

            queryBuilder.AddParameterToQuery("page", userSearchParameters.Page);
            queryBuilder.Append(_queryParameterGenerator.GenerateCountParameter(userSearchParameters.MaximumNumberOfResults));
            queryBuilder.Append(_queryParameterGenerator.GenerateIncludeEntitiesParameter(userSearchParameters.IncludeEntities));

            return queryBuilder.ToString();
        }
        public IEnumerable<IUserDTO> SearchUsers(IUserSearchParameters userSearchParameters)
        {
            if (string.IsNullOrEmpty(userSearchParameters.SearchQuery))
            {
                return null;
            }

            var maximumNumberOfResults = Math.Min(userSearchParameters.MaximumNumberOfResults, 1000);
            var searchParameter = _searchQueryHelper.CloneUserSearchParameters(userSearchParameters);
            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(userSearchParameters.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 IEnumerable<IUserDTO> SearchUsers(IUserSearchParameters userSearchParameters)
        {
            if (string.IsNullOrEmpty(userSearchParameters.SearchQuery))
            {
                return null;
            }

            var maximumNumberOfResults = Math.Min(userSearchParameters.MaximumNumberOfResults, 1000);
            var searchParameter = _searchQueryHelper.CloneUserSearchParameters(userSearchParameters);
            searchParameter.MaximumNumberOfResults = Math.Min(searchParameter.MaximumNumberOfResults, 20);

            string query = _searchQueryGenerator.GetSearchUsersQuery(searchParameter);
            var currentResult = _twitterAccessor.ExecuteGETQuery<List<IUserDTO>>(query);
            var result = new List<IUserDTO>(currentResult);
            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(userSearchParameters.MaximumNumberOfResults - totalTweets, 20);
                ++searchParameter.Page;
                query = _searchQueryGenerator.GetSearchUsersQuery(searchParameter);
                currentResult = _twitterAccessor.ExecuteGETQuery<List<IUserDTO>>(query);

                totalTweets += currentResult.Count;
                result.AddRange(currentResult);
            }

            return result;
        }
Example #9
0
        public IEnumerable <IUser> SearchUsers(IUserSearchParameters userSearchParameters)
        {
            var userDTOs = _searchQueryExecutor.SearchUsers(userSearchParameters);

            return(_userFactory.GenerateUsersFromDTO(userDTOs));
        }
        public string GetSearchUsersQuery(IUserSearchParameters userSearchParameters)
        {
            if (!_searchQueryValidator.IsSearchTweetsQueryValid(userSearchParameters.SearchQuery))
            {
                return null;
            }

            var queryBuilder = new StringBuilder(Resources.Search_SearchUsers);

            queryBuilder.AddParameterToQuery("q", _searchQueryParameterGenerator.GenerateSearchQueryParameter(userSearchParameters.SearchQuery));
            queryBuilder.AddParameterToQuery("page", userSearchParameters.Page);
            queryBuilder.Append(_queryParameterGenerator.GenerateCountParameter(userSearchParameters.MaximumNumberOfResults));
            queryBuilder.Append(_queryParameterGenerator.GenerateIncludeEntitiesParameter(userSearchParameters.IncludeEntities));

            return queryBuilder.ToString();
        }
 public IEnumerable<IUser> SearchUsers(IUserSearchParameters userSearchParameters)
 {
     var userDTOs = _searchQueryExecutor.SearchUsers(userSearchParameters);
     return _userFactory.GenerateUsersFromDTO(userDTOs);
 }