[% event.title %]
Where: [% event.where %]
Start: [% event.start %]
End: [% event.end %]
Details: [% event.description %]
#!/usr/bin/perl use strict; use warnings; use DateTime; use Getopt::Std; use Net::Google::Calendar; use Template; use XML::Atom::Util 'iso2dt'; use HTML::TextToHTML; my %opt; get_args(\%opt); my (%data, %seen); my $cal = Net::Google::Calendar->new(url => $opt{url}); for my $item (get_items($opt{search})) { my @event = $cal->get_events( 'q' => $item, 'max-results' => $opt{max}, 'start-min' => $opt{start}, 'start-max' => $opt{end} ); for (@event) { my $id = $_->id; if ($seen{$id}) { $data{$item}{$id} = $seen{$id} if $opt{dups}; next; } $seen{$id} = $data{$item}{$id} = {}; my $entry = $seen{$id}; $entry->{title} = $_->title || ''; $entry->{description} = get_description($_) || ''; $entry->{status} = get_status($_) || ''; $entry->{where} = get_location($_) || ''; $entry->{author} = get_author($_) || {}; my $when = get_when($_) || {}; $entry->{start} = $when->{start} || ''; $entry->{end} = $when->{end} || ''; $entry->{gcal_url} = $_->_generic_url('alternate') || ''; } } my $tt = Template->new(PRE_CHOMP => 1, POST_CHOMP =>1,); my $template = <<"TT"; [%- BLOCK entry -%]
Where: [% event.where %]
Start: [% event.start %]
End: [% event.end %]
Details: [% event.description %]