Forum: PC-Programmierung Schulferien ical parser


von Bashnewbe (Gast)


Lesenswert?

Hallo zusammen,
ich brauche hilfe bei einem bash Linux Skript oder node.js


Unter https://www.schulferien.eu/downloads/ferien-im-ical-format/
Findet man für die Ferien ical Dateien. Ich versichere seit Tagen ein 
Linux bash Script hinzubekommen welches das aktuelle Datum überprüft ob 
es in dem Zeitraum ist in dem die Ferien angeben sind.

Der Zeitraum sieht so aus:
1
BEGIN:VEVENT
2
SUMMARY:OSTERFERIEN
3
DTSTART;VALUE=DATE:20180326
4
DTEND;VALUE=DATE20180407
5
END:VEVENT
Wobei es mehrere VEVENT Blöcke gibt, d.h. es müssten alle VEVENT Blöcke 
durchsucht werden ob das aktuelle Datum in dem Zeitraum ist und mir das 
SUMMARY als Text ausgeben.


Ziel war es das alles in node.js Code zu erstellen, kann mir jemand 
helfen?


Danke

von Raspberry (Gast)


Lesenswert?

Es gibt da auch Web APIS für. Nimm dir dein Datum und durchlaufe das 
iCal. Dann siehst du dir an, ob dein Datum grosser als dtstart und 
kleiner als dtend ist

von Bashnewbe (Gast)


Lesenswert?

Wie kann ich die einzelnen VEVENTs als Array ausgegeben? Kannst du mir 
helfen?

von imonbln (Gast)


Lesenswert?

Ich spreche kein node.js aber ich kann mir nicht vorstellen das du der 
Erste bist der das Problem hat. Tante google spuckt zum beispiel diese 
Lib aus https://github.com/tritech/node-icalendar um denn Calender zu 
parsen. Der rest sollte einfach sein.  Über die Events Iterieren und 
gucken ob das Aktuelle Datum innerhalb des aktuellen Event liegt.

Ansonsten quick & Dirty iCal zeilenweise lesen. und selber Parsten des 
Format ist ja recht einfach. Zum Beipspiel kannst du gucken ob in der 
Zeile SUMMARY, DTSTART oder DTEND vorkommt und wenn du die Drei zusammen 
hast einen geeigneten Datensatz anlegen.

Bashnewbe schrieb:
> SUMMARY:OSTERFERIEN
> DTSTART;VALUE=DATE:20180326
> DTEND;VALUE=DATE20180407

Bis du Hier sicher das für DTSTART & END das DATE einmal mit ':' und 
einmal Ohne gespeichert wird? Wenn es immer mit Doppelpunkt ist einfach 
den String am Doppelpunkt trennen und den zweiten teil in ein Datum 
wandeln, Dafür sollte es fertige Funktionen geben. Wenn der Doppelpunkt 
dir zu Plump ist geht auch eine regexp um das Datum aus den String zu 
extrahieren.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Bashnewbe schrieb:
> Hallo zusammen,
> ich brauche hilfe bei einem bash Linux Skript oder node.js

Man kann natürlich einen Haufen Hipster BS wie node.js auffahren oder 
man kann es mit typischen Linux-Bordmitteln mal eben in rund 30 Zeilen 
runterscripten. Ohne es jetzt komplett getestet zu haben:
1
gawk -F: -vtarget=<Datum zum Testen, Format YYYYMMDD> '
2
BEGIN { n = 0 }
3
4
$1 == "SUMMARY" {
5
    $1 = ""
6
    summary = substr($0, 2)
7
    next
8
}
9
10
$1 == "DTSTART;VALUE=DATE" {
11
    dtstart = $2
12
    next
13
}
14
15
$1 == "DTEND;VALUE=DATE" {
16
    dtend = $2
17
    next
18
}
19
20
/END:VEVENT/ {
21
   summaries[n] = summary
22
   dtstarts[n] = dtstart
23
   dtends[n] = dtend
24
   n++
25
   next
26
}
27
28
END {
29
    for(i = 0; i < n; i++) {
30
        dtstart = dtstarts[i]
31
        dtend = dtends[i]
32
        if((target >= dtstart) && (target <= dtend)) {
33
             marker = ">>>"
34
        } else {
35
             marker = "   "
36
        }
37
        print marker dtstart dtend "-" summaries[i]
38
    }
39
}
40
41
' schulferien.ica

: Bearbeitet durch User
von arduinoneuling (Gast)


Lesenswert?

ist das auch möglich in node.js jdm. mir den code basteln kann?

Wäre super nett

von imonbln (Gast)


Lesenswert?

arduinoneuling schrieb:
> ist das auch möglich in node.js jdm. mir den code basteln kann?

Ja es ist auch möglich in node.js, Ich habe da schon eine lib raus 
gesucht.
Außerdem hast du hier ein Gerade zu "strait forward" example in AWK, das 
solltest DU, auch so in node.js machen können.

Und Nein, nach meiner Erfahrung ist das Forum eher nicht bereit, 
Coding-Monkey zu spielen. Auch wenn das Problem recht trival ist. Aber 
Hey wenn du es selbst versuchst könntest du was lernen.
Solltest Du dabei auf Probleme  stoßen die sich nicht mit 5 Minuten 
googlen erschlagen lassen, sind hier im Forum meistens freundliche 
Leute, die dir helfen (auch wenn ich vermute das die meisten hier nicht 
unbedingt node.js im Fokus haben)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.