internal void Crawl(Type type, ICrawlToken token, object value)
        {
            if (_crawledItems.Contains(value))
            {
                return;
            }
            _crawledItems.Add(value);
            CrawlingType crawlingType = Configuration.CrawlingTypeDetection.DetectType(type, token);
            ICrawler     crawler;

            switch (crawlingType)
            {
            case CrawlingType.Reference:
                crawler = new ReferenceCrawler(value, type, token, this);
                break;

            case CrawlingType.Value:
                crawler = new ValueCrawler(value, type, token, this);
                break;

            case CrawlingType.Enumerable:
                crawler = new EnumerableCrawler(value, type, token, this);
                break;

            case CrawlingType.Dictionary:
                crawler = new DictionaryCrawler(value, type, token, this);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
            crawler.Crawl();
        }
示例#2
0
        private async Task <string> GetSourceId(CrawlingType crawlingType, string boardName)
        {
            if (crawlingType == CrawlingType.Rss)
            {
                return(string.Empty);
            }

            var source = await _sourceService.GetByName(crawlingType, boardName);

            if (source == null)
            {
                throw new DeveloperException(ResultCode.NotFoundSource);
            }

            return(source.Id);
        }
示例#3
0
 public async Task <Source> GetByName(CrawlingType crawlingType, string boardName)
 {
     return(await _mongoDbSource.FindOneAsync(Builders <Source> .Filter.Eq(x => x.Type, crawlingType)&
                                              Builders <Source> .Filter.Eq(x => x.Name, boardName)));
 }
示例#4
0
 private FilterDefinition <Notification> GetFilterDefinition(string sourceId, CrawlingType crawlingType, NotificationType notificationType)
 {
     return(Builders <Notification> .Filter.Eq(x => x.SourceId, sourceId) &
            Builders <Notification> .Filter.Eq(x => x.CrawlingType, crawlingType) &
            Builders <Notification> .Filter.Eq(x => x.Type, notificationType));
 }