コード例 #1
0
        public IDictionary <int, List <int> > GetBanlists(BanlistType banlistType, string banlistUrl)
        {
            var articleIdsList = new Dictionary <int, List <int> >();

            var banlistUrlsByYear = _banlistWebPage.GetBanlistUrlList(banlistType, banlistUrl);

            foreach (var banlist in banlistUrlsByYear)
            {
                var banlistYear = int.Parse(banlist.Key);
                var articleIds  = new List <int>();

                foreach (var url in banlist.Value)
                {
                    var banlistPageHtml = _htmlWebPage.Load(url).DocumentNode.InnerHtml;

                    Regex regex = new Regex("wgArticleId=([^,]*),");
                    Match match = regex.Match(banlistPageHtml);

                    var wgArticleId = int.Parse(match.Groups[1].Value);

                    articleIds.Add(wgArticleId);
                }

                articleIdsList.Add(banlistYear, articleIds);
            }

            return(articleIdsList);
        }
コード例 #2
0
        public async Task <ArticleBatchTaskResult> Process(BanlistType banlistType)
        {
            var response = new ArticleBatchTaskResult();

            const string baseBanlistUrl    = "http://yugioh.fandom.com/wiki/July_1999_Lists";
            var          banListArticleIds = _banlistUrlDataSource.GetBanlists(banlistType, baseBanlistUrl);

            foreach (var(year, banlistIds) in banListArticleIds)
            {
                _logger.LogInformation("{@BanlistType} banlists for the year: {@Year}", banlistType.ToString().ToUpper(), year);

                foreach (var articleId in banlistIds)
                {
                    _logger.LogInformation("{@BanlistType} banlist articleId: {@ArticleId}", banlistType.ToString().ToUpper(), articleId);

                    var articleResult = await _articleProcessor.Process(ArticleCategory.ForbiddenAndLimited, new UnexpandedArticle { Id = articleId });

                    if (articleResult.IsSuccessfullyProcessed)
                    {
                        response.Processed += 1;
                    }
                }
            }

            return(response);
        }
コード例 #3
0
        public async Task <ArticleBatchTaskResult> Process(BanlistType banlistType)
        {
            var response = new ArticleBatchTaskResult();

            const string baseBanlistUrl       = "http://yugioh.wikia.com/wiki/July_1999_Lists";
            var          banListArticleIds    = _banlistUrlDataSource.GetBanlists(banlistType, baseBanlistUrl);
            var          articleItemProcessor = _articleHandler.Handler(ArticleCategory.ForbiddenAndLimited);

            foreach (var banListArticleId in banListArticleIds)
            {
                _logger.Info($"{banlistType.ToString().ToUpper()} banlists for the year: {banListArticleId.Key}");

                foreach (var articleId in banListArticleId.Value)
                {
                    _logger.Info($"{banlistType.ToString().ToUpper()} banlist articleId: {articleId}");

                    var articleResult = await articleItemProcessor.ProcessItem(new UnexpandedArticle { Id = articleId });

                    if (articleResult.IsSuccessfullyProcessed)
                    {
                        response.Processed += 1;
                    }
                }
            }

            return(response);
        }
コード例 #4
0
 public HtmlNode GetBanlistHtmlNode(BanlistType banlistType, HtmlDocument document)
 {
     return(document
            .DocumentNode
            .SelectSingleNode($"//*[contains(@class,'nowraplinks navbox-subgroup')]/tr/th/i[contains(text(), '{banlistType.ToString().ToUpper()}')]")
            .ParentNode
            .ParentNode
            .SelectSingleNode("./td/table/tr[1]/td[1]/div/ul"));
 }
コード例 #5
0
        public void Given_A_Banlist_Web_Url_And_BanlistType_Should_Contain_Key(BanlistType banlistType, string banlistUrl)
        {
            // Arrange

            // Act
            var banlistUrls = _sut.GetBanlistUrlList(banlistType, banlistUrl);

            // Assert
            banlistUrls.Should().ContainKey("2005");
        }
コード例 #6
0
        public Dictionary <string, List <Uri> > GetBanlistUrlList(BanlistType banlistType, string banlistUrl)
        {
            var banlistUrlListNode = _banlistHtmlDocument.GetBanlistHtmlNode(banlistType, banlistUrl);

            return(GetBanlistUrlList(banlistUrlListNode));
        }
コード例 #7
0
 public HtmlNode GetBanlistHtmlNode(BanlistType banlistType, string banlistUrl)
 {
     return(GetBanlistHtmlNode(banlistType, _htmlWebPage.Load(banlistUrl)));
 }
コード例 #8
0
        public void Given_A_Banlist_TitleText_Should_Extract_Banlist_Type(string titleText, BanlistType expected)
        {
            // Arrange

            // Act
            var result = BanlistHelpers.ExtractBanlistArticleDetails(Arg.Any <int>(), titleText);

            // Assert
            result.BanlistType.Should().Be(expected);
        }
コード例 #9
0
        public void Given_A_Banlist_Web_Url_And_BanlistType_Should_Have_A_Count_Greater_Than_1(BanlistType banlistType, string banlistUrl)
        {
            // Arrange

            // Act
            var banlistUrls = _sut.GetBanlistUrlList(banlistType, banlistUrl);

            // Assert
            banlistUrls.Should().HaveCountGreaterThan(1);
        }
コード例 #10
0
        public void Given_A_Banlist_Web_Url_And_BanlistType_Should_Return_HtmlNode_List_Of_Banlists_Ids(BanlistType banlistType, string banlistUrl)
        {
            // Arrange

            // Act
            var banlistsIds = _sut.GetBanlists(banlistType, banlistUrl);

            // Assert
            banlistsIds.Should().ContainKey(2005);
        }
コード例 #11
0
        public void Given_A_Banlist_Web_Url_And_BanlistType_Should_Return_HtmlNode_List_Of_Available_Banlists(BanlistType banlistType, string banlistUrl)
        {
            // Arrange

            // Act
            var htmlNodeList = _sut.GetBanlistHtmlNode(banlistType, banlistUrl);

            // Assert
            htmlNodeList.Name.Should().BeEquivalentTo("ul");
        }