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); }
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)); }
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); }
public Task SetSlug(string keyword, SlugCollection slugs) { return(Set($"slug_{keyword}", slugs)); }