サイボウズオフィス7のSyncCalendarとApiCalendar
職場のサイボウズオフィスがとうとうバージョン7にアップデートされた結果、自作のcybozu2icalが使えなくなってしまった。
どうして使えなくなるのかと言うと、サイボウズオフィス6にはSyncCalendarとApiCalendarという二つのAPIが用意されているのに対して、7にはApiCalendarの方しかないが、cybozu2icalは効率上の理由からSyncCalendarを使って実装してあるからだ。
ということで、cybozu2icalのApiCalendar対応に向けてちょっと2つのAPIを調べてみた。
まず、SyncCalendarの使用例はこんな感じ。
#!/usr/bin/perl
use strict;
use warnings;
use constant {
URL => 'https://your.domain.name/cgi-bin/ag.cgi',
USER => 'username',
PASSWD => 'password',
};
my $auth_param = {
_System => 'login',
_Login => 1,
_Account => USER,
Password => PASSWD,
};
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $res = $ua->post( URL . '?page=SyncCalendar', $auth_param );
print $res->content;
(この例では与えていないが)sm, emというパラメータを与えることで最長一年前から一年後までのスケジュールを取得できるようだ。職場の環境がアップデートしてしまったので確認できないのだけど。
一方、ApiCalendarの方はこんな感じ。
#!/usr/bin/perl
use strict;
use warnings;
use constant {
URL => 'https://your.domain.name/cgi-bin/ag.cgi',
USER => 'username',
PASSWD => 'password',
};
my $auth_param = {
_System => 'login',
_Login => 1,
_Account => USER,
Password => PASSWD,
};
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $res = $ua->post(
URL . '?page=ApiCalendar',
{
%$auth_param,
SetDate => 'da.2008.8.1',
EndDate => 'da.2008.9.1',
}
);
print $res->content;
for ( split( /\r?\n/, $res->content ) ) {
next unless $_ =~ /^ts\.\d+,(\d+),(da\..+)$/;
my $res = $ua->post(
URL . '?page=ApiCalendar',
{
%$auth_param,
EID => $1,
Date => $2,
}
);
print $res->content;
}
要は、ApiCalendarでは(SyncCalendarとは異なり)2フェーズでカレンダー情報を取得することになる。最初のリクエストで取得したい範囲の日付を指定してEIDとDateのペアのリストを得た後、個々のEID・Dateペアに関して再度リクエストすることで詳細なカレンダー情報を得る。
ApiCalendarには問題が2つあって、1つはアホみたいに時間がかかること。(件数+1)回呼び出さなきゃならんからね。もう1つは分かりにくい問題なのだが、実はApiCalendarではバナー予定が取得できないこと。こっちの問題は洒落にならんね。
そういうわけで、cybozu2icalをサイボウズオフィス7用にポートするならこの2つの問題には目をつぶってもらうしかない。さてどうしよう。
Comments and Trackbacks