Fischer-Bayern.de
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Termine aus iCal auslesen - wer kann helfen?

 
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
paed-feld
•->
•->


Anmeldedatum: 22.01.2011
Beiträge: 6
Wohnort: Oldenburg (Oldb)

BeitragVerfasst am: 11.01.2012 - 09:55    Titel: Termine aus iCal auslesen - wer kann helfen? Antworten mit Zitat

Hallo,
ich benutze ein Script, das Ereignisse aus iCal ausliest und in eine Website schreibt. Bis auf eine (wichtige) Kleinigkeit funktioniert das gut.
Ganztägige Termine, die über mehrere Tage reichen, werden nicht als "von - bis" angezeigt obwohl dafür eine Codezeile vorhanden zu sein scheint (kenne mich mit der Script-Programmierung leider nicht aus).

Wer kann mir das Script so abwandeln, dass bei eintägigen Ereignissen die Anzeige "Datum - Ereignis" und bei mehrtägigen Ereignissen die Anzeige "Datum bis Datum - Ereignis" geschrieben wird?
Die Arbeit ist mir eine Belohnung wert.
Volker

Das Script:
set myCal to "GS-Seeburg" -- change it as appropriate
set myPageContents to "<h3>Zukünftige Termine - Schulj. 2011/2012</h3><p><br />"
set myPageContents to myPageContents & "<p>Diese Termine wurden zuletzt aktualisiert am:<br /> " & (current date) & "</p><br /><hr /><br />" & getdata(myCal)
return myPageContents
on getdata(calName)
tell application "iCal"
set sd to date "Montag, 1. Januar 2007 12:00:00"
set ed to date "Dienstag, 31. Dezember 2013 12:00:00"
try
set this_calendar to the first calendar whose title is the calName
set the returned_events to every event of this_calendar whose start date is greater than or equal to (current date) and start date is greater than or equal to sd and start date is less than or equal to ed
set these_events to {}
repeat with i from 1 to the count of the returned_events
set this_item to item i of the returned_events
if the class of this_item is event then
set the end of these_events to this_item
else if the class of this_item is list then
repeat with z from 1 to the count of this_item
set this_event to item z of this_item
if the class of this_event is event then
set the end of these_events to this_event
end if
end repeat
end if
end repeat
set total_events to the count of the returned_events
on error
return "<font color=\"#FF0000\">An error occurred while fetching events in iCal.</font>"
end try
try
set temp_events to these_events
repeat with i from 1 to total_events - 1
set z to i
set found_item to item i of these_events
repeat with j from i to total_events
set test1_item to item z of the these_events
set test2_item to item j of the these_events
set date1 to start date of test1_item
set date2 to start date of test2_item
if date2 is less than date1 then
set item j of temp_events to test1_item
set item z of temp_events to test2_item
end if
end repeat
end repeat
on error
return "<font color=\"#FF0000\">An error occurred while sorting data.</font>"
end try
try
set resultString to "<ul>"
repeat with this_event in temp_events -- loop in the list
--set the_name to summary of theEvent
--set the_date to short date string of (get start date of the theEvent)
set the event_properties to the properties of this_event
--set this_description to description of the event_properties
set this_summary to the summary of the event_properties
if this_summary is missing value then
set this_summary to "N/A"
end if
set this_location to the location of the event_properties
if this_location is missing value then
set this_location to "N/A"
end if
set start_date to short date string of (get start date of the event_properties)
set prevTIDs to AppleScript's text item delimiters
set AppleScript's text item delimiters to ""
set start_time to (characters 1 through -4 of (time string of (get start date of the event_properties))) as text
set end_date to short date string of (get end date of the event_properties)
set end_time to (characters 1 through -4 of (time string of (get end date of the event_properties))) as text
set AppleScript's text item delimiters to prevTIDs
set event_description to the description of the event_properties
if event_description is missing value then
set event_description to "N/A"
end if
set event_URL to the url of the event_properties
if event_URL is missing value then
set event_URL to "N/A"
end if
set the event_recurrence to the recurrence of the event_properties
if event_recurrence is missing value then
set event_recurrence to "N/A"
end if
set prevTIDs to AppleScript's text item delimiters
set AppleScript's text item delimiters to "="
set repeatList to every text item of event_recurrence
set repeater to 0
if the (count of every text item of event_recurrence) is greater than 1 then
set repeater to 1
set newItem to last text item of repeatList as text
set newYear to text 3 thru 4 of newItem as string
if (item 5 of newItem) is equal to "0" then
set newMonth to item 6 of newItem as string
else
set newMonth to text 5 thru 6 of newItem as string
end if
if (item 7 of newItem) is equal to "0" then
set newDay to item 8 of newItem as string
else
set newDay to text 7 thru 8 of newItem as string
end if
set end_date to newMonth & "/" & newDay & "/" & newYear
set AppleScript's text item delimiters to prevTIDs
end if
set notimes to the allday event of event_properties
set resultString to resultString & "<i>" & start_date

if repeater is equal to 1 then
set resultString to resultString & " bis " & end_date
end if
set resultString to resultString & "</i> - <b>"
if event_URL is equal to "N/A" then
set resultString to resultString & this_summary & "</b><ul>"
else
set resultString to resultString & "<a href=\"" & event_URL & "\">" & this_summary & "</a></b></u><ul>"
end if
if this_location is not equal to "N/A" then
set resultString to resultString & "<b>Ort:</b> " & this_location & "<br />"
end if
if not notimes then
set resultString to resultString & "<b>Zeit:</b> " & start_time & " bis " & end_time & " Uhr<br />"
end if
if event_description is not equal to "N/A" then
set resultString to resultString & "<b></b> " & event_description & ""
end if
set resultString to resultString & "</ul></li><br />"
end repeat
set resultString to resultString & "</ul>"
return resultString
on error
return "<font color=\"#FF0000\">An error occurred while ending the script.</font>"
end try
end tell
end getdata
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 449
Wohnort: Geldern

BeitragVerfasst am: 11.01.2012 - 20:42    Titel: Antworten mit Zitat

Hallo paed-feld,

da hast Du ja ein historisches Stück gefunden ;-)

Da war jemand dran, der nicht soviel Erfahrung zu haben scheint oder sich einen feuchten Kericht um Performance, Stil und Sauberkeit kümmert.

Hier mal die bereinigte Version:

Code:
set myCal to "GS-Seeburg" -- change it as appropriate
set myPageContents to "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"></head><body><h3>Zukünftige Termine – Schuljahr 2011/2012</h3><p><br /><p>Diese Termine wurden zuletzt aktualisiert am:<br /> " & (current date) & "</p><br /><hr /><br />" & my getdata(myCal) & "</body></html>"
do shell script "printf %s " & quoted form of myPageContents & " > ~/webkalender.html"

on getdata(calName)
   tell application "iCal"
      set sd to date "Montag, 1. Januar 2007 12:00:00"
      set ed to date "Dienstag, 31. Dezember 2013 12:00:00"
      try
         set this_calendar to first calendar whose title is calName
         set returned_events to every event of this_calendar whose start date is greater than or equal to (current date) and start date is greater than or equal to sd and start date is less than or equal to ed
         set these_events to {}
         repeat with i from 1 to count of returned_events
            set this_item to item i of returned_events
            if class of this_item is event then
               set end of these_events to this_item
            else if class of this_item is list then
               repeat with z from 1 to count of this_item
                  set this_event to item z of this_item
                  if class of this_event is event then set end of these_events to this_event
               end repeat
            end if
         end repeat
         set total_events to count of returned_events
      on error
         return "<font color=\"#FF0000\">An error occurred while fetching events in iCal.</font>"
      end try
      try
         set temp_events to these_events
         repeat with i from 1 to total_events - 1
            set z to i
            set found_item to item i of these_events
            repeat with j from i to total_events
               set {test1_item, test2_item} to {item z of these_events, item j of these_events}
               set {date1, date2} to {start date of test1_item, start date of test2_item}
               if date2 is less than date1 then set {item j of temp_events, item z of temp_events} to {test1_item, test2_item}
            end repeat
         end repeat
      on error
         return "<font color=\"#FF0000\">An error occurred while sorting data.</font>"
      end try
      try
         set resultString to "<ul>"
         repeat with this_event in temp_events -- loop in the list
            set event_properties to properties of this_event
            set this_summary to summary of event_properties
            if this_summary is missing value then set this_summary to "N/A"
            set this_location to location of event_properties
            if this_location is missing value then set this_location to "N/A"
            set start_date to short date string of (get start date of event_properties)
            set my text item delimiters to ""
            set start_time to (text 1 through -4 of (time string of (get start date of event_properties)))
            set end_date to short date string of (get end date of event_properties)
            set end_time to (text 1 through -4 of (time string of (get end date of event_properties)))
            set event_description to description of event_properties
            if event_description is missing value then set event_description to "N/A"
            set event_URL to url of event_properties
            if event_URL is missing value then set event_URL to "N/A"
            set notimes to allday event of event_properties
            set resultString to resultString & "<i>" & start_date
            if start_date is not end_date then set resultString to resultString & " bis " & end_date
            set resultString to resultString & "</i> – <b>"
            if event_URL is equal to "N/A" then
               set resultString to resultString & this_summary & "</b><ul>"
            else
               set resultString to resultString & "<a href=\"" & event_URL & "\">" & this_summary & "</a></b></u><ul>"
            end if
            if this_location is not equal to "N/A" then set resultString to resultString & "<b>Ort:</b> " & this_location & "<br />"
            if not notimes then set resultString to resultString & "<b>Zeit:</b> " & start_time & " bis " & end_time & " Uhr<br />"
            if event_description is not equal to "N/A" then set resultString to resultString & "<b></b> " & event_description & ""
            set resultString to resultString & "</ul></li><br />"
         end repeat
         set resultString to resultString & "</ul>"
         return resultString
      on error
         return "<font color=\"#FF0000\">An error occurred while ending the script.</font>"
      end try
   end tell
end getdata


Zu Debugging-Zwecken lasse ich direkt mal eine fertige Webseite generieren, die liegt in dem Fall in Deinem Benutzerordner (webkalender.html)

Wenn Du es vergleichst, siehst Du, daß man viele Codezeilen sparen kann. Und das recurrence ist für Wiederholungen – nicht ideal, um Mehrtagesereignisse festzustellen.
Ich denke, so arbeitet es, wie Du es brauchst.

Anmerkungen: Ich würde nicht mehr mit short date string arbeiten, sondern das Datum selbst formatieren – man kann sich da nicht mehr verlassen und ich persönlich finde führende Nullen häßlich, würde also "6.1.2012" und "14.7.2012" haben wollen.
Und die Tags <i> und <b> würde ich auf <em> und <strong> abändern.
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
paed-feld
•->
•->


Anmeldedatum: 22.01.2011
Beiträge: 6
Wohnort: Oldenburg (Oldb)

BeitragVerfasst am: 11.01.2012 - 20:59    Titel: Antworten mit Zitat

Hallo Martin,
zuerst einmal vielen Dank für deine Arbeit - nur, bei mir werden jetzt keine Daten mehr ausgelesen.

Historisches Stück: Ich war ganz froh, überhaupt etwas gefunden zu haben…

Gruß
Volker
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 449
Wohnort: Geldern

BeitragVerfasst am: 11.01.2012 - 21:03    Titel: Antworten mit Zitat

Hallo Volker,

ich bin gerade ein wenig verschreckt. Wie viele Foren und Threads gibt es von Deinem Script?

Auf Anhieb sehe ich gerade, daß Du nicht nur bereits im Januar das gleiche Script zur Überarbeitung hier: http://www.fischer-bayern.de/phpBB2/viewtopic.php?t=3191&sid=4903287db6817e622acb3d74ee6fe311 eingestellt hast, sondern bei MacUser bist Du auch als Erbhai angemeldet und hast auch im Jahre 2009 das mal überarbeiten lassen? http://www.macuser.de/forum/f30/probleme-script-seit-478693/

Mal ist es die GS-Seeburg, mal eine andere Gemeinschaftsschule?

Bist Du Dienstleister, der das an verschiedene Schulen verkauft? Dafür Geld bekommt?

Ich weiß nicht, was Du meinst, mit "Keine Daten mehr ausgelesen", bei mir funktioniert es, wenn ich den Kalender korrekt angebe, perfekt.

Du hast nicht wieder den gleichen Fehler gemacht wie 2009?

"GS-Seeburg" ist der korrekte Kalender, der übergeben wird??
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 449
Wohnort: Geldern

BeitragVerfasst am: 11.01.2012 - 21:11    Titel: Antworten mit Zitat

Mad

Hier schließt sich der Kreis:

http://www.gs-seeburg-seulingen.de/termine/termine.html

http://www.paed-design.de/

Manche Leute haben es aber echt einfach mit dem Geld verdienen. Warum komme ich da nicht drauf?

Wenn ich sehe, daß sich mit sowas Geld verdienen läßt, warum verschenke ich alles?

Wenn Du mal eine perfekte iCal-HTML-Web-Integration sehen möchtest, dann schau mal auf meine komplette Eigenentwicklung:

http://www.dpsggeldern.de/termine.php

Ich generiere die Daten aus dem kleinsten gemeinsamen Nenner, einer Textdatei (könnte natürlich auch ein Datenbankexport sein).

Daraus wird der Kalender generiert, die iCal-Datei und noch einiges mehr.

Und die Daten werden typographisch zusammengefaßt und der Benutzer hat in allen Medien ordentlich Zusatzinformationen (Dauer, Kalenderwoche usw.)
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
paed-feld
•->
•->


Anmeldedatum: 22.01.2011
Beiträge: 6
Wohnort: Oldenburg (Oldb)

BeitragVerfasst am: 11.01.2012 - 21:15    Titel: Antworten mit Zitat

Hallo Martin,
soo viele waren es ja nun nicht…
… und sich Hilfe holen, finde ich nicht verwerflich.
Ich habe Kalender von verschiedenen Schule, für die ich als ehemaliger Lehrer die Schulwebsite pflege.
2009 lief, wenn ich das richtig erinnere, das Script beim Wechsel von Leopard zu SnowLeopard nicht mehr. Der Schulname war nie das Problem.
Volker
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
paed-feld
•->
•->


Anmeldedatum: 22.01.2011
Beiträge: 6
Wohnort: Oldenburg (Oldb)

BeitragVerfasst am: 11.01.2012 - 21:26    Titel: Antworten mit Zitat

Wolle-77 hat Folgendes geschrieben:
Mad

Hier schließt sich der Kreis:

http://www.gs-seeburg-seulingen.de/termine/termine.html

http://www.paed-design.de/



Ich kann deine Reaktion nicht nachvollziehen. Ich habe nichts zu verbergen. Warum so verärgert? Ich hatte um Hilfe gebeten und ich habe mich über deine Antwort gefreut.

Mal sehen, ob ich das Script noch zum Laufen bringen kann.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Wolle-77
•--->
•--->


Anmeldedatum: 25.02.2003
Beiträge: 449
Wohnort: Geldern

BeitragVerfasst am: 11.01.2012 - 21:47    Titel: Antworten mit Zitat

Naja, Du sprichst mit "ehemaliger Lehrer" und "Schulwebseiten pflegen" so, als ob Du da hilfst und nun – vollkommen legitim und erfreulich (da Mac und AppleScript) Hilfe brauchst.

Aber Deine Spuren im Netz sprechen eine andere Sprache: Kommerzieller Dienstleister mit offenbar zig Kunden. Da scheint es sich dann gut von Leben zu lassen ... einmal das Konzept und an zig Leute gebracht.

Was läuft denn nicht? Wie sieht das AppleScript-Logergebnis aus?
_________________
Martin Wolter
--
Apple rocks the planet!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Dieses Forum ist gesperrt, du kannst keine Beiträge editieren, schreiben oder beantworten.   Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten.    Fischer-Bayern.de Foren-Übersicht -> AppleScript-Forum Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2002 phpBB Group
Deutsche Übersetzung von phpBB.de


AppleScript für absolute Starter