Exemple #1
0
        public async Task Execute(FilterDefinition <Notification> filter, CrawlingData crawlingData)
        {
            var notifications = await Get(filter);

            foreach (var notification in notifications)
            {
                if (!notification.ContainsKeyword(crawlingData.Title))
                {
                    continue;
                }

                if (notification.FilteredTime(DateTime.Now))
                {
                    continue;
                }

                switch (notification.Type)
                {
                case NotificationType.Discord:
                    _discordWebHooks.Add(DiscordNotify(notification, crawlingData));
                    break;

                case NotificationType.Slack:
                    _slackWebHooks.Add(SlackNotify(notification, crawlingData));
                    break;

                default:
                    throw new DeveloperException(ResultCode.NotImplementedYet);
                }
            }
        }
Exemple #2
0
        protected async Task OnCrawlData(CrawlingData crawlingData)
        {
            if (MongoDbCrawlingData == null)
            {
                return;
            }

            // 글자 뒤의 공백 날리기
            crawlingData.Title = crawlingData.Title.TrimEnd();

            // 현재시간보다 크다면, 시간만 담긴 데이터에서 전날 글에 대한 시간 + 오늘 날짜로 값이 들어와서 그런 것. 이에 대한 예외처리
            if (crawlingData.DateTime > DateTime.Now)
            {
                crawlingData.DateTime = crawlingData.DateTime.AddDays(-1);
            }

            var builder = Builders <CrawlingData> .Filter;
            var filter  = builder.Eq(x => x.Type, crawlingData.Type);

            filter &= builder.Eq(x => x.BoardId, crawlingData.BoardId);

            if (crawlingData.RowId.HasValue)
            {
                filter &= builder.Eq(x => x.RowId, crawlingData.RowId.Value);
            }
            else
            {
                filter &= Builders <CrawlingData> .Filter.Eq(x => x.Href, crawlingData.Href);
            }

            await MongoDbCrawlingData.UpsertAsync(filter, crawlingData,
                                                  async (crawlingData) =>
            {
                if (OnCrawlDataDelegate != null)
                {
                    await OnCrawlDataDelegate.Invoke(crawlingData);
                }
            });
        }
Exemple #3
0
 public async Task OnNewCrawlData(CrawlingData crawlingData)
 {
     await _notificationService.Execute(Builders <Notification> .Filter.Eq(x => x.SourceId, crawlingData.SourceId), crawlingData);
 }
Exemple #4
0
        private Protocols.Notification.Request.DiscordWebHook DiscordNotify(Notification notification, CrawlingData crawlingData)
        {
            var category = string.IsNullOrEmpty(crawlingData.Category) ? string.Empty : $"<{crawlingData.Category}>";

            return(new Protocols.Notification.Request.DiscordWebHook
            {
                username = notification.Name,
                avatar_url = notification.IconUrl,
                content = $"[{category}{crawlingData.Title}]({crawlingData.Href}) <{crawlingData.DateTime}>",
                HookUrl = notification.HookUrl
            });
        }
Exemple #5
0
        private Protocols.Notification.Request.SlackWebHook SlackNotify(Notification notification, CrawlingData crawlingData)
        {
            var category = string.IsNullOrEmpty(crawlingData.Category) ? string.Empty : $"[{crawlingData.Category}]";

            return(new Protocols.Notification.Request.SlackWebHook
            {
                username = notification.Name,
                channel = notification.Channel,
                icon_url = notification.IconUrl,
                text = $"<{crawlingData.Href}|{category}{crawlingData.Title}> [{crawlingData.DateTime}]",
                HookUrl = notification.HookUrl
            });
        }