private async Task <IResult <InstaSectionMediaListResponse> > GetSectionMedia(InstaSectionType sectionType, long locationId, string maxId = null, int?page = null, List <long> nextMediaIds = null) { try { var instaUri = UriCreator.GetLocationSectionUri(locationId.ToString()); var data = new Dictionary <string, string> { { "rank_token", _deviceInfo.DeviceGuid.ToString() }, { "_uuid", _deviceInfo.DeviceGuid.ToString() }, { "_csrftoken", _user.CsrfToken }, { "session_id", Guid.NewGuid().ToString() }, { "tab", sectionType.ToString().ToLower() } }; if (!string.IsNullOrEmpty(maxId)) { data.Add("max_id", maxId); } if (page != null && page > 0) { data.Add("page", page.ToString()); } if (nextMediaIds?.Count > 0) { var mediaIds = $"[{string.Join(",", nextMediaIds)}]"; if (sectionType == InstaSectionType.Ranked) { data.Add("next_media_ids", mediaIds.EncodeUri()); } else { data.Add("next_media_ids", mediaIds); } } var request = _httpHelper.GetDefaultRequest(HttpMethod.Post, instaUri, _deviceInfo, data); var response = await _httpRequestProcessor.SendAsync(request); var json = await response.Content.ReadAsStringAsync(); if (response.StatusCode != HttpStatusCode.OK) { return(Result.UnExpectedResponse <InstaSectionMediaListResponse>(response, json)); } var obj = JsonConvert.DeserializeObject <InstaSectionMediaListResponse>(json); return(Result.Success(obj)); } catch (HttpRequestException httpException) { _logger?.LogException(httpException); return(Result.Fail(httpException, default(InstaSectionMediaListResponse), ResponseType.NetworkProblem)); } catch (Exception exception) { _logger?.LogException(exception); return(Result.Fail <InstaSectionMediaListResponse>(exception)); } }
private async Task <IResult <InstaSectionMedia> > GetSectionAsync(long locationId, PaginationParameters paginationParameters, InstaSectionType sectionType) { UserAuthValidator.Validate(_userAuthValidate); try { if (paginationParameters == null) { paginationParameters = PaginationParameters.MaxPagesToLoad(1); } InstaSectionMedia Convert(InstaSectionMediaListResponse sectionMediaListResponse) { return(ConvertersFabric.Instance.GetHashtagMediaListConverter(sectionMediaListResponse).Convert()); } var mediaResponse = await GetSectionMedia(sectionType, locationId, paginationParameters.NextMaxId, paginationParameters.NextPage, paginationParameters.NextMediaIds); if (!mediaResponse.Succeeded) { if (mediaResponse.Value != null) { Result.Fail(mediaResponse.Info, Convert(mediaResponse.Value)); } else { Result.Fail(mediaResponse.Info, default(InstaSectionMedia)); } } paginationParameters.NextMediaIds = mediaResponse.Value.NextMediaIds; paginationParameters.NextPage = mediaResponse.Value.NextPage; paginationParameters.NextMaxId = mediaResponse.Value.NextMaxId; while (mediaResponse.Value.MoreAvailable && !string.IsNullOrEmpty(paginationParameters.NextMaxId) && paginationParameters.PagesLoaded < paginationParameters.MaximumPagesToLoad) { var moreMedias = await GetSectionMedia(sectionType, locationId, paginationParameters.NextMaxId, mediaResponse.Value.NextPage, mediaResponse.Value.NextMediaIds); if (!moreMedias.Succeeded) { if (mediaResponse.Value.Sections?.Count > 0) { return(Result.Success(Convert(mediaResponse.Value))); } else { return(Result.Fail(moreMedias.Info, Convert(mediaResponse.Value))); } } mediaResponse.Value.MoreAvailable = moreMedias.Value.MoreAvailable; mediaResponse.Value.NextMaxId = paginationParameters.NextMaxId = moreMedias.Value.NextMaxId; mediaResponse.Value.AutoLoadMoreEnabled = moreMedias.Value.AutoLoadMoreEnabled; mediaResponse.Value.NextMediaIds = paginationParameters.NextMediaIds = moreMedias.Value.NextMediaIds; mediaResponse.Value.NextPage = paginationParameters.NextPage = moreMedias.Value.NextPage; mediaResponse.Value.Sections.AddRange(moreMedias.Value.Sections); paginationParameters.PagesLoaded++; } return(Result.Success(ConvertersFabric.Instance.GetHashtagMediaListConverter(mediaResponse.Value).Convert())); } catch (HttpRequestException httpException) { _logger?.LogException(httpException); return(Result.Fail(httpException, default(InstaSectionMedia), ResponseType.NetworkProblem)); } catch (Exception exception) { _logger?.LogException(exception); return(Result.Fail <InstaSectionMedia>(exception)); } }