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[] { });
        }
示例#2
0
        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());
        }
示例#4
0
        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());
        }
示例#7
0
        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()));
        }
示例#8
0
 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);
        }