AIPOスケジュールをGoogleカレンダーに同期する

AIPOのモバイル画面のスケジュールがものすごーく見づらいのでGoogleカレンダーにAIPOのスケジュールを書き出してGoogleカレンダーでスケジュールを確認できるようにします。

今回はjavaを使用してGoogleカレンダーAPIを操作します。
やり方は完全な同期というわけではなく、AIPO→Googleカレンダーへの反映です。
Googleカレンダーの予定を消して新たにAIPOスケジュールを書き出すというのを定期的に実行します。
なのでGoogleカレンダーの予定を変更してもAIPO側には同期されません。
あくまでAIPOのスケジュールをGoogleカレンダーに表示するだけです。

Googleカレンダー側の設定

GoogleカレンダーでAIPO用の新しいカレンダーを作成します。
作成しなくてもいいんですが、プライマリーを使用するとAIPO以外のスケジュールも消えてしまいます。

「友だちのカレンダーを追加」と書かれている右のプラスボタンをクリックして「新しいカレンダー」を選択。
新しいカレンダー
名前を「AIPO」として作成します。
カレンダーの作成
マイカレンダーのAIPOの右のメニューバーから「設定と共有」を選択。
カレンダーの設定
「カレンダーの統合」パネルの「カレンダー ID」をメモります。
カレンダーID

Google Calendar APIの設定

新しいプロジェクトの作成

デベロッパーコンソールで新しいプロジェクトを作成。
作成しなくてもすでにあるプロジェクトを使用しても構いません。

コンソール左上のセレクトボックスを押す。
デベロッパーコンソール
プロジェクトの選択画面が出るので「新しいプロジェクト」を選択。
新しいプロジェクト
適当にプロジェクト名を決めて「作成」。
新しいプロジェクト

Google Calendar APIの有効化

左上のナビゲーションメニューから「APIとサービス」→「ライブラリ」を選択。
API有効化
「calendar」と検索。
「Google Calendar API」を選択。
API有効化
「有効にする」をクリック。
API有効化

認証情報の設定

認証情報の「OAuth同意画面」で「ユーザーに表示するサービス名」を設定して「保存」。
ここのサービス名がユーザーにカレンダー操作の認証を得るとき表示されるので、わかりやすくしたほうがいいでしょう。
OAuth同意画面
「認証情報」→「認証情報を作成」→「OAtuhクライアントID」を選択。
認証情報を作成
「アプリケーションの種類」を「その他」にして名前を適当に付けます。
OAuthクライアントIDの作成
一番右のダウンロードボタンからJSONファイルをダウンロードします。
JSONダウンロード
保存したファイル名を「client_secret.json」に変更します。

java側のプログラム

ecliseの設定

クライアントプログラムはeclipseで作成します。
Gradleを使用しますのでeclipseでGradleが使えるようにプラグインをインストールします。
「ヘルプ」→「Eclipseマーケットプレイス」で「Gradle」と検索します。
Gradle IDE Pack
Gradle IDE Packをインストール。
これでGradleが使用できます。

Gradleプロジェクトの作成

新規プロジェクトで「Gradle(STS)プロジェクト」を作成。
Gradleプロジェクト
サンプル・プロジェクトはJava Quickstartでいいでしょう。

プロジェクト作成するとサンプルクラスが作成されているので削除します。

build.gradleを以下に書き換えます。

mainClassNameは実行するクラス名にしてください。

プロジェクトを右クリック→Gradle(STS)→「すべてリフレッシュ」します。

他の環境設定

さきほどダウンロードして名前変更したclient_secret.jsonを「src/main/resources」に保存します。

AIPOはPostgreSQLで動いていますのでPostgreSQLのJDBCドライバを用意します。
PostgreSQL JDBC Download
保存したjarファイルをプロジェクト直下にコピーしてビルドパスを通します。

同期用プログラムの開発

「CalendarQuickstart」という名前でクラスを作成します。
以下コード。

カレンダーIDとAIPOのユーザーIDはプログラムに書いてしまってもいいのですが、誰でも使えるように設定ファイルから読み込む形にしました。
「conf.txt」という名前で作成します。
中身はこんな感じ。

1行目に一番はじめに作ったGoogleカレンダーのカレンダーID、2行目にAIPO側のユーザーIDを書いておきます。
テスト時は「プロジェクトルート\bin」に置いておきます。

なお、このプログラムはあくまで開始日が本日以降のスケジュールしか対象にしていません。
繰り返しの予定は普通開始日が本日より以前なので対象外となっています。
開始日が未来だとしても繰り返し設定はないですが・・・
ちょっとそこまで対応するのは面倒なのでやってません。

また、Googleカレンダー側のスケジュールIDをこちらで決められるので、そういったことを使えば消去して挿入ではなく、更新という形で同期が実現できそうです。

テスト

実行してみます。
ソースファイルを右クリックして実行。
実行
初回起動時にブラウザが起動してリクエストの許可を促す画面が表示されますので許可します。
リクエストの許可

Googleカレンダーに予定が書き込まれたと思います。

リクエストを許可すると「credentials」というフォルダが作られ、その中に認証状態が保存されます。
このフォルダを削除すれば未許可状態に戻ります。

本番用jarファイルの作成

プロジェクトを右クリック→エクスポート→Java→実行可能JARファイルを選択。
起動構成に「CalendarQuickstart」を選択してjarを作成します。
作成されたjarと同階層に「conf.txt」を置いてjarを実行するだけです。
あとはこれをタスクスケジューラで動かすなりして定期実行します。

AIPOのテーブルについて(おまけ)

Windows版の場合、AIPOのPostgresのID、パスワードは「C:\aipo\dpl004\tomcat\webapps\aipo\WEB-INF\datasource\dbcp-org001.properties」に書いてありました。
IDはおそらく「aipo_postgres」固定だと思います。
デフォルトでは外部からの接続が許可されていないので、同期用プログラムを他のPCから実行する場合は外部からの接続を許可する必要があります。

PostgresSQLの外部からの接続許可

「C:\aipo\dpl004\postgresql\data\postgresql.conf」のlisten_addressesと書かれている部分を検索してコメントを外します。

「C:\aipo\dpl004\postgresql\data\pg_hba.conf」の一番下を以下に変えます。

0.0.0.0/0でどこからでも接続可能です。

AIPOを再起動すれば完了です。

AIPOのユーザーID

AIPOのユーザーIDは管理画面からは見られません。
「turbine_user」というテーブルがユーザーマスタなのでこちらを見てください。



スポンサーサイト
アフィリエイトはエーハチネット
ドメイン取るならお名前.com

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です