From 04303308010a060da2199568de89dce403275760 Mon Sep 17 00:00:00 2001 From: Seil0 Date: Tue, 6 Nov 2018 15:35:38 +0100 Subject: [PATCH] added mensa and timetable parser --- build.gradle | 3 +- src/main/kotlin/Main.kt | 11 ++++ src/main/kotlin/MensaParser.kt | 58 ++++++++++++++++++++++ src/main/kotlin/TimeTableParser.kt | 80 ++++++++++++++++++++++++++++++ 4 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 src/main/kotlin/Main.kt create mode 100644 src/main/kotlin/MensaParser.kt create mode 100644 src/main/kotlin/TimeTableParser.kt diff --git a/build.gradle b/build.gradle index 8f1cc91..b3cfbd2 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,8 @@ repositories { } dependencies { - compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" + implementation 'org.jsoup:jsoup:1.11.3' } compileKotlin { diff --git a/src/main/kotlin/Main.kt b/src/main/kotlin/Main.kt new file mode 100644 index 0000000..3623514 --- /dev/null +++ b/src/main/kotlin/Main.kt @@ -0,0 +1,11 @@ + + +fun main() { + // TODO implement +} + +data class Lesson(val lessonSubject: String, val lessonTeacher: String, val lessonRoom:String, val lessonRemark: String) + +data class CourseTTLink(val courseTTLink: String, val course: String) + +data class Meal(val day: String, val heading: String, val parts: ArrayList, val additives: String) diff --git a/src/main/kotlin/MensaParser.kt b/src/main/kotlin/MensaParser.kt new file mode 100644 index 0000000..592e4f0 --- /dev/null +++ b/src/main/kotlin/MensaParser.kt @@ -0,0 +1,58 @@ + +import org.jsoup.Jsoup + +class MensaParser { + fun getMensaMenu() { + val menuHTML = Jsoup.connect("https://www.swfr.de/de/essen-trinken/speiseplaene/mensa-offenburg/").get() + + menuHTML.select("#speiseplan-tabs").select("div.tab-content").select("div.menu-tagesplan").forEachIndexed { index, element -> + var day = element.select("h3").text() + for (i in 0 .. (element.select("div.row h4").size - 1)) { + try { + var heading = element.select("div.row h4")[i].text() + var parts = ArrayList(element.select("div.row").select("div.menu-info")[i].html().substringBefore("", "|").split("|")) + var additives = element.select("div.row").select("div.menu-info")[i].select("span.show-with-allergenes").text() + + mealList.add(Meal(day, heading, parts, additives)) + } catch (e: Exception) { + // catch + } + } + } + } + + // TODO The following code can be removed + + fun printMensaMenu(mealList: ArrayList) { + for (meal in mealList) { + printMeal(meal) + } + println() + } + + fun printDayMenu(mealList: ArrayList, day: Int) { + var strDay: String = when(day) { + 0 -> "Mon" + 1 -> "Die" + 2 -> "Mit" + 3 -> "Don" + 4 -> "Fre" + 5 -> "Sam" + else -> "TODAY" //TODO + } + + for (meal in mealList) { + if (meal.day.contains(strDay)) printMeal(meal) + } + } + + fun printMeal(meal: Meal) { + println(meal.day) + println(meal.heading) + for (part in meal.parts) { + print(part) + } + println("\n" + meal.additives + "\n\n") + } + +} \ No newline at end of file diff --git a/src/main/kotlin/TimeTableParser.kt b/src/main/kotlin/TimeTableParser.kt new file mode 100644 index 0000000..90fbc76 --- /dev/null +++ b/src/main/kotlin/TimeTableParser.kt @@ -0,0 +1,80 @@ + +import org.jsoup.Jsoup + +class TimeTableParser { + + val days = arrayOf("Monday", "Tuesday" ,"Wednesday", "Thursday", "Friday", "Saturday") + var timeTableWeek = arrayOf>() + var courseTTLinkList = ArrayList() + + /** + * get the timetable from the given url + * the timetable is organised per row not per column; + * Mon 1, Tue 1, Wed 1, Thur 1, Fri 1, Sat 1, Mon 2 and so on + */ + fun getTimeTable(courseTTURL: String) { + + // TODO do we even need this? + // create the timetable array +// for (i in 0..5) { +// var timeTableDay = arrayOf() +// for (j in 0..6) { +// timeTableDay += Lesson("", "","","") +// } +// timeTableWeek += timeTableDay +// } + + + val scheduleHTML = Jsoup.connect(courseTTURL).get() + + val week = scheduleHTML.select("h1.timetable-caption").text() + println("$week successful!\n") + + scheduleHTML.select("table.timetable").select("td.lastcol").forEachIndexed { index, element -> + timeTableWeek[index % 6][index / 6] = Lesson(element.select("div.lesson-subject").text(), element.select("div.lesson-teacher").text(), element.select("div.lesson-room").text(), element.select("div.lesson-remark").text()) + } + } + + /** + * parse all courses from the courses site at https://www.hs-offenburg.de/studium/vorlesungsplaene/ + */ + fun getCourseTTLinks() { + val courseHTML = Jsoup.connect("https://www.hs-offenburg.de/studium/vorlesungsplaene/").get() + + courseHTML.select("ul.index-group").select("li.Class").select("a[href]").forEachIndexed { _, element -> + courseTTLinkList.add(CourseTTLink(element.attr("href"),element.text())) + } + } + + fun printTimeTableWeek (timeTableWeek: Array>) { + + for (j in 0..5) print(days[j].padEnd(25 ,' ') + " | ") + println() + for (j in 0..5) print("-".padEnd(26 + (j.toFloat().div(j).toInt()), '-') + "+") + println() + + for (i in 0..6) { + for (j in 0..5) print(timeTableWeek[j][i].lessonSubject.padEnd(25 ,' ').substring(0,25) + " | ") + println() + for (j in 0..5) print(timeTableWeek[j][i].lessonTeacher.padEnd(25 ,' ').substring(0,25) + " | ") + println() + for (j in 0..5) print(timeTableWeek[j][i].lessonRoom.padEnd(25 ,' ').substring(0,25) + " | ") + println() + for (j in 0..5) print("-".padEnd(26 + (j.toFloat().div(j).toInt()), '-') + "+") + println() + } + println() + } + + fun printTimeTableDay(timeTableDay: Array, day: Int) { + println(days[day]) + for (i in 0..6) { + println("-".padEnd(22, '-')) + println(timeTableDay[i].lessonSubject) + println(timeTableDay[i].lessonTeacher) + println(timeTableDay[i].lessonRoom) + } + println("-".padEnd(22, '-')) + println() + } +} \ No newline at end of file