ホーム » コンピュータ » Network » iCalendarをGoogle Calendarに転送

システム

最近の投稿

アーカイブ

カテゴリー

iCalendarをGoogle Calendarに転送

Net::Google::Calendarモジュールが便利そうだったので、 iCalendar(.ics)のファイルを Google Calendar にアップロードするプログラムを、 Perl で書いてみた。 今までは、Java で書かれたGCalDaemonを使っていたけど、カスタマイズもしづらかった。

繰り返しイベントについては、未対応のまま。 本当は同期させたいけど、Google側のEventのIDはURL形式で、iCal と互換性がない。 だから、アップロードの度に、一旦全イベントをチマチマ消しているのが、美しくない。 かといって、iCal と Google Calendar の ID の対応表をいちいち更新するのも面倒だし。

get_eventsとdelete_entryの使い方

# Google Calendar の登録情報
$url = 'http://www.google.com/'
.'calendar/feeds/XXXX%40gmail.com/'
.'private-XXXXXXXXXXX/basic' ;
$user = 'XXXX@gmail.com';
$pass = 'PPPPPPPP';
$calname = Jcode->new( 'NNNN' )->utf8 ;
my $cal = Net::Google::Calendar->new( url => $url );
# $cal->{_ua}->env_proxy;               # (2)
$cal->login($user, $pass) or die $@;    # (3)
# 指定されたカレンダーを選ぶ
my $dest_cal ;
foreach my $c ( $cal->get_calendars ) {
$dest_cal = $c if ( $c->title eq '<カレンダーの名前>' ) ;
}
if ( $dest_cal ) {
# 登録されていたイベントを全部消す
$cal->set_calendar( $dest_cal ) ;
my $start_index = 1 ;
my $max_results = 20 ;
my @ev ;
while( 1 ) {
# 指定件数しかイベントを返さないので少しづつ消す
@ev = $cal->get_events(
start-index => $start_index ,
max-results => $max_results ) ;
last if ( @ev == 0 ) ;
foreach my $e ( @ev ) {
$cal->delete_entry( $e ) ;
}
$start_index += @ev ;
}
}

Google 検索

My Google   Yahoo

Microsoft

ファンサイト