Example #1
0
        /// <summary>
        /// Downloads info about timetables
        /// </summary>
        private static async Task FormatClasses(int listOfTeachersElementsNum, IElement listOfClasses)
        {
            for (var i = 0; i < listOfClasses.Children.Count(); i++)
            {
                var url      = "http://zs-1.pl/plan_nauczyciele/" + listOfClasses.Children[i].FirstElementChild.GetAttribute("href");
                var document = await new HtmlParser().ParseAsync(await GetSource(url));

                var className = document.QuerySelector("span").TextContent;

                var listOfHours = document.QuerySelectorAll("table").Where(p => p.ClassName == "tabela").ToList().First()
                                  .QuerySelectorAll("tr").Where(p => p.FirstElementChild.ClassName == "nr").ToList();

                var timetable = new Timetable
                {
                    name = className,
                    days = new List <Day>()
                };

                //iterates for 5 days
                for (var d = 0; d < 5; d++)
                {
                    var day = new Day {
                        Lessons = new List <Lesson>()
                    };

                    for (var h = 0; h < listOfHours.Count(); h++)
                    {
                        var lesson = new Lesson();
                        // 2, because 0 is h'our number, 1 is a ring time (eg. 7:10 -> xxx )
                        var item = listOfHours[h].Children[2 + d];

                        //if there is not any lesson
                        if (item.InnerHtml == NoLessonString)
                        {
                            day.Lessons.Add(lesson);
                            continue;
                        }

                        var spanList   = item.QuerySelectorAll("span");
                        var adressList = item.QuerySelectorAll("a");
                        var pList      = spanList.Where(p => p.ClassName == "p").ToList();
                        var sList      = spanList.Where(p => p.ClassName == "s").ToList();

                        lesson.lesson1Name  = pList.First().TextContent;
                        lesson.lesson1Place = sList.First().TextContent;

                        //sometimes, a class dont have a number of group in p.ClassName.TextContent
                        //so we have to check it manually
                        if (!lesson.lesson1Name.Contains("1/2") && !lesson.lesson1Name.Contains("2/2"))
                        {
                            lesson.lesson1Name += (item.TextContent.Contains("1/2") ? "-1/2" : item.TextContent.Contains("2/2") ? "-2/2" : "");
                        }

                        if (adressList.Count() == 0)
                        {
                            try
                            {
                                lesson.lesson1Tag = spanList.Where(p => p.ClassName == "p").ToList()[1].TextContent;
                            }
                            catch
                            {
                                lesson.lesson1Tag = spanList.Where(p => p.ClassName == "p").ToList()[0].TextContent;
                            }
                            lesson.lesson1TagHref = "";
                        }
                        else
                        {
                            if (pList.Count == 3)
                            {
                                lesson.lesson1Tag = pList[1].TextContent;

                                if (lesson.lesson1Tag.Length > 7)
                                {
                                    lesson.lesson1Tag = adressList.First(p => p.ClassName == "n").TextContent;
                                }

                                lesson.lesson1TagHref = "";
                            }
                            else
                            {
                                lesson.lesson1Tag     = adressList.First(p => p.ClassName == "n").TextContent;
                                lesson.lesson1TagHref = adressList.First().GetAttribute("href");
                            }
                        }

                        //sometimes model was other from main model,so we have to
                        //check all configuration and put it in right place
                        if (sList.Count == 2)
                        {
                            string name      = "";
                            string tag       = "";
                            string taghref   = "";
                            bool   checkName = false;

                            switch (pList.Count)
                            {
                            case 2:
                                name    = pList[1].TextContent;
                                tag     = adressList.Where(p => p.ClassName == "n").ToList()[1].TextContent;
                                taghref = adressList[1].GetAttribute("href");
                                break;

                            case 3:
                                name = pList[1].TextContent;

                                if (name.Length == 3)
                                {
                                    name = pList[2].TextContent;
                                    tag  = adressList.First().TextContent;
                                }

                                checkName = true;

                                if (tag == "")
                                {
                                    tag = pList[2].TextContent;
                                }

                                break;

                            case 4:
                                name      = pList[2].TextContent;
                                checkName = true;
                                tag       = pList[3].TextContent;
                                break;

                            default:
                                name = "error";
                                break;
                            }

                            if (checkName && (!name.Contains("1/2") && !name.Contains("2/2")))
                            {
                                int positionOfLesson2Name = item.TextContent.IndexOf(name, StringComparison.CurrentCulture);
                                var substring             = item.TextContent.Substring(positionOfLesson2Name, item.TextContent.Length - positionOfLesson2Name - 1);
                                name += substring.Contains("1/2") ? "-1/2" : substring.Contains("2/2") ? "-2/2" : "";
                            }

                            lesson.lesson2Name    = name;
                            lesson.lesson2Place   = sList[1].TextContent;
                            lesson.lesson2Tag     = tag;
                            lesson.lesson2TagHref = taghref;
                        }

                        lesson.lessonDayPosition = new Lesson.dayCoordiantes()
                        {
                            timetableId = i, dayId = d, lessonId = h
                        };
                        day.Lessons.Add(lesson);
                    }

                    timetable.days.Add(day);
                }

                timetable.type = Lesson.LessonType.Class;
                OnTimeTableDownloaded?.Invoke(timetable, listOfClasses.Children.Count() + listOfTeachersElementsNum);
            }
        }
Example #2
0
        private static async Task FormatTeachers(int classesTimetablesNum, IElement listOfTeachers)
        {
            for (var i = 0; i < listOfTeachers.Children.Count(); i++)
            {
                var url      = "http://zs-1.pl/plan_nauczyciele/" + listOfTeachers.Children[i].FirstElementChild.GetAttribute("href");
                var document = await new HtmlParser().ParseAsync(await GetSource(url));

                var className = document.QuerySelector("span").TextContent;

                var listOfHours = document.QuerySelectorAll("table").First(p => p.ClassName == "tabela")
                                  .QuerySelectorAll("tr").Where(p => p.FirstElementChild.ClassName == "nr").ToList();

                var timetable = new Timetable()
                {
                    name = className,
                    days = new List <Day>()
                };

                for (var d = 0; d < 5; d++)
                {
                    var day = new Day()
                    {
                        Lessons = new List <Lesson>()
                    };

                    for (var h = 0; h < listOfHours.Count(); h++)
                    {
                        var lesson = new Lesson();
                        // 2, because 0 is h'our number, 1 is a ring time (eg. 7:10 -> xxx )
                        var item = listOfHours[h].Children[2 + d];

                        if (item.InnerHtml == NoLessonString)
                        {
                            day.Lessons.Add(lesson);
                            continue;
                        }

                        var spanList = item.QuerySelectorAll("span");
                        lesson.lesson1Name  = spanList.First(p => p.ClassName == "p").TextContent;
                        lesson.lesson1Place = spanList.First(p => p.ClassName == "s").TextContent;

                        var adressList = item.QuerySelectorAll("a");

                        if (adressList.Count() > 1)
                        {
                            var outerHtml  = item.OuterHtml;
                            var fullString = string.Empty;

                            foreach (var adressElement in adressList)
                            {
                                int indexOfAdressElementInString = outerHtml.IndexOf(adressElement.OuterHtml,
                                                                                     StringComparison.Ordinal);

                                fullString += adressElement.TextContent +
                                              outerHtml.Substring(indexOfAdressElementInString + adressElement.OuterHtml.Length, 5)
                                              .Trim();
                            }

                            if (fullString[fullString.Length - 1] == ',')
                            {
                                fullString = fullString.Remove(fullString.Length - 1, 1);
                            }

                            lesson.lesson2Name = fullString;
                        }
                        else
                        {
                            lesson.lesson2Name = adressList.First().TextContent +
                                                 ((item.TextContent.Contains("1/2")) ? "-1/2" : item.TextContent.Contains("2/2") ? "-2/2" : "");
                        }

                        lesson.lesson1TagHref = adressList.First().GetAttribute("href");

                        lesson.lessonDayPosition = new Lesson.dayCoordiantes()
                        {
                            timetableId = classesTimetablesNum, dayId = d, lessonId = h
                        };
                        day.Lessons.Add(lesson);
                    }

                    timetable.days.Add(day);
                }

                timetable.type = Lesson.LessonType.Teacher;
                OnTimeTableDownloaded?.Invoke(timetable, classesTimetablesNum + listOfTeachers.Children.Count());
            }
        }