public async Task <HashTagData[]> Get(SectionMedia medias) { log.LogDebug("Get tags from [{0}] posts", medias.Medias.Count); var table = new Dictionary <string, HashTagData>(StringComparer.OrdinalIgnoreCase); foreach (InstaMedia media in medias.Medias) { var text = media.Caption?.Text; if (string.IsNullOrEmpty(text)) { continue; } var smart = captionHandler.Extract(text); foreach (HashTagData tag in smart.Tags.Where(x => !string.IsNullOrEmpty(x.Text))) { if (!table.ContainsKey(tag.Tag)) { table[tag.Tag] = tag; tag.MediaCount = 0; } table[tag.Tag].MediaCount += 1; } } log.LogInformation("Enriching {0} tags", table.Count); foreach (var data in table.ToArray()) { if (table[data.Key].Rank.HasValue) { continue; } var result = await smartTags.Get(data.Value).ConfigureAwait(false); foreach (var hashTagData in result) { if (table.ContainsKey(hashTagData.Tag)) { table[hashTagData.Tag] = hashTagData; } } } return(table.Values.ToArray()); }
private async Task <HashTagData[]> GetMix(HashTagData[] tags, int total) { if (tags == null) { throw new ArgumentNullException(nameof(tags)); } logger.LogInformation("Getting mix from {0} tags", tags.Length); var table = new Dictionary <string, HashTagData>(StringComparer.OrdinalIgnoreCase); foreach (var tag in tags) { table[tag.Text] = tag; } var tagsResults = new List <List <HashTagData> >(); foreach (var tag in tags) { var result = await smartTags.Get(tag).ConfigureAwait(false); result = result.Where(item => item.MediaCount.HasValue).ToArray(); if (result.Length > 0) { tagsResults.Add(result.OrderByDescending(item => item.MediaCount).ToList()); } } int indexResults = 0; while (table.Count < total) { if (tagsResults.Count == 0) { logger.LogInformation("Tag population completed - all sources depleted"); break; } if (indexResults >= tagsResults.Count) { indexResults = 0; } var current = tagsResults[indexResults]; bool added = false; while (current.Count > 0) { var selected = current[0]; current.RemoveAt(0); if (!table.ContainsKey(selected.Text)) { table.Add(selected.Text, selected); added = true; break; } } if (!added) { tagsResults.RemoveAt(indexResults); } else { indexResults++; } } return(table.Values.ToArray()); }
public async Task GetSmart() { var result = await instance.Get(HashTagData.FromText("london")).ConfigureAwait(false); Assert.Greater(result.Length, 20); }