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 ;
  }
}
 

2017年2月

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28        

ウェブページ

アーカイブ

Webデータ

このブログ記事について

このページは、T-Saitohが2009年7月25日 20:00に書いたブログ記事です。

ひとつ前のブログ記事は「日食の観察その2」です。

次のブログ記事は「みつあゆもこれぐらいのクイズだしてよ...」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。