private Lesson ParseLesson(HtmlNode node, int order, Teacher teacher) { var emoji = node.Elements("b") .Select(it => AuditoriumExt.ReplaceEmojiByText(it.InnerText)) .FirstOrDefault() ?? string.Empty; var auditoriums = node.Descendants() .Where(it => it.HasClass("lesson__auditory")) .Select(it => new Auditorium(emoji + " " + it.InnerText, string.Empty)); var(dateFrom, dateTo) = ParseDates(node); var lessonTitle = node.Descendants() .Where(it => it.HasClass("lesson__subject")) .FirstOrDefault()?.InnerText ?? ""; var match = regex0.Matches(lessonTitle).LastOrDefault(); var lessonType = match?.Groups?.Values.ElementAtOrDefault(1)?.Value ?? "Другое"; if (match != null) { lessonTitle = lessonTitle.Replace($"({lessonType})", ""); } lessonTitle = ProcessTitle(lessonTitle); lessonType = LessonExt.FixTeacherType(lessonType, lessonTitle); var groups = node.Descendants() .Where(it => it.HasClass("lesson__group")) .Select(it => new Group(it.InnerText, false)); return(new Lesson( order, lessonTitle, lessonType, new List <Teacher>() { teacher }, auditoriums.ToList(), groups.ToList(), dateFrom, dateTo )); }
private Lesson ParseLesson( JsonElement json, int order, Group group, bool isByDate, DateTime date ) { this.logger.LogDebug($"ParseLesson order = {order}"); string title = json.TryGetProperty(LessonTitleKey, out var titleElement) ? titleElement.GetString() : "Не найден ключ названия занятия. " + $"Возможно, структура расписания была обновлена: {json}"; var teachers = json.TryGetProperty(LessonTeacherKey, out var teachersElement) ? ParseTeachers(teachersElement.GetString()) : Array.Empty <Teacher>(); DateTime dateFrom; DateTime dateTo; if (isByDate) { dateFrom = date; dateTo = date; } else { dateFrom = json.TryGetProperty(LessonDateFromKey, out var dateFromElement) ? ParseDateFrom(dateFromElement.GetString()) : DateTime.MinValue; dateTo = json.TryGetProperty(LessonDateToKey, out var dateToElement) ? ParseDateTo(dateToElement.GetString()) : DateTime.MaxValue; } if (dateTo < dateFrom) { var buf = dateTo; dateTo = dateFrom; dateFrom = buf; } var auditoriums = json.TryGetProperty(LessonAuditoriumsKey, out var auditoriumsElement) ? ParseAuditoriums(auditoriumsElement) : Array.Empty <Auditorium>(); string type; if (json.TryGetProperty(LessonTypeKey, out var typeElement)) { type = typeElement.GetString(); } else { type = string.Empty; Console.WriteLine($"Lesson type key {LessonTypeKey} not found"); } return(new Lesson( order, title, LessonExt.FixType(type, title), teachers, auditoriums, new[] { group }, dateFrom, dateTo )); }