サイボウズOffice8とiPhoneカレンダーを同期
- 2009年11月18日
- Google, iPhone, ipod touch
- iPhone, ipod touch, カレンダー, サイボウズ, スケジュール
仕事のスケジュール管理はサイボウズOffice8というグループウェアを
使用して行っています。
iPod touchを持ち始めて、なんとかカレンダーアプリとサイボウズの
スケジュールを同期できないものかと色々調べてみたところ、まだ完全
とは言えないものの、それなりに使える環境になりました。
手順としては
- カレンダーアプリとGoogleカレンダーを同期
- サイボウズのスケジュールをiCal形式で吐き出しWeb上にアップ
- GoogleカレンダーにWeb上にアップしたicsファイルをURLで追加
という流れになります。
■□■ 追記 ■□■
GCALDaemonでローカルicsをGoogleカレンダーと同期 の方法で
自サーバーがなくてもローカル環境のみでうまく動作するようになりました。
(コメントまでお読みいただくことをオススメします!)
■□■□■□■□■□■
まずはiPhoneのカレンダーアプリとGoogleカレンダーを同期させます。
こちらはAppBankさんで詳しく説明されていますので、そちらを参照
してみ下さい。
続いてサイボウズのスケジュールをiCal形式で吐き出しWeb上にアップ
する作業です。
こちらは名古屋ではたらく社長blogだもんでさんで公開されている
ツールを利用させていただきます。
「ダウンロードはこちらからどうぞ。」のリンクからZipファイルをダウンロード。
解凍したらindex.phpを編集します。
まず、2行目のスケジュールタイトル、3行目のサイボウズのユーザーIDを記入。
[php]$sstitle = @$_REQUEST[‘【スケジュールタイトル】’]; //デフォルトは「data」
$uid = ‘【ユーザーID】’;[/php]
ユーザーIDは、サイボウズの自分のユーザー名部分をクリックして開く
「ユーザー情報の詳細」画面に書かれています。
次に11行目~13行目に必要な値を記入。
[php]define(‘CYBOZU_URL’, ‘http://【URL】/cgi-bin/cbag/ag.cgi’);
define("LOGIN_ID", ‘【ログインID】’);
define("LOGIN_PASS", ‘【ログインパス】’);[/php]
ログインIDは上のユーザーIDと同じものでいけると思います。
続いて26行目の下記部分を変更
_Account → _ID
以上を行い、ファイルを保存。
次にZipファイル内に入っている.htaccessを自分用にカスタマイズ。
Googleからのアクセス(google.com)を許可し、あとは拒否すると
いいかと。(Googleカレンダーのサーバー?IP?がわからなかった…)
ここまで出来たら自分の所有しているサーバーの任意の場所に
解凍して出来たフォルダ(cybozu)ごとアップ。
(Apache+PHPが動作するサーバーでなければなりません)
これで、設置したファイルのURL+タイトル(4文字以内).ics
または設置したファイルのURL+タイトル(4文字)+ スケジュールID.ics
でファイルが表示されます。
例: http://hogehoge.jp/cybozu/data.ics
スケジュールタイトルを変更した方は、dataの部分を変更して下さい。
あと、.htaccessで自アクセスの許可を出していないと、自分自身も
ファイルにアクセスできませんのでご注意を^^;
あとはGoogleカレンダーの「他のカレンダー」から「追加」→「URLで追加」
と進み、上記のicsファイルのURLを貼り付け、OKボタンをクリック。
あとはGoogleカレンダーの「マイカレンダー」から「新しいカレンダーの作成」
(詳しくはこちら → GCALDaemonでローカルicsをGoogleカレンダーと同期)
うまくいけば、サイボウズのスケジュール内容がGoogleカレンダーに
反映されるはずです。(場合により反映までに多少時間がかかるかも)
iPhoneのカレンダーは初期では1つのGoogleカレンダーしか読み込め
ないので、AppBankさんのところの記事を参考にiPhoneのSafariで
http://m.google.com/sync/ にアクセスし、カレンダーを追加して
下さい。
完了したら、iPhone、iPod touch でカレンダーアプリを開いて確認して
みて下さい。
きっとサイボウズのスケジュールが確認できることでしょう。
(出来なかったらゴメンなさいw)
今のところここまで出来たのですが、1つ気がかりが。
サイボウズより新しく追加したスケジュールが、Googleカレンダーに
反映されません。。。
反映までに時間がかかっているのか、はたまた他に原因があるのか。。。
もう少し様子を見てみようと思っていますが、最悪はicsファイルを落として
きてGoogleカレンダーでインポート、あるいは一度追加したカレンダーを
削除し、再度追加などで乗り切ろうかと思っています^^;
また何か変化がありましたら、追記していきたいと思います!
■□■ 追記 ■□■
上記の方法ではうまくGoogleカレンダーに反映されませんでしたが、
GCALDaemonでローカルicsをGoogleカレンダーと同期 の方法で
うまく動作するようになりました。
とても参考になりました。ありがとうございます。accountをidに直さなければならない点などは本当に助かりました。これからも良い情報をお願いします。
私のところではサイボーズオフィス6をまだ使っており、細部のスクリプトは殆ど書き直してical形式のファイルを作れるようにはなりました。
なのですが、そもそもの起動方法がよく分かりません。現在は、アパッチのローカルホストをlocalhostとし、https://localhost/index.phpとして起動できるようになりました。実行すると、処理後に、ダウンロードするか、実行するかと聞かれ、ダウンロードする方を選択すると、ファイアフォックスのデフォルトダウンロードフォルダにindex.phpというファイルが保存されます。その中身がical形式のデータとさせることができました。どうやれば、data.icsというファイルを自動的に生成させられるのでしょうか?
ちなみに、元のスクリプトはサイボーズの個人月間メニューからデータを作るので、来月の分は作れませんよね。皆さん、あれで大丈夫なのかな?私はせめて来月分のデータくらいまでは落とせるように書き直すつもりでいます
。ただ、あの発想自体はすばらしいですね。いろいろスクリプトも勉強させてもらいました。php初挑戦でした。
MARINAさん、コメントありがとうございます☆
>とても参考になりました。ありがとうございます。accountをidに直さなければならない点などは本当に助かりました。これからも良い情報をお願いします。
お役に立ったようで何よりです(*^-^)
>data.icsというファイルを自動的に生成させられるのでしょうか?
MARINAさんの場合で言うと、https://localhost/data.ics にアクセスすることで、.htaccessとindex.phpにより自動でical形式のファイルが生成されると思うのですが、それとはまた違うのでしょうか?
本来ならGoogleカレンダーにも上記の方法でdata.icsのURLを登録すれば自動で生成され読まれる、と思っていたのですが、どうもうまくいきません。
なので、今は仕方なく自分でdata.icsにアクセス、ファイル保存後GCALDaemon(http://gcaldaemon.sourceforge.net/)で同期させています。
そのうちもうちょっとスマートに同期出来るように頑張るつもりです^^;
>https://localhost/data.ics にアクセスすることで、.htaccessとindex.phpにより自動でical形式のファイルが生成される・・
なるほど、こうやるんですか。また、勉強になりました。
私は、あの後で、悩み悩み、echoで出力するのではなく、直にファイルに書き出すスクリプトとしました。また、ftpでアップロードするようにスクリプトを加えました。それで、サクラネットのあるところにアップロードはできたのですが、グーグルカレンダーが読んでくれないんです。多分、グーグルカレンダーの方での指定の仕方が悪いんだと思います。別の方がアップされていたical形式のデータもアップロードしたのですが、グーグルカレンダーに取り込まれません。
ちなみに、来月分とか、年月指定するやり方も簡単ですよ。最初に月間予定表を読み出すところで&Date=da.2010.1.1と加えれば2010年1月の月間予定表を作ります。
.htaccessの使い方はまだ知らないので・・・
グーグルカレンダーへの表示ができるようになりました。なのですが、漢字は全然駄目です。漢字のエンコードについて何か変更されましたでしょうか?
MARINAさん、コメントありがとうございます☆
>ftpでアップロードするようにスクリプトを加えました。
おお、素晴らしいですね!是非教えて下さいw
>ちなみに、来月分とか、年月指定するやり方も簡単ですよ。最初に月間予定表を読み出すところで&Date=da.2010.1.1と加えれば2010年1月の月間予定表を作ります。
なるほど。一度試してみますね^^
>漢字のエンコードについて何か変更されましたでしょうか?
いえ、特に変更していません。
index.php内の文字コード指定の部分が関係しているんでしょうかね?
$work = mb_convert_encoding($work, “UTF-8”, CHAR_CODE);
>グーグルカレンダーへの表示ができるようになりました。
これはつまり直でファイル書き出し→ftpにスクリプトでアップロード→Googleカレンダーがそれを認識、ということでしょうか?
それならぜひご教授願いたいです!
できているファイルをftpでアップロードするには、以下のスクリプトを、一番最後に加えれば大丈夫です。なお、$remote_file=”【FTPサーバー上のアップロードファイルパス】”;はちょっとくせ者なので、私は苦労しました。
//この後でftpでファイルアップロード予定
$ftp_server=”【サーバー名】”;
$ftp_user_name=”【アカウント名】”;
$ftp_user_pass=”【パスワード】”;
$local_file=”【ローカルのファイルパス】”;
$remote_file=”【FTPサーバー上のアップロードファイルパス】”;
//サーバーに接続する
$conn_id = ftp_connect($ftp_server);
// ユーザ名とパスワードでログインする
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// 接続できたか確認する
if ((!$conn_id) || (!$login_result)) {
echo “FTP接続に失敗しました。”;
exit;
} else {
echo “FTP接続に成功しました。”;
}
// ファイアウォールを超えるftpに必要なのかもしれないコマンド
$res = ftp_pasv($conn_id, true);
//ファイルをアップロードする(テキストファイル、HTMLファイルなど)
if (!ftp_put($conn_id, $remote_file, $local_file, FTP_ASCII)) {
//if (!ftp_put($conn_id, $remote_file, $local_file, FTP_ASCII)) {
echo “FTPアップロードに失敗しました。”;
exit;
} else {
echo “FTPアップロードに成功しました。”;
}
//接続を閉じる
ftp_close($conn_id);
ファイルを作り出す部分ですが、オリジナルのスクリプトの後の方に,echoで表示するための数行がありますが、以下のように書き換えます。表示する内容は一緒なので、すぐに見つけられると思います。ちなみに、ファイル名をdata.icsにしちゃってます。
$fp = fopen(“data.ics”, “w”);
//header(‘Content-Type: text/calendar; charset=utf-8’);
fwrite($fp, ‘BEGIN:VCALENDAR’. “\n”);
fwrite($fp, ‘PRODID:’ . SCHEDULE_TITLE. “\n”);
fwrite($fp, ‘VERSION:2.0’. “\n”);
fwrite($fp, ‘METHOD:PUBLISH’. “\n”);
fwrite($fp, ‘CALSCALE:GREGORIAN’. “\n”);
fwrite($fp, ‘X-WR-CALNAME:’ . SCHEDULE_TITLE . “\n”);
fwrite($fp, ‘X-WR-CALDESC:’ . SCHEDULE_TITLE . “\n”);
fwrite($fp, ‘X-WR-TIMEZONE:Asia/Tokyo’. “\n”);
if ( !empty($schedule_list) ) {
foreach ( $schedule_list as $key => $vale ) {
fwrite($fp, ‘BEGIN:VEVENT’. “\n”);
fwrite($fp, ‘UID:’ . SCHEDULE_TITLE . ‘-‘ . $vale[‘id’] . “\n”);
fwrite($fp, ‘DESCRIPTION:’ . $vale[‘description’]. “\n”);
fwrite($fp, ‘DTSTART:’ . $vale[‘dtstart’] . “\n”);
fwrite($fp, ‘DTEND:’. $vale[‘dtend’] . “\n”);
fwrite($fp, ‘SUMMARY:’. $vale[‘summary’]. “\n”);
fwrite($fp, ‘END:VEVENT’. “\n”);
}
}
fwrite($fp, ‘BEGIN:VTIMEZONE’. “\n”);
fwrite($fp, ‘TZID:Asia/Tokyo’. “\n”);
fwrite($fp, ‘BEGIN:STANDARD’. “\n”);
fwrite($fp, ‘DTSTART:19700101T000000’. “\n”);
fwrite($fp, ‘TZOFFSETFROM:+0900’. “\n”);
fwrite($fp, ‘TZOFFSETTO:+0900’. “\n”);
fwrite($fp, ‘END:STANDARD’. “\n”);
fwrite($fp, ‘END:VTIMEZONE’. “\n”);
fwrite($fp, ‘END:VCALENDAR’. “\n”);
fclose($fp);
問題の原因になっているのが、
header(‘Content-Type: text/calendar; charset=utf-8’);
この行です。echoで出力するなら、このようにheaderを書いておけば、ファイルにcharset=utf-8が指定されて、グーグルカレンダーは文字化けせずに表示してくれるのですが、fwriteで作ったファイルにはこれが組み込まれません。なので、文字化けします。
他の方で、
と記述し、このファイルをグーグルカレンダーの他のカレンダーのurlに指定する方法で解決できたというものがありました。私もやってみたのですが、私は成功していません。
他の方で、の後のphpのスクリプトが富んでしまいましたので、補足しておきます。
header(‘Content-Type: text/calendar; charset=utf-8’);
$sFile = $_GET[‘ical’];
readfile($sFile);
MARINAさん、コメントありがとうございます☆
かなり詳しくご説明頂きありがとうございます!
さっそく私も試してみたいと思います。
PHP初挑戦とは思えないスキルを持っておられて驚きです。
私からアドバイスできることはないかも知れませんが、
ひとまず試してみて、なにかわかればこちらにコメントさせて
いただきますね☆(*^-^)
その後の結果をご報告します。
結論から言うと、無事なんとかGoogleカレンダーとの同期ができるようになりました。
MARINAさんから教えていただいたicsファイル生成スクリプトを利用し、ファイルを生成。
またWebサーバー上ではなく、MARINAさん同様ローカルサーバーの環境を準備、ローカルでindex.phpを実行する方法に変更しました。
MARINAさんと違うのは次の処理の部分からです。
ftpは利用せず、別のコメントでも紹介しましたが、GCALDaemonを利用します。
GCALDaemonには、ローカルのicsファイルとGoogleカレンダーとを同期させる機能&それ専用のsync-now.batというbatファイルがあります。
このsync-now.batファイルをicsファイル生成後実行するように、同index.php内にスクリプトを追加しました。
sync-now.batの方もそのまま実行するとエラーになるので若干中をいじりましたが、そちらはファイルのパスの指定を変えただけの簡単な変更のみで済みました。
sync-now.batが実行されると、モニタ上にローディングバーも表示されるので、同期されたかどうかも視覚的に判断でき、いい感じです。
GCALDaemonについてもし何か知りたいことがありましたら、私のわかる範囲でお答えします☆
あ、あとGoogleカレンダーの方ですが、他のカレンダーではなくマイカレンダーのほうに追加する方法を取っています。
なにはともあれ、ここまで出来たのもMARINAさんのアドバイスがあってのこと。
心より感謝いたします(*^-^)
以上、取り急ぎご報告まで!
良かったですね。私はical.phpを使用するなど、いろいろ苦しんでおります。今日から出張続きですが、一段落したら、GCALDaemonでトライしたいと思います。
こんにちは。GCALDaemonダウンロードしてみました。ですが、どこから手を付けて良いのかさっぱりです。設定の仕方を、是非教えて下さい!
MARINAさん、コメントありがとうございます☆
GCALDaemonについてですが、長くなりそうだったので設定方法をざっくりとですが記事にしてアップしましたので、そちらを参考にしていただけると幸いです。
分かりにくかったらまたコメント下さい^^;
GCALDaemonの使い方を教えていただき、ありがとうございます。
私のその後ですが、基本的にGCALDaemonに移そうと思っています。
ところで、phpプログラムを定期的に実行させる簡単な方法を見つけました。
http://d.hatena.ne.jp/dadadadan/20080125/1201244819
私のところでうまく同期できなかった原因の一つに、グーグルカレンダーが
最新の情報をうまく読み込んでくれなかったということがあるようです。
ここら辺、キャッシュが原因で・・・というような説明しかできないのですが。
なので、いろいろ試したものは本来なら動いてくれるべきだったように思います。
不思議なことに、data.icsをアップするディレクトリを変えた上で、
グーグルカレンダーで追加すると、そちらを読んでくれることが分かりました
(あくまでも私の環境だけかもしれません)。
その結果、同期できるようになりました。お困りの方、一度、トライされると
よいかもしれません。
ちなみに、漢字コードの指定も、他の方がうまくいかなかった.htaccessでの
指定で文字化けせずに読み込まれました。
ただ、GCALDaemonでやれば、ネット上にicsファイルをさらす必要がないので、
移行しようかと思っています。
他のカレンダーを参照せず、マイカレンダーに追加することになると、同じ予定が
重複していってしまうことにはなりませんか?
MARINAさん、コメントありがとうございます☆
>ところで、phpプログラムを定期的に実行させる簡単な方法を見つけました。
またまた有益な情報ありがとうございます!
なるほど、拡張子変えてphp.exeを関連付けるとは、面白いですね☆
私の場合は頻繁にスケジュール変更が起きるわけではないので、ランチャーなどに関連付けたphpファイルを放り込んで実行するようにしようかと思います^^b
>ただ、GCALDaemonでやれば、ネット上にicsファイルをさらす必要がないので、
移行しようかと思っています。
これは凄く大きいですよね!.htaccessとか使用しなくて済みますし、漏れる事もないですしね♪
>他のカレンダーを参照せず、マイカレンダーに追加することになると、同じ予定が
重複していってしまうことにはなりませんか?
マイカレンダーも他のカレンダー同様、複数作成することが可能ですので、サイボウズ用にマイカレンダーを作成し、それと同期させています。
今のところ重複は起きてません(*^-^)
今思い出したのですが、ファイルのショートカットを利用して起動する方法もありますね。
作成したphpファイルのショートカットを作成し、右クリックでプロパティを選択。
リンク先のファイルのリンクの前に実行させたいプログラムのリンク(今回でいうとphp.exe)を追加+半角スペース。
例:C:\php\php.exe C:\sync\index.php
これをランチャーに登録しても使えます^^
ちなみに自分はphp-win.exeを指定しました。php.exeだと実行時コマンド画面が2個立ち上がるのですが、php-win.exeだと1つしか見えなかった(バックグランドで動いてくれている模様)ので♪
はじめまして。検索でこちらに辿り着きました。
http://age.c3i.ne.jp/index.html
このサイトの機能は結構使えると思い、コメントしてみました。
Windows版のサイボウズでは、まだ不具合が出ているようですが、Linux版なら問題がないと思われます。
(こちらは、Windows版ですので、検証できていませんが…)
Makotooさん、コメントありがとうございます☆
また、有益な情報ありがとうございます!
ご紹介頂いたサイトですが、実は私もサービスが開始したときから試験的に
使用させていただいております^^;
スケジュールが変更された際も、自分で更新作業などを行わなくてもいいですし、
レスポンスもいいのでなかなか便利ですよね!
ただ、IDなどの情報を外部に持たせるという点は、少し不安が残るところです。
サイボウズ内でどれほどの情報を共有しているのかにもよると思いますが、
使用する際はその辺のリスクもあるんだという認識を持った上で使わなければ
なりませんね。