示例#1
0
        public ISearchUsersParameters CloneUserSearchParameters(ISearchUsersParameters searchUsersParameters)
        {
            var clone = new SearchUsersParameters(searchUsersParameters.SearchQuery)
            {
                IncludeEntities        = searchUsersParameters.IncludeEntities,
                Page                   = searchUsersParameters.Page,
                MaximumNumberOfResults = searchUsersParameters.MaximumNumberOfResults
            };

            return(clone);
        }
        public void SearchUsers_ReturnsExpectedQuery()
        {
            // arrange
            var parameters = new SearchUsersParameters("plop")
            {
                Page                  = 42,
                PageSize              = 50,
                IncludeEntities       = true,
                CustomQueryParameters = { new Tuple <string, string>("hello", "world") }
            };

            // act
            var url = _searchQueryGenerator.GetSearchUsersQuery(parameters);

            // assert
            Assert.Equal(url, "https://api.twitter.com/1.1/users/search.json?q=plop&page=42&count=50&include_entities=true&hello=world");
        }
示例#3
0
        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;
            }));
        }