2 # Convert iCalendar data to plaintext (very basic, don't rely on it :)
3 # Requirements: python-vobject (http://vobject.skyhouseconsulting.com/)
4 # This file is part of urlwatch
6 # Copyright (c) 2008-2010 Thomas Perl <thp@thpinfo.com>
9 # Redistribution and use in source and binary forms, with or without
10 # modification, are permitted provided that the following conditions
12 # 1. Redistributions of source code must retain the above copyright
13 # notice, this list of conditions and the following disclaimer.
14 # 2. Redistributions in binary form must reproduce the above copyright
15 # notice, this list of conditions and the following disclaimer in the
16 # documentation and/or other materials provided with the distribution.
17 # 3. The name of the author may not be used to endorse or promote products
18 # derived from this software without specific prior written permission.
20 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21 # IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22 # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23 # IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24 # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 # NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 def ical2text(ical_string
):
35 if isinstance(ical_string
, unicode):
36 parsedCal
= vobject
.readOne(ical_string
)
39 parsedCal
= vobject
.readOne(ical_string
)
41 parsedCal
= vobject
.readOne(ical_string
.decode('utf-8', 'ignore'))
43 for event
in parsedCal
.getChildren():
44 if event
.name
== 'VEVENT':
45 if hasattr(event
, 'dtstart'):
46 start
= event
.dtstart
.value
.strftime('%F %H:%M')
48 start
= 'unknown start date'
50 if hasattr(event
, 'dtend'):
51 end
= event
.dtend
.value
.strftime('%F %H:%M')
58 date_str
= '%s -- %s' % (start
, end
)
60 result
.append('%s: %s' % (date_str
, event
.summary
.value
))
62 return '\n'.join(result
)
65 if __name__
== '__main__':
68 if len(sys
.argv
) == 2:
69 print ical2text(open(sys
.argv
[1]).read())
71 print 'Usage: %s icalendarfile.ics' % (sys
.argv
[0])