2011年1月12日水曜日

サイボウズの掲示板の更新をメールで通知する

我が社のサイボウズ・オフィス6は、社外からはアクセスできない。
スケジュールはともかく、掲示板は、全社の重要なものは、総務の人が全社員に同じ内容をメールしてくれるが、その他諸々は社内にいないと分らない。
そこで、掲示板の更新を検知して、掲示板の内容をメールで送信するようにしてみた。

まず、 サイボウズはユーザー認証もあり、掲示板などの更新はどのようにして取得するのか。そこで、以下のPerlモジュールを調べてみた。
ユーザー認証はオーケーだったが、肝心の「externalAPINotify」はアクセスできない(そんなページは無い、というエラーになる)。多分、同じバージョン6でも、色々違いがあるようだ。

そこで、リマインダーの挙動を調べてみたところ、「RMDigest」というページを参照して掲示板の更新の有無を取得している、ということが分った。

・ http://サイボウズのサーバ/cgi-bin/cbag/ag.cgi?page=RMDigest  (ユーザー認証略)
ほげほげ さんの最新情報(16 時 54 分更新)
掲示板,"page=BulletinView&bid=2243&gid=3628","テスト","テストです。",1
NOERROR
<font size=-1>サイボウズ(R) Office Version 6.6...(以下略)...
そこで、前述の「WWW::CybozuOffice6」を修正して、「RMDigest」を取得できるようにしてみた。
use WWW::CybozuOffice6;

$office6 = WWW::CybozuOffice6->new(url   => 'http://サイボウズのサーバ/cgi-bin/cbag/ag.cgi',
                   user  => 'ユーザ名',
                   pass  => 'パスワード');

print $office6->RMDigest,"\n";
これにより、
掲示板,"page=BulletinView&bid=2243&gid=3628","テスト","テストです。",1
の行の有無をチェックし、もしあれば、2番目のフィールドが掲示板本文の参照先なので(3番目はタイトル、4番目は本文の先頭部分)、これを取得すれば良い。

use WWW::CybozuOffice6;

$office6 = WWW::CybozuOffice6->new(url   => 'http://サイボウズのサーバ/cgi-bin/cbag/ag.cgi',
                   user  => 'ユーザ名',
                   pass  => 'パスワード');

$office6->_request("page=BulletinView&bid=2243&gid=3628");
print $office6->response->content;;
_request」メソッドも、複数のパラメータを受け付けるように修正した(元々は「page=...」のみ)。
当然、HTMLが取得できるので、「w3m」コマンドの「-dump」オプションでテキスト化し、それをメールで送信すれば良い。

これらの一連の処理をスクリプト化し、これを cron で定期的に実行する(現在は 20分間隔)。
今のところ、問題なく、メールで送信されている。

0 件のコメント: