コード例 #1
0
        public PagedResponse <HashtagDto> Execute(HashtagSearch request)
        {
            var query = Context.Hashtags.AsQueryable();

            if (request.Tag != null)
            {
                query = query.Where(h => h.Tag.ToLower().Contains(request.Tag.ToLower()));
            }

            if (request.PageNumber != 0)
            {
                query = query.Skip((request.PageNumber - 1) * request.PerPage).Take(request.PerPage);
            }

            var totalCount = query.Count();
            var pagesCount = (int)System.Math.Ceiling((double)totalCount / request.PerPage);

            return(new PagedResponse <HashtagDto>
            {
                TotalCount = totalCount,
                PagesCount = pagesCount,
                CurrentPage = request.PageNumber,
                Data = query.Select(h => new HashtagDto
                {
                    Id = h.Id,
                    Tag = h.Tag,
                    ArticlesWithHashtag = h.HashtagArticles.Select(ah => ah.Article.Title)
                })
            });
        }
コード例 #2
0
        // GET: Hashtags
        public ActionResult Index([FromQuery] HashtagSearch hashtagSearch)
        {
            hashtagSearch.PageNumber = 0;
            var hashtags = _searchHashtagsCommand.Execute(hashtagSearch);

            return(View(hashtags.Data));
        }
コード例 #3
0
        /// <summary>
        ///     Searches for specific hashtag by search query.
        /// </summary>
        /// <param name="query">Search query</param>
        /// <param name="excludeList">
        ///     Array of numerical hashtag IDs (ie "17841562498105353") to exclude from the response,
        ///     allowing you to skip tags from a previous call to get more results
        /// </param>
        /// <param name="rankToken">The rank token from the previous page's response</param>
        /// <returns>
        ///     List of hashtags
        /// </returns>
        public async Task <IResult <HashtagSearch> > SearchHashtagAsync(string query, IEnumerable <long> excludeList, string rankToken)
        {
            InstaUserAuthValidator.Validate(userAuthValidate);
            var requestHeaderFieldsTooLarge = (HttpStatusCode)431;
            var count = 50;
            var tags  = new HashtagSearch();

            try
            {
                var userUri  = InstaUriCreator.GetSearchTagUri(query, count, excludeList, rankToken);
                var request  = httpHelper.GetDefaultRequest(HttpMethod.Get, userUri, deviceInfo);
                var response = await httpRequestProcessor.SendAsync(request).ConfigureAwait(false);

                var json = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                if (response.StatusCode == requestHeaderFieldsTooLarge)
                {
                    return(Result.Success(tags));
                }

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    return(Result.UnExpectedResponse <HashtagSearch>(response, json));
                }

                var tagsResponse = JsonConvert.DeserializeObject <HashtagSearchResponse>(
                    json,
                    new InstaHashtagSearchDataConverter());
                tags = InstaConvertersFabric.Instance.GetHashTagsSearchConverter(tagsResponse).Convert();

                if (tags.Any() && excludeList != null && excludeList.Contains(tags.First().Id))
                {
                    tags.RemoveAt(0);
                }

                if (!tags.Any())
                {
                    tags = new HashtagSearch();
                }

                return(Result.Success(tags));
            }
            catch (HttpRequestException httpException)
            {
                logger?.LogError(httpException, "Error");
                return(Result.Fail(httpException, default(HashtagSearch), ResponseType.NetworkProblem));
            }
            catch (Exception exception)
            {
                logger?.LogError(exception, "Error");
                return(Result.Fail(exception, tags));
            }
        }
コード例 #4
0
        /// <summary>
        ///     Get suggested hashtags
        /// </summary>
        /// <returns>
        ///     List of hashtags
        /// </returns>
        public async Task <IResult <HashtagSearch> > GetSuggestedHashtagsAsync()
        {
            InstaUserAuthValidator.Validate(userAuthValidate);
            var tags = new HashtagSearch();

            try
            {
                var userUri  = InstaUriCreator.GetSuggestedTagsUri();
                var request  = httpHelper.GetDefaultRequest(HttpMethod.Get, userUri, deviceInfo);
                var response = await httpRequestProcessor.SendAsync(request).ConfigureAwait(false);

                var json = await response.Content.ReadAsStringAsync().ConfigureAwait(false);

                if (response.StatusCode != HttpStatusCode.OK)
                {
                    return(Result.UnExpectedResponse <HashtagSearch>(response, json));
                }

                var tagsResponse = JsonConvert.DeserializeObject <HashtagSearchResponse>(
                    json,
                    new InstaHashtagSuggestedDataConverter());

                tags = InstaConvertersFabric.Instance.GetHashTagsSearchConverter(tagsResponse).Convert();
                return(Result.Success(tags));
            }
            catch (HttpRequestException httpException)
            {
                logger?.LogError(httpException, "Error");
                return(Result.Fail(httpException, default(HashtagSearch), ResponseType.NetworkProblem));
            }
            catch (Exception exception)
            {
                logger?.LogError(exception, "Error");
                return(Result.Fail(exception, tags));
            }
        }
コード例 #5
0
 public ActionResult <PagedResponse <HashtagDto> > Get([FromQuery] HashtagSearch hashtagSearch)
 => Ok(_searchHashtagsCommand.Execute(hashtagSearch));