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); }
public ImageResult SearchImages(ImageSearchParams param) { var images = Api.QueryImagesAsync(new ImageQueryBuilder() { Query = param.Query, PerPage = param.Count, Page = param.Offset }); return(GetMapperImage(images.Result)); }
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)); }
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()); }
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); }
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); }
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); }
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); }