private async Task <EventData> GetEventDataFrom(HtmlNodeCollection tdNodes, string previousEventVenue, string previousEventLocation, bool previousEventIsCancelled, CancellationToken cancellationToken = default) { var eventNameIndex = 0; var eventDateIndex = 1; var eventVenueIndex = 2; var eventLocationIndex = 3; var eventIsCancelledIndex = 4; var eventName = GetInnerTextFrom(tdNodes[eventNameIndex]); if (string.IsNullOrWhiteSpace(eventName)) { Log(LogLevel.Warning, $"Event name was null or white space: {eventName}"); } else { Log(LogLevel.Information, $"Start parsing event: {eventName}"); } var eventDate = GetEventDate(tdNodes, eventDateIndex); if (tdNodes.ElementAtOrDefault(eventVenueIndex) is not null) { var currentEventVenue = GetInnerTextFrom(tdNodes[eventVenueIndex]); if (!Regex.IsMatch(currentEventVenue, @"^[\d*]")) { previousEventVenue = currentEventVenue; } } if (tdNodes.ElementAtOrDefault(eventLocationIndex) is not null) { var currentEventLocation = GetInnerTextFrom(tdNodes[eventLocationIndex]); if (!Regex.IsMatch(currentEventLocation, @"^[\d*]")) { previousEventLocation = currentEventLocation; } } if (tdNodes.ElementAtOrDefault(eventIsCancelledIndex) is not null) { previousEventIsCancelled = GetInnerTextFrom(tdNodes[eventIsCancelledIndex]).Contains(Cancelled_Token); } var eventData = new EventData() { EventName = eventName, Date = eventDate, Venue = previousEventVenue, Location = previousEventLocation, IsCancelled = previousEventIsCancelled }; var fightCardHref = GetFightCardHref(tdNodes[eventNameIndex]); if (string.IsNullOrWhiteSpace(fightCardHref)) { Log(LogLevel.Debug, $"Fight card href for event: {eventName} / {eventDate.ToShortDateString()} was not found."); return(eventData); } Log(LogLevel.Information, $"Start parsing event deatails for: {eventName} / {eventDate.ToShortDateString()}."); var fightCardUri = new Uri(Base_Uri + fightCardHref); var documentNode = GetDocumentNode(await GetHtmlContentFromWebAsync(fightCardUri, cancellationToken)); eventData.ImgSrc = GetImgSrc(documentNode); eventData.FightCard = GetFightCard(documentNode); var bonusAwardsNode = documentNode.SelectNodes(Bonus_Awards_Xpath)?.FirstOrDefault(); if (bonusAwardsNode is not null) { eventData.BonusAwards = GetBonusAwards(bonusAwardsNode); } return(eventData); }