Search in sources :

Example 16 with SubstitutionSchedule

use of me.vertretungsplan.objects.SubstitutionSchedule in project substitution-schedule-parser by vertretungsplanme.

the class Sample method main.

public static void main(String[] args) throws JSONException, IOException, CredentialInvalidException {
    SubstitutionScheduleData data = new SubstitutionScheduleData();
    data.setType(SubstitutionSchedule.Type.STUDENT);
    data.setApi("untis-monitor");
    data.setAuthenticationData(new NoAuthenticationData());
    data.setData(new JSONObject("{\n" + "         \"classes\": [\n" + "           \"05a\",\"05b\",\"05c\",\"05d\",\"05e\",\"05f\",\"05g\",\n" + "           \"06a\",\"06b\",\"06c\",\"06d\",\"06e\",\"06f\",\"06g\",\n" + "           \"07a\",\"07b\",\"07c\",\"07d\",\"07e\",\"07f\",\"07g\",\n" + "           \"08a\",\"08b\",\"08c\",\"08d\",\"08e\",\"08f\",\"08g\",\n" + "           \"09a\",\"09b\",\"09c\",\"09d\",\"09e\",\"09f\",\"09g\",\n" + "           \"Ea\",\"Eb\",\"Ec\",\"Ed\",\"Ee\",\"Ef\",\n" + "           \"Q1a\",\"Q1b\",\"Q1c\",\"Q1d\",\"Q1e\",\"Q1f\",\"Q1g\",\"Q1h\",\"Q1i\",\"Q1j\",\n" + "           \"Q2a\",\"Q2b\",\"Q2c\",\"Q2d\",\"Q2e\",\"Q2f\",\"Q2g\",\"Q2h\",\"Q2i\",\"Q2j\" \n" + "        ],\n" + "         \"class_in_extra_line\": true,\n" + "         \"website\": \"http://vertretung.lornsenschule.de/schueler/subst_001.htm\",\n" + "         \"stand_links\": true,\n" + "         \"urls\": [\n" + "           {\n" + "             \"following\": false,\n" + "             \"url\": \"http://vertretung.lornsenschule.de/schueler/f1/subst_001.htm\" \n" + "          },\n" + "           {\n" + "             \"following\": false,\n" + "             \"url\": \"http://vertretung.lornsenschule.de/schueler/f2/subst_001.htm\" \n" + "          } \n" + "        ],\n" + "         \"encoding\": \"ISO-8859-1\",\n" + "         \"columns\": [\n" + "           \"lesson\",\"type\",\"subject\",\"previousSubject\",\"room\",\"desc\" \n" + "        ] \n" + "      }"));
    data.getAdditionalInfos().add("winter-sh");
    SubstitutionSchedule schedule = ParserUtil.parseSubstitutionSchedule(data);
    System.out.println(schedule);
}
Also used : SubstitutionScheduleData(me.vertretungsplan.objects.SubstitutionScheduleData) JSONObject(org.json.JSONObject) NoAuthenticationData(me.vertretungsplan.objects.authentication.NoAuthenticationData) SubstitutionSchedule(me.vertretungsplan.objects.SubstitutionSchedule)

Example 17 with SubstitutionSchedule

use of me.vertretungsplan.objects.SubstitutionSchedule in project substitution-schedule-parser by vertretungsplanme.

the class CSVDemoTest method demoTest.

@Test
public void demoTest() throws IOException, JSONException {
    SubstitutionSchedule schedule = parser.parseCSV(csv);
    assertEquals(2, schedule.getDays().size());
    SubstitutionScheduleDay day = schedule.getDays().get(0);
    assertEquals(new LocalDate(2016, 9, 5), day.getDate());
    assertEquals(new LocalDateTime(2016, 9, 2, 8, 16), day.getLastChange());
    assertEquals(1, day.getSubstitutions().size());
    assertEquals(0, day.getMessages().size());
    Substitution subst = day.getSubstitutions().iterator().next();
    assertEquals(1, subst.getClasses().size());
    assertEquals("05A", subst.getClasses().iterator().next());
    assertEquals("6", subst.getLesson());
    assertEquals("!Ma", subst.getSubject());
    assertEquals("!DROE", subst.getTeacher());
    assertEquals("!B203", subst.getRoom());
    assertEquals("für Mu REN", subst.getDesc());
    assertEquals("Vertretung", subst.getType());
}
Also used : LocalDateTime(org.joda.time.LocalDateTime) Substitution(me.vertretungsplan.objects.Substitution) SubstitutionSchedule(me.vertretungsplan.objects.SubstitutionSchedule) SubstitutionScheduleDay(me.vertretungsplan.objects.SubstitutionScheduleDay) LocalDate(org.joda.time.LocalDate) Test(org.junit.Test)

Example 18 with SubstitutionSchedule

use of me.vertretungsplan.objects.SubstitutionSchedule in project substitution-schedule-parser by vertretungsplanme.

the class CSVParser method parseCSV.

@NotNull
SubstitutionSchedule parseCSV(String response) throws JSONException, IOException {
    SubstitutionSchedule schedule = SubstitutionSchedule.fromData(scheduleData);
    String[] lines = response.split("\n");
    String separator = data.getString(PARAM_SEPARATOR);
    for (int i = data.optInt(PARAM_SKIP_LINES, 0); i < lines.length; i++) {
        String[] columns = lines[i].split(separator);
        Substitution v = new Substitution();
        String dayName = null;
        String stand = "";
        int j = 0;
        for (String column : columns) {
            String type = data.getJSONArray(PARAM_COLUMNS).getString(j);
            switch(type) {
                case "lesson":
                    v.setLesson(column);
                    break;
                case "subject":
                    v.setSubject(column);
                    break;
                case "previousSubject":
                    v.setPreviousSubject(column);
                    break;
                case "type":
                    v.setType(column);
                    v.setColor(colorProvider.getColor(column));
                    break;
                case "type-entfall":
                    if (column.equals("x")) {
                        v.setType("Entfall");
                        v.setColor(colorProvider.getColor("Entfall"));
                    } else {
                        v.setType("Vertretung");
                        v.setColor(colorProvider.getColor("Vertretung"));
                    }
                    break;
                case "room":
                    v.setRoom(column);
                    break;
                case "teacher":
                    v.setTeacher(column);
                    break;
                case "previousTeacher":
                    v.setPreviousTeacher(column);
                    break;
                case "desc":
                    v.setDesc(column);
                    break;
                case "desc-type":
                    v.setDesc(column);
                    String recognizedType = recognizeType(column);
                    v.setType(recognizedType);
                    v.setColor(colorProvider.getColor(recognizedType));
                    break;
                case "previousRoom":
                    v.setPreviousRoom(column);
                    break;
                case "class":
                    v.getClasses().add(getClassName(column, data));
                    break;
                case "day":
                    dayName = column;
                    break;
                case "stand":
                    stand = column;
                    break;
                case "ignore":
                    break;
                default:
                    throw new IllegalArgumentException("Unknown column type: " + column);
            }
            j++;
        }
        if (v.getType() == null) {
            v.setType("Vertretung");
            v.setColor(colorProvider.getColor("Vertretung"));
        }
        if (dayName != null) {
            SubstitutionScheduleDay day = new SubstitutionScheduleDay();
            day.setDateString(dayName);
            day.setDate(ParserUtils.parseDate(dayName));
            day.setLastChangeString(stand);
            day.setLastChange(ParserUtils.parseDateTime(stand));
            day.addSubstitution(v);
            schedule.addDay(day);
        }
    }
    if (scheduleData.getData().has(PARAM_WEBSITE)) {
        schedule.setWebsite(scheduleData.getData().getString(PARAM_WEBSITE));
    }
    schedule.setClasses(getAllClasses());
    schedule.setTeachers(getAllTeachers());
    return schedule;
}
Also used : Substitution(me.vertretungsplan.objects.Substitution) SubstitutionSchedule(me.vertretungsplan.objects.SubstitutionSchedule) SubstitutionScheduleDay(me.vertretungsplan.objects.SubstitutionScheduleDay) NotNull(org.jetbrains.annotations.NotNull)

Example 19 with SubstitutionSchedule

use of me.vertretungsplan.objects.SubstitutionSchedule in project substitution-schedule-parser by vertretungsplanme.

the class DaVinciParser method getSubstitutionSchedule.

@Override
public SubstitutionSchedule getSubstitutionSchedule() throws IOException, JSONException, CredentialInvalidException {
    new LoginHandler(scheduleData, credential, cookieProvider).handleLogin(executor, cookieStore);
    SubstitutionSchedule schedule = SubstitutionSchedule.fromData(scheduleData);
    List<String> urls = new ArrayList<>();
    if (scheduleData.getData().has(PARAM_URLS)) {
        JSONArray urlsArray = scheduleData.getData().getJSONArray(PARAM_URLS);
        for (int i = 0; i < urlsArray.length(); i++) {
            urls.add(urlsArray.getString(i));
        }
    } else {
        urls.add(scheduleData.getData().getString(PARAM_URL));
    }
    for (String url : urls) {
        Document doc = Jsoup.parse(httpGet(url, ENCODING));
        List<String> dayUrls = getDayUrls(url, doc);
        if (scheduleData.getData().has(PARAM_EMBEDDED_CONTENT_SELECTOR)) {
            for (Element el : doc.select(scheduleData.getData().getString(PARAM_EMBEDDED_CONTENT_SELECTOR))) {
                parsePage(el, schedule, colorProvider);
            }
        } else {
            for (String dayUrl : dayUrls) {
                Document dayDoc;
                if (dayUrl.equals(url)) {
                    dayDoc = doc;
                } else {
                    dayDoc = Jsoup.parse(httpGet(dayUrl, ENCODING));
                }
                parsePage(dayDoc, schedule, colorProvider);
            }
        }
    }
    if (scheduleData.getData().has(PARAM_WEBSITE)) {
        schedule.setWebsite(scheduleData.getData().getString(PARAM_WEBSITE));
    } else {
        schedule.setWebsite(urls.get(0));
    }
    schedule.setClasses(getAllClasses());
    schedule.setTeachers(getAllTeachers());
    return schedule;
}
Also used : SubstitutionSchedule(me.vertretungsplan.objects.SubstitutionSchedule) Element(org.jsoup.nodes.Element) JSONArray(org.json.JSONArray) Document(org.jsoup.nodes.Document)

Example 20 with SubstitutionSchedule

use of me.vertretungsplan.objects.SubstitutionSchedule in project substitution-schedule-parser by vertretungsplanme.

the class ESchoolParser method parseESchoolSchedule.

@NotNull
SubstitutionSchedule parseESchoolSchedule(Document doc) throws IOException, JSONException {
    SubstitutionSchedule schedule = SubstitutionSchedule.fromData(scheduleData);
    String infoString = doc.select("#Content table").first().select("td").get(1).ownText();
    Pattern pattern = Pattern.compile("Letzte Aktualisierung:\u00a0(\\d{2}.\\d{2}.\\d{4} - \\d{2}:\\d{2})");
    Matcher matcher = pattern.matcher(infoString);
    if (matcher.find()) {
        LocalDateTime lastChange = DateTimeFormat.forPattern("dd.MM.yyyy - HH:mm").parseLocalDateTime(matcher.group(1));
        schedule.setLastChange(lastChange);
    }
    Elements titles = doc.select("center b");
    Elements tables = doc.select("table#DATA");
    if (!tables.get(0).text().contains("Keine Daten verfügbar")) {
        if (titles.size() != tables.size())
            throw new IOException("Anzahl Überschriften != Anzahl Tabellen");
        for (int i = 0; i < titles.size(); i++) {
            SubstitutionScheduleDay day = new SubstitutionScheduleDay();
            day.setDate(ParserUtils.parseDate(titles.get(i).text()));
            parseTable(tables.get(i), day);
            schedule.addDay(day);
        }
    }
    schedule.setClasses(getAllClasses());
    schedule.setTeachers(getAllTeachers());
    return schedule;
}
Also used : LocalDateTime(org.joda.time.LocalDateTime) Pattern(java.util.regex.Pattern) Matcher(java.util.regex.Matcher) SubstitutionSchedule(me.vertretungsplan.objects.SubstitutionSchedule) SubstitutionScheduleDay(me.vertretungsplan.objects.SubstitutionScheduleDay) IOException(java.io.IOException) Elements(org.jsoup.select.Elements) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

SubstitutionSchedule (me.vertretungsplan.objects.SubstitutionSchedule)31 Document (org.jsoup.nodes.Document)15 SubstitutionScheduleDay (me.vertretungsplan.objects.SubstitutionScheduleDay)14 LocalDate (org.joda.time.LocalDate)14 Test (org.junit.Test)13 ArrayList (java.util.ArrayList)9 LocalDateTime (org.joda.time.LocalDateTime)9 Substitution (me.vertretungsplan.objects.Substitution)8 IOException (java.io.IOException)6 JSONArray (org.json.JSONArray)6 JSONObject (org.json.JSONObject)6 Element (org.jsoup.nodes.Element)6 HttpResponseException (org.apache.http.client.HttpResponseException)4 NameValuePair (org.apache.http.NameValuePair)3 BasicNameValuePair (org.apache.http.message.BasicNameValuePair)3 NotNull (org.jetbrains.annotations.NotNull)3 Elements (org.jsoup.select.Elements)3 Matcher (java.util.regex.Matcher)2 Pattern (java.util.regex.Pattern)2 CredentialInvalidException (me.vertretungsplan.exception.CredentialInvalidException)2