Example #1
0
        public ImageResult SearchImages(ImageSearchParams param)
        {
            ObjectCache cache = MemoryCache.Default;
            string      key   = $"{param.Query}.{param.Offset}.{param.OffsetGroups}";

            var cacheImages = cache.Get(key) as ImageResult;

            if (cacheImages == null)
            {
                var             qualityImages = _pixabayApi.SearchImages(param);
                CacheItemPolicy policy        = new CacheItemPolicy()
                {
                    SlidingExpiration = TimeSpan.FromMinutes(30)
                };
                if (qualityImages?.TotalCount > 500)
                {
                    cache.Add(key, qualityImages, policy);
                    return(qualityImages);
                }

                else
                {
                    var vkImages = _vkApi.SearchImages(param);
                    while (vkImages == null)
                    {
                        param.OffsetGroups += 4;
                        IncrementGroupOffset(param.OffsetGroups);
                        vkImages = _vkApi.SearchImages(param);
                    }

                    return(VkImages(param.OffsetGroups, cache, key, policy, vkImages));
                }
            }
            return(cacheImages);
        }
Example #2
0
        public ImageResult SearchImages(ImageSearchParams param)
        {
            var images = Api.QueryImagesAsync(new ImageQueryBuilder()
            {
                Query = param.Query, PerPage = param.Count, Page = param.Offset
            });

            return(GetMapperImage(images.Result));
        }
Example #3
0
        public async Task <ImageResult> SearchImagesAsync(ImageSearchParams param)
        {
            var images = await Api.QueryImagesAsync(new ImageQueryBuilder()
            {
                Query = param.Query, PerPage = param.Count, Page = param.Offset
            });

            return(GetMapperImage(images));
        }
Example #4
0
        public async void SearchBusiness_GetImagesBySearchParams_SearchParameter_NoRecordReturns()
        {
            var imgPrm = new ImageSearchParams();

            Mock <IAPIClient> client = new Mock <IAPIClient>(_key);
            var tsk = Task.Factory.StartNew(() => "");

            client.Setup(c => c.GetAll(imgPrm)).Returns(tsk);

            var result = await _business.GetImagesBySearchParams("images");

            Assert.IsTrue(result.Any());
        }
Example #5
0
        public void testInit()
        {
            testFarmId = "66";
            resultJson = "{ \"photos\": { \"page\": 1, \"pages\": \"2\", \"perpage\": 10, \"total\": \"100\", \"photo\": [{ \"id\": \"123456\", \"owner\": \"789101@N06\", \"secret\": \"123456\", \"server\": \"65535\", \"farm\": " + testFarmId + ", \"title\": \"test 1\", \"ispublic\": 1, \"isfriend\": 0, \"isfamily\": 0 },{ \"id\": \"789101\", \"owner\": \"123456@N06\", \"secret\": \"35a789101\", \"server\": \"65535\", \"farm\": " + testFarmId + ", \"title\": \"test 2\", \"ispublic\": 1, \"isfriend\": 0, \"isfamily\": 0 }] }, \"stat\": \"ok\" }";

            Mock <IAPIClient> client = new Mock <IAPIClient>(_key);
            var tsk = Task.Factory.StartNew(() => resultJson);

            _factory = new Mock <IClientFactory>();
            var imgPrm = new ImageSearchParams();

            client.Setup(c => c.GetAll(imgPrm)).Returns(tsk);
            _factory.Setup(f => f.Create("Flicker")).Returns(client.Object);
            _business = new FlickrBusiness(_factory.Object);
        }
Example #6
0
        public async Task <ImageResult> SearchImagesAsync(ImageSearchParams param)
        {
            if (param.OffsetGroups >= 13)
            {
                //отнимаем 1 т.к мы сдвигаем именно картинки по страницам и изначально
                //мы ищем на 1 странице ,поэтому мы отнимаем эту 1
                //умножаем на кол-во картинок(если ищем 10 картинок и мы заходим на 3 стр , то нужно перемножить стр и кол-во картинок)
                //и получаем сдвиг картинок
                var offsetImages = (--param.Offset - 13) * param.Count;

                var imagesVk = await Api.Photo.SearchAsync
                                   (new VkNet.Model.RequestParams.PhotoSearchParams()
                {
                    Query = param.Query, Count = (ulong?)param.Count, Offset = (ulong?)offsetImages
                });

                return(GetMapperImage(imagesVk));
            }

            var searchGroups         = _imagesFactory.CreateGetGroups(Api);
            var membersGroups        = _imagesFactory.CreateGetMembersByGroup(Api);
            var searchImagesInGroups = _imagesFactory.CreateGetImagesForGroups(Api);

            var groups = await searchGroups.GetAsync(new GroupSearchParams(param.Query) { Count = 4, Offset = param.OffsetGroups });

            for (int i = 0; i < groups.ToCollection().Count; i++)
            {
                if (groups.ToCollection()[i] != null)
                {
                    var info = await membersGroups.GetMembersAsync(groups.ToCollection()[i].Id.ToString());

                    if (info.CountSubscribers >= minCountSubscribers)
                    {
                        var result = await searchImagesInGroups.GetAsync(
                            new ImagesGetAllParams(groups.ToCollection()[i].Id, count : param.Count, offset : param.Offset));

                        if (result.TotalCount > 10)
                        {                                       //+1 т.к индекс начинается с 0, а нам нужен НОМЕР группы
                            result.CurrentNumberGroups = i + 1; //записываем номер группы для того что бы вызывающий код мог вызывать этот метод уже с новым сдвигом
                            return(result);
                        }
                    }
                }
            }
            return(null);
        }
Example #7
0
        public ImageResult SearchImages(ImageSearchParams param)
        {
            if (param.OffsetGroups >= 20)
            {
                var offsetImages = --param.Offset * param.Count;
                var imagesVk     = Api.Photo.Search
                                       (new VkNet.Model.RequestParams.PhotoSearchParams()
                {
                    Query = param.Query, Count = (ulong?)param.Count, Offset = (ulong?)offsetImages
                });
                return(GetMapperImage(imagesVk));
            }

            var searchGroups         = _imagesFactory.CreateGetGroups(Api);
            var membersGroups        = _imagesFactory.CreateGetMembersByGroup(Api);
            var searchImagesInGroups = _imagesFactory.CreateGetImagesForGroups(Api);

            var groups = searchGroups.Get(new GroupSearchParams(param.Query)
            {
                Count = 4, Offset = param.OffsetGroups
            });

            for (int i = 0; i < groups.ToCollection().Count; i++)
            {
                if (groups.ToCollection()[i] != null)
                {
                    var info = membersGroups.GetMembers(groups.ToCollection()[i].Id.ToString());
                    if (info.CountSubscribers >= minCountSubscribers)
                    {
                        var result = searchImagesInGroups.Get(
                            new ImagesGetAllParams(groups.ToCollection()[i].Id, count: param.Count, offset: param.Offset));
                        if (result.TotalCount > 10)
                        {
                            result.CurrentNumberGroups = i + 1;
                            return(result);
                        }
                    }
                }
            }
            return(null);
        }
Example #8
0
        public async Task <ImageResult> SearchImagesAsync(ImageSearchParams param)
        {
            MemoryCache cache = MemoryCache.Default;
            string      key   = $"{param.Query}.{param.Offset}.{param.OffsetGroups}";

            var cacheImages = cache.Get(key) as ImageResult;

            if (cacheImages == null)
            {
                var qualityImages = await _pixabayApi.SearchImagesAsync(param);

                CacheItemPolicy policy = new CacheItemPolicy()
                {
                    SlidingExpiration = TimeSpan.FromMinutes(30)
                };
                if (qualityImages?.TotalCount >= 200)
                {
                    cache.Add(key, qualityImages, policy);
                    return(qualityImages);
                }

                else
                {
                    var vkImages = await _vkApi.SearchImagesAsync(param);

                    while (vkImages == null) //если не нашли картинки в первых группах
                    {
                        //сдвигаем группы , я ищу по 4 группы и если я из 4 групп не нашел
                        //ни одной в которой есть картинки , то я сдвигаю группы на 4
                        param.OffsetGroups += 4;

                        //продолжаем искать картинки с новым сдвигом групп
                        vkImages = await _vkApi.SearchImagesAsync(param);
                    }

                    //OffsetGroups - текущий сдвиг групп
                    return(VkImages(param.OffsetGroups, cache, key, policy, vkImages));
                }
            }
            return(cacheImages);
        }