Пример #1
0
        private int GetCountOfPages(AnimeSearch search, int from, int to, int counter = 0)
        {
            counter++;
            if (to - from == 1)
            {
                search.Page = to;
                var result = search.GetSearch();
                if (result != null && result.Count > 0)
                {
                    return(to);
                }
                else
                {
                    return(from);
                }
            }
            else
            {
                var delemiter = (from + to) / 2;
                search.Page = delemiter;

                var result = search.GetSearch();
                if (result != null && result.Count > 0)
                {
                    return(GetCountOfPages(search, delemiter, to));
                }
                else
                {
                    return(GetCountOfPages(search, from, delemiter));
                }
            }
        }
Пример #2
0
        public AnimeShortInfo GetRandomTitle(SearchRequest request)
        {
            var maxPage  = 1024;
            var searcher = new AnimeSearch();

            if (request.Genres != null)
            {
                foreach (var g in request.Genres)
                {
                    searcher.Genre.Add(g, true);
                }
            }
            if (request.Studios != null)
            {
                foreach (var s in request.Studios)
                {
                    searcher.Studio.Add(s, true);
                }
            }
            if (request.Seasons != null)
            {
                maxPage = request.Seasons.Count() * 20;
                if (maxPage > 1024)
                {
                    maxPage = 1024;
                }
                foreach (var s in request.Seasons)
                {
                    searcher.Season.Add(s, true);
                }
            }
            if (request.Text != null)
            {
                searcher.SearchText = request.Text;
            }
            if (request.Kinds != null)
            {
                foreach (var k in request.Kinds)
                {
                    searcher.Kind.Add(k, true);
                }
            }
            if (request.TitleStatuses != null)
            {
                foreach (var k in request.TitleStatuses)
                {
                    searcher.TitleStatus.Add(k, true);
                }
            }

            var result = new List <AnimeShortInfo>();

            if (_lastUpdate.Date != DateTime.Today || _count == 0)
            {
                _count      = GetCountOfPages(searcher, 0, maxPage);
                _lastUpdate = DateTime.Now;
                _cache.Set("count", _count);
                _cache.Set("last_update", _lastUpdate);
            }

            var count = _count;

            searcher.Page     = count;
            searcher.Censored = request.Censored;
            var lastPageCount = searcher.GetSearch().Count();

            count++;
            var totalCount = (count - 1) * 50 + lastPageCount;
            var titleNum   = new Random().Next(0, totalCount);
            var page       = titleNum / 50;
            var position   = titleNum - 50 * page;

            searcher.Page = page;
            var local = searcher.GetSearch();

            result.AddRange(local);
            return(result[position]);
        }