Mastodon

CampusOffice Kalender synchronisieren

Campus Office ist unser Studienplaner an der RWTH. Über ihn stellen wir uns unseren Stundenplan zusammen und melden uns zu Prüfungen an. Campus Office besitzt auch einen einfachen Kalender, der alle Termine des aktuellen Semesters individuell für jeden Studenten zusammenfasst. Glücklicherweise kann dieser Kalender auch im iCalendar-Format exportiert werden.

Leider ist jedoch keine automatische Synchronisation mit Google, Outlook & co möglich, da sich jeder Student zuvor mit seinen Daten angemeldet haben muss. Um dieses Problem zu umgehen habe ich ein kleines Skript geschrieben, welches als Proxy fungiert und diese Anmeldung übernimmt.

Folgende URL kann beispielsweise im Google-Kalender abonniert werden:

http://t0.0l.de/snippets/php/campus/cocal.php?u=[matrikelnr]&p=[passwort]

Alternativ kann man sich über das Frontend das Passwort in der URL auch noch etwas verscheiern lassen:
http://t0.0l.de/snippets/php/campus/cocal.php?hash=[base64_encode(matrikelnr + ‚:‘ + passwort)]  => http://t0.0l.de/snippets/php/campus/cocal.php?hash=MzA0OTU3OmFzZGZzZGY=

So habe ich nun alle meine Uni-Vorlesungen, Übungen und Klausuren in meinem Android-Smartphone ohne mich jemals wieder um die Synchronisierung kümmern zu müssen.

Um sich mit seinem Smartphone auch direkt zur nächsten Vorlesung routen lassen zu können, habe ich das Skript etwas erweitert. Es übersetzt alls Hörsaal Nummern in die dazugehörige Adresse.

Bitte seid euch bewusst, dass ihr eure Passwort an meinen Server sendet! Ich habe das Logging für diese Anfragen zwar deaktiviert, sodass ich eure Passworter nicht speichere. Technisch wäre es für einen Angreifer (oder mich) trotzdem möglich eure Passwörter auszuspähen.

Wer dieses Risiko lieber vermeiden möchte, sollte das Skript auf einem eigenen Webspace laufen lassen. Es ist hier in meinem git-Repository verfügbar. Über Anregungen und Verbesserungen freue ich mich wie immer 🙂

18 Gedanken zu „CampusOffice Kalender synchronisieren“

  1. Hey,

    habe dein tolles Script mal ausprobiert. Funktioniert auch fast perfekt.
    Es scheint nur, als gäbe es ein Problem mit dem Eintragen neuer gecrawlter Adressen in deine Datenbank, denn das erzeugte iCal Dokument enthielt mehrfach diese zusätzliche Zeile:

    Warning: sqlite_exec(): attempt to write a readonly database in /var/www/nulll/tools/snippets/php/cocal.php on line 63

    Anscheinend liegt ein Problem mit Schreibrechten vor.
    Gruß

    1. Hallo Niklas 🙂
      Ja da liegt in der Tat ein Problem mit den Zugriffsrechten vor. Das ist aber eigentlich kein Fehler des Skriptes. Du musst einfach die entsprechenden Rechte auf deinem Webspace setzen. Wie das genau geht hängt von deinem Provider/Server ab. Die Datei ‚cocal.db‘ sollte auf jeden Fall beschreibbar sein.

      1. Danke für die Antwort. Nur kurz als Anmerkung: Ich hatte es gar nicht auf meinem eigenen Webspace ausprobiert, sondern mit dem von dir angegebenen Link. Wie auch immer, vielen Dank für das Teilen des Scripts.

    1. 😀 Das ist ja lustig. Da haben wir uns wohl doppelte Arbeit gemacht. An nem CalDav Adapter wäre ich auch interessiert. Gerade das Löschen/Austragen der Events wäre echt ne schicke Funktion.

      Hast du interesse unsre Projekte zu mergen und CalDav ggf. zusammen zu ergänzen?

      gruß

      Steffen

  2. Hey, wenn ich das Skript auf meinem Webspace laufen lasse treten folgende Fehler auf:

    Wenn ich Benutzername und Passwort in die dafür vorgesehenen Felder eintrage und auf Get Calender klicke passiert gar nichts.

    Wenn ich die URL mit Argumenten aufrufe, die meinem Login entsprechen, erhalte ich außerdem die Login Seite des Campus Office. Einiger Bilder werden nicht geladen, unterhalb der Seite kommt zweimal die Fehlermeldung das das Objekt verschoben wurde zu der Login Timeout Seite (lhttps://www.campus.rwth-aachen.de/office/default.asp?timeout=true)
    Unterhalb davon steht außerdem das die Logindaten falsch seien, was natürlich nicht stimmt, das hab ich zuerst getestet.

    Die DB und das Skript sind zu Testzwecken beide rwxrwxrwx.

    Irgendwelche Ideen woran es liegen könnte?

    Nochwas: Auf deiner Seite ist das Bild und die Schriften zentriert, bei mir allerdings nicht. Sind die Dateien in Github vielleicht einfach veraltet?

    1. Hat sich erledigt. Git Shell für Windows ist so broken, es hat statt snippets nur den campus ordner gepullt, die java skripte und so haben dann natürlich gefehlt.

      1. Naja, vielleicht auch doch nicht. Jetzt sieht die Seite zwar so hübsch aus wie bei dir, aber funktionieren tuts leider gar nicht.

        Bei Klick (oder Abonnement) des Links kommt die Loginseite vom Campusoffice wie bereits in meiner ersten Antwort beschrieben.

        Irgendwelche Ideen?

        1. Leider kann ichdir ohne weitere Infos hier nicht weiterhelfen.
          Der Code auf meinem Server läuft eigentlich ohne Probleme.
          Ich tippe mal auf fehlende Module in deinem LAMP Setup.
          Wo läuft das Script denn? Lokal, managed Webspace, dedicated? Windows oder Linux?
          Ein Blick in die Logfiles hilft auch..

          viele Grüße
          Steffen

  3. Danke für das tolle Script!
    Nur leider werden nicht alle Veranstaltungen aus CampusOffice übernommen, z.B. Kleingruppenübungen, Sprachkurse und Fragestunden nicht.

    Kannst du vielleicht auch einbauen, dass die Art der Veranstaltung im Kalendereintrag vermerkt wird? (V) für Vorlesungen, (Ü) für Übungen usw.

    1. Hallo Christopher,
      also mein Skript verarbeitet nur die Veranstaltungen, die auch in deinem Campus Office Kalender eingetragen sind. Diese werden dann noch mit weiteren Infos aus der Campus Hörsaaldatenbank angereichert.
      Es werden keine Veranstaltungen gefiltert oder ähnliches.

      Den Typ einer Veranstaltung steht in einem „CATEGORIES“ Feld des iCal-Files. Diese Feld übernehme ich einfach unverändert. Es kann sein, dass dein Kalendertool (z.B. Google) dieses Feld einfach nicht interpretiert.
      Ich überlege, gerade ob ich das einfach noch zusätzlich auch in das „DESCRIPTION“ Feld hinzufüge. Würde dir das helfen?

      viele Grüße
      Steffen

  4. Hallo Steffen,
    Das Script hat beim ersten übertragen gut funktioniert;ich habe allerdings noch eine Frage :
    Muss ich jedes mal neuen Kalender erstellen, wenn ich im Campus Änderungen vornehme? Das letzte mal wurde der Kalender nicht synchronisiert.
    Mit freundlichen Grüßen
    Roman

    1. Nein das ist nicht nötig.
      Es kann aber ein paar Tage dauern, bis Google den Kalender synchronisiert.
      Viele Mail/Kalender-Apps/Programme unterstützen es auch CalDav-Kalender direkt einzubinden.
      Damit geht es dann schneller.

      viele Grüße

      Steffen

  5. Hallo Steffen,

    Mir ist aufgefallen das bei der synchronisierung selbst erstellte Termine aus dem Campus zwar übernommen, aber nicht verarbeitet werden. Soll heißen google calender schreibt nur ein in den jeweiligen Termin, wahrscheinlich da die informationen nicht wie die der Veranstaltungen eingetragen werden.
    Und: Welchen Aktualisierungsintervall hat der dann abonnierte Kalender dann eigentlich?

    Vielen Dank im Voraus

    1. Hi Thilo,

      Das Aktualisierungsinterval ist von Google abhängig.
      Nach meinen Erfahrungen kann es mal ein paar Tage dauern.
      Mittlerweile nutze ich ein CalDav Plugin für Android.
      Damit wird es direkt übernommen.

      Selbst erstelle Veranstaltungen habe ich noch nie getestet.
      Aber das Skript macht in dieser Hinsicht keine Unterscheidung.
      Es erwartet aber ein bestimmtes Format der Ortsangabe, damit diese korrekt übersetzt werden kann.

      viele Grüße

      Steffen

      1. Hi,

        Vielen Dank für das Skript – genau danach habe ich gesucht. Was muss ich tun um via CalDAV auf den Kalender zugreifen zu können? Mir wäre eine direkte Synchronisation nämlich lieber.

        LG

Schreibe einen Kommentar zu Thilo Sauber Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.