public async Task <HashTagData[]> Get(HashTagData tag) { if (tag == null) { throw new ArgumentNullException(nameof(tag)); } log.LogInformation("Extracting popular tags for [{0}]...", tag); try { var topMedia = await instagram.Resilience.WebPolicy .ExecuteAsync( () => ResultExtension.UnWrap(() => instagram.HashtagProcessor.GetTopHashtagMediaListAsync(tag.Text, PaginationParameters.MaxPagesToLoad(10)), log)) .ConfigureAwait(false); return(await smartTags.Get(topMedia).ConfigureAwait(false)); } catch (Exception e) { log.LogError(e, "Failed"); } log.LogWarning("Top media query failed"); return(new HashTagData[] { }); }
public void FromText(string original, string text, string tag) { var created = HashTagData.FromText(original); Assert.AreEqual(tag, created.Tag); Assert.AreEqual(text, created.Text); }
public void GenerateExpectedBehavior() { var instance = new SmartCaption("Message Conto #love", new[] { HashTagData.FromTag("#love") }); instance.AddTag(HashTagData.FromText("Love")); Assert.AreEqual("Message Conto #love", instance.Generate()); instance.AddTag(HashTagData.FromText("Lovex")); Assert.AreEqual("Message Conto #love #lovex", instance.Generate()); }
public async Task GetSmart() { call.Setup(item => item.Get(It.IsAny <string>(), It.IsAny <Func <string, Task <SmartResults> > >(), It.IsAny <Func <string, string> >())) .Returns(Task.FromResult(new SmartResults { Results = new List <SmartHashtagResult>( new[] { new SmartHashtagResult { Tag = "Test" } }) })); var result = await instance.Get(HashTagData.FromText("london")).ConfigureAwait(false); Assert.AreEqual(1, result.Length); }
public async Task <HashTagData[]> Get(HashTagData tag) { logger.LogDebug("Get Web Tags: {0}", tag); var result = await cached .Get(tag.Text, arg => client.GetRequest <SmartResults>(arg, CancellationToken.None), arg => arg) .ConfigureAwait(false); return(result.Results.Select( item => { var tagItem = HashTagData.FromText(item.Tag); tagItem.Rank = item.Rank; tagItem.Relevance = item.Relevance; tagItem.MediaCount = item.MediaCount; return tagItem; }).ToArray()); }
public async Task <HashTagData[]> Get(SmartCaption caption) { log.LogDebug("Finding similar posts - [{0}]", caption.Original); var tags = caption.Tags.ToString(); if (tags.Length < 3) { return(new HashTagData[] {}); } foreach (var tag in caption.Tags) { var topMedia = await instagram.Resilience.WebPolicy .ExecuteAsync( () => ResultExtension.UnWrap(() => instagram.HashtagProcessor.GetTopHashtagMediaListAsync(tag.Text, PaginationParameters.MaxPagesToLoad(1)), log)) .ConfigureAwait(false); foreach (var media in topMedia.Medias) { var text = media.Caption?.Text; if (string.IsNullOrEmpty(text)) { continue; } var smart = captionHandler.Extract(text); var bag = BagOfWords.Create(smart.Tags.Select(item => item.Tag).ToArray()); similarity.Register(bag); } } var result = similarity.FindSimilar(BagOfWords.Create(caption.Tags.Select(item => item.Tag).ToArray())); return(result.SelectMany( item => item.Document.Words.Select( x => { var tag = HashTagData.FromTag(x.Text); tag.Relevance = (int)(100 * item.Similarity); return tag; })) .ToArray()); }
public SmartCaption Extract(string caption) { if (caption == null) { return(new SmartCaption(caption, new HashTagData[] {})); } var table = new Dictionary <string, HashTagData>(StringComparer.OrdinalIgnoreCase); int?begin = null; for (int i = 0; i < caption.Length; i++) { var current = caption[i]; if (current == '#') { if (begin != null) { var tag = HashTagData.FromTag(caption.Substring(begin.Value, i - begin.Value)); table[tag.Tag] = tag; } begin = i; } else if (!char.IsLetterOrDigit(current) && current != '_' && begin != null) { var tag = HashTagData.FromTag(caption.Substring(begin.Value, i - begin.Value)); table[tag.Tag] = tag; begin = null; } } if (begin != null) { var tag = HashTagData.FromTag(caption.Substring(begin.Value, caption.Length - begin.Value)); table[tag.Tag] = tag; } return(new SmartCaption(caption, table.Values.ToArray())); }
public void FromTextArgumnets() { Assert.Throws <ArgumentNullException>(() => HashTagData.FromText(null)); Assert.Throws <ArgumentOutOfRangeException>(() => HashTagData.FromText("#text")); }
public async Task GetSmart() { var result = await instance.Get(HashTagData.FromText("london")).ConfigureAwait(false); Assert.Greater(result.Length, 20); }