Changeset 297 for cybozu2ical/trunk
- Timestamp:
- 04/16/06 01:17:57 (3 years ago)
- Location:
- cybozu2ical/trunk
- Files:
-
- 1 added
- 1 modified
-
config.yaml (added)
-
cybozu2ical.pl (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
cybozu2ical/trunk/cybozu2ical.pl
r296 r297 5 5 6 6 use strict; 7 use vars qw($URL $USER $PASS); 8 9 $URL = 'http://www.example.com/cbag/ag.cgi'; 10 $USER = 'user'; 11 $PASS = 'pass'; 12 7 use YAML; 13 8 use LWP::UserAgent; 14 9 use Encode; … … 16 11 use Data::ICal; 17 12 use Data::ICal::Entry::Event; 13 use Data::ICal::Entry::TimeZone; 14 use Data::ICal::Entry::TimeZone::Standard; 18 15 use Date::ICal; 16 17 our $VERSION = '0.01'; 18 19 my $cfg = YAML::LoadFile($ARGV[0] || 'config.yaml'); 19 20 20 21 my $ua = LWP::UserAgent->new(); 21 22 22 my $res = $ua->post($ URL. '?page=SyncCalendar', {23 my $res = $ua->post($cfg->{cybozu_url} . '?page=SyncCalendar', { 23 24 _System => 'login', 24 25 _Login => '1', 25 _Account => $ USER,26 Password => $ PASS,26 _Account => $cfg->{username}, 27 Password => $cfg->{password}, 27 28 'csv' => 1, 28 29 'notimecard' => 1, 29 30 }); 30 31 31 die "Cannot access Cyboze Office 6 ($URL)." unless $res->is_success; 32 die "Cannot access Cybozu Office 6 (" . $cfg->{cybozu_url} . ")." 33 unless $res->is_success; 32 34 33 35 my $content = $res->content; … … 37 39 my $csv = Text::CSV_XS->new({ binary => 1 }); 38 40 39 my $calendar = Data::ICal->new(); 41 my $vcalendar = Data::ICal->new(); 42 $vcalendar->add_properties( 43 prodid => 'Cybozu2ICal', 44 version => $VERSION, 45 calscale => 'GREGORIAN', 46 method => 'PUBLISH' 47 ); 48 49 # current timestamp 50 my $dtstamp = Date::ICal->new(epoch => time)->ical; 40 51 41 52 while ($#lines != -1) { … … 44 55 or die 'failed to parse CSV input.'; 45 56 my @fields = $csv->fields; 46 next if $#fields != 13; # num. of fields 57 next if $#fields < 13; # num. of fields 58 59 my $epoch = $fields[1]; 60 $epoch =~ s/ts\.//; 61 my $created = Date::ICal->new(epoch => $epoch)->ical; 47 62 48 63 my @d = split("/", $fields[3]); 49 my %param = ( year => $d[0], month => $d[1], day => $d[2] ); 50 if ($fields[5] !~ /^:$/) { 51 my @t = split(":", $fields[5]); 52 $param{hour} = $t[0]; 53 $param{min} = $t[1]; 54 $param{sec} = $t[2] || 0; 55 } 56 my $dtstart = Date::ICal->new(%param); 64 my @t = split(":", $fields[5]); 65 my $date = Date::ICal->new( 66 year => $d[0], month => $d[1], day => $d[2], 67 hour => $t[0] || 0, min => $t[1] || 0, sec => $t[2] || 0 68 ); 69 my $dtstart = $date->ical(offset => '+0900'); 70 $dtstart =~ s/T000000// if $fields[5] =~ /^:$/; 57 71 58 72 my @d = split("/", $fields[4]); 59 my %param = ( year => $d[0], month => $d[1], day => $d[2] );60 if ($fields[6] !~ /^:$/) {61 my @t = split(":", $fields[6]);62 $param{hour} = $t[0];63 $param{min} = $t[1];64 $param{sec} = $t[2] || 0; 65 }66 my $dtend = Date::ICal->new(%param);73 my @t = split(":", $fields[6]); 74 my $date = Date::ICal->new( 75 year => $d[0], month => $d[1], day => $d[2], 76 hour => $t[0] || 0, min => $t[1] || 0, sec => $t[2] || 0 77 ); 78 $date += 'P1D' if $fields[6] =~ /^:$/; # full-day or multiple-days events 79 my $dtend = $date->ical(offset => '+0900'); 80 $dtend =~ s/T000000// if $fields[6] =~ /^:$/; 67 81 68 my $event = Data::ICal::Entry::Event->new(); 69 $event->add_properties( 70 summary => $fields[12] || '', 71 description => $fields[13] || $fields[12] || '', 72 dtstart => $dtstart->ical, 73 dtend => $dtend->ical, 74 ); 75 $calendar->add_entry($event); 82 my $vevent = Data::ICal::Entry::Event->new(); 83 $vevent->add_properties( 84 summary => $fields[12] || '', 85 description => $fields[13] || $fields[12] || '', 86 dtstart => $dtstart, 87 dtend => $dtend, 88 dtstamp => $dtstamp, 89 created => $created 90 ); 91 92 $vcalendar->add_entry($vevent); 76 93 } 77 94 78 print $calendar->as_string; 95 my $vtimezone = Data::ICal::Entry::TimeZone->new(); 96 $vtimezone->add_properties(tzid => 'Asia/Tokyo'); 97 98 my $standard = Data::ICal::Entry::TimeZone::Standard->new(); 99 $standard->add_properties( 100 tzoffsetfrom => '+0900', 101 tzoffsetto => '+0900', 102 tzname => 'JST', 103 dtstart => '19700101T000000' 104 ); 105 106 $vtimezone->add_entry($standard); 107 $vcalendar->add_entry($vtimezone); 108 109 print $vcalendar->as_string; 79 110 80 111 1;
![(please configure the [header_logo] section in trac.ini)](/public/chrome/common/trac_banner.png)