Разбор календаря (ICS) с помощью AppleScript
Мне тяжело взломать это. Я прочитал файл ICS в AppleScript, и мне нужно проанализировать его. Это мой код
set calURL to "https://url.to.ics"
set calenderData to do shell script "curl " & calURL
Данные читаются нормально, но мне нужно их проанализировать. Я хочу, чтобы скрипт считывал данные между BEGIN:VEVENT и END: VEVENT для каждого события. Я не уверен, как это сделать, но с циклом foreach или что-то?
Вот образец календаря, содержащий мои экзамены.
НАЧАТЬ: VCALENDAR VERSION: 2,0 X-WR-CALNAME:Eksamener X-WR-CALDESC: X-APPLE-КАЛЕНДАРЬ-COLOR:#CC2B23FF НАЧАТЬ:VEVENT UID:C96EF18C-5D17-4170-8C67-832B7F90B464 РЕЗЮМЕ: ТК 1100 Эксамен ПОСЛЕДОВАТЕЛЬНОСТЬ: 0 МЕСТО НАХОЖДЕНИЯ: DTSTART;VALUE= ДАТА:20111213 DTEND;VALUE= ДАТА:20111214 END:VEVENT НАЧАТЬ:VEVENT UID:BDBE0B4B-FF3D-4245-B23F-F1BF25F65998 РЕЗЮМЕ: БД 1100 Эксамен ПОСЛЕДОВАТЕЛЬНОСТЬ: 0 МЕСТО НАХОЖДЕНИЯ: DTSTART;VALUE= ДАТА:20111006 DTEND;VALUE= ДАТА:20111007 END:VEVENT НАЧАТЬ:VEVENT UID:21261AF0-FDA7-432B-B513-CC3A9C04393D РЕЗЮМЕ:PG 1100 Эксамен ПОСЛЕДОВАТЕЛЬНОСТЬ: 0 МЕСТО НАХОЖДЕНИЯ: DTSTART;VALUE= ДАТА:20111216 DTEND;VALUE= ДАТА:20111217 END:VEVENT END:VCALENDAR
Это не относится к школе, я просто хочу проанализировать данные, чтобы просмотреть их на своем рабочем столе (GeekTool).
1 ответ
Вам необходимо использовать разделители текстовых элементов. Попробуйте и посмотрите, сможете ли вы понять, как это работает.
set theData to "BEGIN:VCALENDAR
VERSION:2.0
X-WR-CALNAME:Eksamener
X-WR-CALDESC:
X-APPLE-CALENDAR-COLOR:#CC2B23FF
BEGIN:VEVENT
UID:C96EF18C-5D17-4170-8C67-832B7F90B464
SUMMARY:TK 1100 Eksamen
SEQUENCE:0
LOCATION:
DTSTART;VALUE=DATE:20111213
DTEND;VALUE=DATE:20111214
END:VEVENT
BEGIN:VEVENT
UID:BDBE0B4B-FF3D-4245-B23F-F1BF25F65998
SUMMARY:DB 1100 Eksamen
SEQUENCE:0
LOCATION:
DTSTART;VALUE=DATE:20111006
DTEND;VALUE=DATE:20111007
END:VEVENT
BEGIN:VEVENT
UID:21261AF0-FDA7-432B-B513-CC3A9C04393D
SUMMARY:PG 1100 Eksamen
SEQUENCE:0
LOCATION:
DTSTART;VALUE=DATE:20111216
DTEND;VALUE=DATE:20111217
END:VEVENT
END:VCALENDAR"
set text item delimiters to "BEGIN:VEVENT"
set theEvents to text items of theData
set text item delimiters to "END:VEVENT"
set allEvents to {}
repeat with i from 2 to count of theEvents
set theEvent to item i of theEvents
set trimmedEvent to text item 1 of theEvent
set end of allEvents to text 2 thru -2 of trimmedEvent -- you can do something here instead of collecting them in the list
end repeat
set text item delimiters to ""
return allEvents