Skriptiä varten tein kaksi samana pysyvää aputiedostoa alku ja vtimezone, jotka yhdistetään muuttuvaan tietoon jokaisella ajokerralla.
alku:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//ts.fi/iCal/EN
vtimezone:
BEGIN:VTIMEZONE
TZID:Europe/Helsinki
BEGIN:STANDARD
DTSTART:19811001T040000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
TZNAME:Europe/Helsinki
TZOFFSETFROM:+0300
TZOFFSETTO:+0200
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:19810301T030000
RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=3
TZNAME:Europe/Helsinki
TZOFFSETFROM:+0200
TZOFFSETTO:+0300
END:DAYLIGHT
END:VTIMEZONE
Tämä shell-skripti on ajastettuna kerran vuorokaudessa.
#!/bin/bash
# Yahoo!Pipesin tuottaman iCal-muotoisen tiedoston URL
url='http://pipes.yahoo.com/pipes/pipe.run?_id=6602675e62d5d95c7333285517e6a471&_render=ical&urlinput1=http%3A%2F%2Fspreadsheets.google.com%2Fpub%3Fkey%3Dtd1iey6KTeeTgGlE6U3_PPg%26output%3Dcsv'
# Haetaan data, ja tallennetaan se tiedostoksi
curl $url -o tolisten.ics
# Otetaan alussa olevat metatiedot talteen
grep X-WR tolisten.ics >XWR
# Yhdistetään alku, metatiedot ja aikavyöhyketiedot
cat alku XWR vtimezone >beforeevents
# Otetaan tapahtumatiedot erilleen
sed -n '/BEGIN:VEVENT/,$p' tolisten.ics >events
# Tyhjät rivit pois, ja korvataan DTSTART- ja DTEND-rivit
perl -pe 's/^\n//;s/DTSTART:/DTSTART;TZID=Europe\/Helsinki:/g;s/DTEND:/DTEND;TZID=Europe\/Helsinki:/g' events >tzidevents
# Yhdistetään alkuosa tapahtumatietoihin
cat beforeevents tzidevents >all.ics
# Siirretään valmis tiedosto webbipalvelimelle
mv all.ics ~/public_html/yle.ics
# Lopuksi vielä tiedoston lukuoikeudet kuntoon
chmod go+rx ~/public_html/yle.ics
iCal-standardi edellyttäisi lisäksi jokaiselle tapahtumalle uniikin ID:n. Google-kalenteri ei sitä välttämättä tarvitse, mutta ehkä sen voisi vielä tuohon viritellä.
No comments:
Post a Comment