Exemplo n.º 1
0
        public virtual async Task <SlugCollection> GetSlugsAsync(string keyword)
        {
            SlugCollection slugCollection = new SlugCollection();

            HttpClient client = new HttpClient
            {
                BaseAddress = _uriSlug
            };

            foreach (string letter in _letters)
            {
                string query = $"{keyword} {letter}";
                try
                {
                    string content = await client.GetStringAsync($"?kwd={query}&_jgr=1&sId=0&_ch=0&callback=nil");

                    if (Regex.IsMatch(content, @"/\*\*/nil\("))
                    {
                        content = content.Replace("/**/nil(", "").Replace("}})", "}}");
                        JObject jObject = JObject.Parse(content);
                        slugCollection.AddRange(jObject["res"]["sug"].Select(p => p.ToString()).ToList());
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError($"Error trying to get slug word {query}. Exception {ex.Message}");
                }
            }

            return(slugCollection);
        }
Exemplo n.º 2
0
        public async override Task <Message> OnGetMessage(MessageOperation message, CancellationToken cancellationToken)
        {
            Message outMessage = default(Message);

            int countCalls = await CheckDailyLimit(message);

            if (countCalls >= configuration.MaxCallTimes)
            {
                return(new MaxLimitMessage(countCalls));
            }
            else if (message.Operation == "slug")
            {
                SlugCollection slugCollection = await _ebayService.GetSlugsAsync(message.Data);

                outMessage = new Message <SlugCollection> {
                    Data = slugCollection
                };
            }
            else if (message.Operation == "product")
            {
                var result = await _ebayService.GetProductAsync(message.Data);

                outMessage = new Message <Product> {
                    Data = result
                };
            }
            else if (message.Operation == "complete")
            {
                SlugCollection slugCollection = await _ebayService.GetSlugsAsync(message.Data);

                string[] slugArray = slugCollection.Distinct().ToArray();
                BlockingCollection <Product> productCollection = new BlockingCollection <Product>(slugArray.Length);

                for (int i = 0; i < slugArray.Length; i++)
                {
                    productCollection.Add(await _ebayService.GetProductAsync(slugArray[i]));
                }

                var orderedProductCollection = productCollection.OrderBy(p => p.Name).ToArray();

                outMessage = new Message <Product[]> {
                    Data = orderedProductCollection
                };
            }

            await AddSearchToLog(message);

            if (outMessage != null)
            {
                return(outMessage);
            }
            return(await base.OnGetMessage(message, cancellationToken));
        }
Exemplo n.º 3
0
        public override async Task <SlugCollection> GetSlugsAsync(string keyword)
        {
            if (string.IsNullOrEmpty(keyword))
            {
                throw new ArgumentNullException(nameof(keyword));
            }

            if (_storage.ContainsSlug(keyword))
            {
                return(await _storage.GetSlug(keyword));
            }
            SlugCollection slugs = await base.GetSlugsAsync(keyword);

            await _storage.SetSlug(keyword, slugs);

            return(slugs);
        }
Exemplo n.º 4
0
 public Task SetSlug(string keyword, SlugCollection slugs)
 {
     return(Set($"slug_{keyword}", slugs));
 }