示例#1
0
        private bool NeedWaitToNextLike()
        {
            var compareHour = DateTime.Now.AddHours(-1);
            var compareDay  = DateTime.Now.AddDays(-1);
            var hourLike    = LikedMediaRepository.Query <LikedMedia>(x => x.CreationTime > compareHour).Count();
            var dailyLike   = LikedMediaRepository.Query <LikedMedia>(x => x.CreationTime > compareDay).Count();

            Logger.Trace($"{hourLike} like since {compareHour}");
            Logger.Trace($"{dailyLike} like since {compareDay}");
            return(hourLike > ConfigurationManager.BotSettings.MaxLikePerHour || dailyLike > ConfigurationManager.BotSettings.MaxLikePerDay);
        }
示例#2
0
        public async Task Start()
        {
            Logger.Info("Start Like task");
            var tags     = ConfigurationManager.BotSettings.Tags;
            var stopTags = ConfigurationManager.BotSettings.StopTags.Select(x => x.ToUpper()).ToArray();

            Logger.Info("Using tags:{0}", string.Join(",", tags));
            Logger.Info("Using stop tags:{0}", string.Join(",", stopTags));
            do
            {
                var medias = new List <Media>();
                foreach (var tag in tags)
                {
                    try
                    {
                        var foundTags = await TagManager.SearchTags(tag);

                        var tagEntity = foundTags.Results.FirstOrDefault(x => x.Name.Equals(tag));
                        if (tagEntity == null)
                        {
                            continue;
                        }

                        Logger.Trace($"Retrieving tag {tagEntity.Name}");

                        var tagFeed = await FeedManager.TagFeed(tagEntity.Name);

                        var resultsTag = tagFeed.Items.Where(x =>
                                                             x != null &&
                                                             x.LikeCount >= ConfigurationManager.BotSettings.MinLikeToLike &&
                                                             x.LikeCount < ConfigurationManager.BotSettings.MaxLikeToLike && !x.HasLiked &&
                                                             (x.Caption == null || !x.Caption.Text.ToUpper().ContainsAny(stopTags)) &&
                                                             (x.Comments == null || !x.Comments.Any(c => c.Text.ToUpper().ContainsAny(stopTags)))).ToList();
                        Logger.Trace($"Retrieved {resultsTag.Count} medias for tag {tagEntity.Name}");
                        medias.AddRange(resultsTag);
                    }
                    catch (InstagramException ex)
                    {
                        Logger.Error($"Error on fetching tag {tag}", ex);
                    }
                    catch (Exception ex)
                    {
                        Logger.Critical($"Critical error on fetching tag {tag}", ex);
                    }
                }
                medias = medias.Distinct().ToList();
                medias.Shuffle();
                foreach (var media in medias)
                {
                    if (LikedMediaRepository.GetById(media.Id) != null)
                    {
                        continue;
                    }

                    try
                    {
                        while (NeedWaitToNextLike())
                        {
                            var waitTime = 5;
                            Logger.Info($"Too much like, waiting {waitTime}min");
                            await Task.Delay(new TimeSpan(0, waitTime, 0));
                        }

                        await MediaManager.Like(media);

                        Logger.Info($"Liking media {media.Id}");
                        LikedMediaRepository.Save(new LikedMedia(media.Id));
                        await Task.Delay(new TimeSpan(0, 0, 30));
                    }
                    catch (InstagramException ex)
                    {
                        Logger.Error($"Unable to like {media.Id}, {ex}", ex);
                    }
                    catch (Exception ex)
                    {
                        Logger.Error($"Fatal erreur to like {media.Id}, {ex}", ex);
                    }
                }
            } while (true);
        }