I've just finished an iCalendar vCard parser for PHP. It's done almost completely with a 'natural' simplexml-like interface, so it should (hopefully) be just as easy to parse, and also modify iCalendar / vCard objects (ics/vcf files).
To install using pear, run the following:
- pear channel-discover pear.sabredav.org
- pear install sabredav/Sabre_VObject-alpha
Or download from pear.sabredav.org.
For testing, I used this iCalendar file: icalendartest.ics.
To load in an object, you use the Reader class:
- // Link to the correct path if you manually dowloaded the package
- include 'Sabre/VObject/includes.php';
-
- // Reading an object
- $calendar = Sabre_VObject_Reader::read(file_get_contents('icalendartest.ics'));
iCalendar objects consist of components (VEVENT, VTODO, VTIMEZONE, etc), properties (SUMMARY, DESCRIPTION, DTSTART, etc) and parameters, which are to properties what attributes are to elements in XML. To show a listing of all events in a calendar, this snippet would work:
- echo "There are ", count($calendar->vevent), " events in this calendar\n";
-
- // Looping through events
- foreach($calendar->vevent as $event) {
-
- echo (string)$event->dtstart, ": ", $event->summary, "\n";
-
- }
You can easily modify properties:
- $calendar->vevent[0]->description = "It's a birthday party";
Creating new objects uses the following syntax:
- $todo = new Sabre_VObject_Component('vtodo');
- $todo->summary = 'Take out the dog';
- $calendar->add($todo);
And to turn your newly modified calendar back into an ics file:
- file_put_contents('output.ics', $calendar->serialize());
Lastly, parameters are accessible through array-syntax:
- echo (string)$calendar->vevent[0]->dtstart['tzid'], "\n";
I had fun building this, I hope it's useful to you as well. It's 100% unittested, but bugs might still appear due to the complex nature of API. Use at your own risk :). This library will be part of the SabreDAV project, which is also where you can go for the source, report bugs or make suggestions.
