カテゴリー内の他の記事

Googleカレンダー連携 - Garoonの予定をGoogleカレンダーに表示 -

フォローする

(著者:サイボウズ 竹内 能彦)

はじめに

Googleカレンダー使っていますか?自分の予定と他の方の予定を並べて表示したり、予定を共有したり出来てとっても便利ですよね。
そこにGaroonの予定を並べて見られたらもっと便利になると思いませんか?

そんな思い付きからGaroonの予定をGoogleカレンダーに表示する連携プログラムを作成しました。事前準備が少し大変ですが、皆さん是非使ってみてください。

概要

連携プログラムは以下の処理をコマンドラインから実行できるサンプルプログラムです。

  • Garoonに登録された予定をGoogleカレンダーに登録
  • Garoonで更新された予定をGoogleカレンダーに反映
  • Garoonから削除された予定をGoogleカレンダーから削除

Googleカレンダーに登録する情報はGaroonの予定の「開始日時」、「終了日時」、「施設」、「メモ」、「コメント」、「参加者」です。

動作環境

  • プログラム実行用端末(Java8が動作し、Garoon、Googleカレンダーにネットワーク接続できること)
    2018年3月現在、Java9では動作しないことを確認しています。
  • Garoon on cybozu、パッケージ版 サイボウズ ガルーン3.0.0以降
  • Googleカレンダー

Garoon on cybozu、Googleカレンダーは2018年2月版で確認しています。

事前準備

実行するには連携プログラムの設定だけでなく、GoogleアカウントやGoogleカレンダーの設定が必要になります。
また、GoogleアカウントやGoogleカレンダーの設定内容を連携プログラムの設定に利用するため、メモが必要な項目はその都度注釈を入れてあります。

※現在のGGsyncはOAuth2.0にも対応していますが、本ページではサービスアカウントキー認証を利用します。

 

1.Googleアカウント作成

下記URLから、Googleアカウントを作成します。Googleアカウントを取得済みの方はログインしてください。

https://accounts.google.com/SignUp

2.Google APIの利用設定

下記URLから、プロジェクトを作成します。

https://console.developers.google.com/project

 

プロジェクト名には適当な値を入力してください。

google-setting1.png

 

プロジェクトの作成完了後、Google Calendar APIを検索し、

google-setting2.png

 

Google Calendar APIを有効にします。

google-setting3.png

 

認証情報を作成します。

google-setting4.png

 

下記画像の通りの内容を選択し、「必要な認証情報」をクリックします。

google-setting5.png

 

サービスアカウント名には適当な値を入力し、キーのタイプはP12を選択します。

google-setting6.png

 

役割なしで作成します。

google-setting7.png

自動ダウンロードされたP12キー(以下、秘密鍵(拡張子がp12))は以降の手順で利用しますので任意のフォルダに保存します。

 

次にサービスアカウント IDを確認します。
画面右の「サービスアカウントの管理」をクリックし、

google-setting9.png

 

表示されたサービスアカウント IDをメモします。(以降の手順で利用します)

google-setting10.png

 

3.Googleカレンダーの作成

下記URLから、Garoonのスケジュールを連携させるGoogleカレンダーを作成します。

https://www.google.com/calendar

 

カレンダーの作成完了後、Googleカレンダー設定の「このカレンダーを共有」タブを開きます。先ほどのメールアドレスに予定の変更権限を付与し、保存します。

google-setting10.png

 

Googleカレンダー設定の「カレンダー情報」タブを開き、カレンダーIDを確認します。カレンダーIDは以降の手順で利用しますのでメモしてください。

4.連携プログラムの設定

プログラム実行用端末に連携プログラムを動作させるフォルダを作成します。本設定では例として「C:/GGsync」を利用します。
秘密鍵を「C:/GGsync」に移動します。
実行ファイル設定ファイルをダウンロードしてください。ソースはGitHubで管理しています。(外部サイトが開きます)

実行ファイル「GGsync.jar」と設定ファイル「GGsync.properties」を「C:/GGsync」に移動します。

設定ファイル「GGsync.properties」をテキストエディタで開き、コメントに従い設定します。
Googleカレンダーに登録する予定の色は1から11までの数値を指定できます。下記の色を参考に選択してください。

 

各カラーIDのカラーコードはこちらのコメントから確認できます。
(tomomo85さん 情報ありがとうございます)

 

実行手順

プログラム実行用端末でコマンドプロンプトを起動し、以下のコマンドを入力します。

> java -jar C:/GGsync/GGsync.jar C:/GGsync

コマンドの形式は「 java -jar 実行ファイルのパス 設定ファイルが存在するフォルダ」です。
「The sync completed.」と表示されればスケジュール連携に成功しています。

実行結果は設定ファイルが存在するフォルダ配下のGGsync.db(例ではC:/GGsync/GGsync.db)に保存します。GGsync.dbは次回実行時の差分反映に利用します。

プロキシ経由の実行

プロキシを経由する必要がある場合は下記のオプションを追加して実行してください。

> java -Dhttp.proxyHost=ホスト名 -Dhttp.proxyPort=ポート番号 -Dhttps.proxyHost=ホスト名 -Dhttps.proxyPort=ポート番号 -jar C:/GGsync/GGsync.jar C:/GGsync

オプションの詳細はこちら(Oracle社のドキュメントページが開きます)

セキュアアクセス利用時の実行

セキュアアクセスを利用する必要がある場合は、クライアント証明書をGGsync.jarと同じディレクトリに保存し、下記のオプションを追加して実行してください。

> java -Djavax.net.ssl.keyStore=xxxx.pfx -Djavax.net.ssl.keyStorePassword=xxxx -Djavax.net.ssl.keyStoreType=PKCS12 -jar GGsync.jar .

実行例

下記がGaroonのスケジュール、実行結果、予定が反映されたGoogleカレンダーの例になります。

・Garoonのスケジュール

 

・連携プログラムの実行結果

 

・Googleカレンダー(プライベートな予定と並べて表示)

 

Garoonの予定の「メモ」、「コメント」はGoogleカレンダーの「説明」にまとめて登録します。

 

Garoonの予定が変更された場合は、Googleカレンダーの予定を削除してから再登録します。
下記が変更時の実行例になります。

 

Garoonの予定が削除された場合は、Googleカレンダーの予定を削除します。
下記が削除時の実行例になります。

定期実行

タスクスケジューラなどを利用することで、定期的にGaroonの予定をGoogleカレンダーに反映できます。
是非試してみてください。

連携プログラムの更新履歴

2015/3/30 繰り返し予定が正常に登録されない不具合を改修しました。
2015/4/24 終了時間未指定の予定がエラーになる不具合を改修しました。
2015/6/18 連携失敗時に詳細なエラーを出力するように修正しました。
2015/9/16 日本語文字のアカウント名に対応しました。
2016/1/14 Googleカレンダーに「参加者」を登録する機能を追加しました。
2016/3/24 ソースコードをGitHubに移しました。
2017/3/21 セキュアアクセス利用時の実行オプションを追記しました。
2017/9/21 ソースコードにライセンス表記を追加しました。

記事に関するフィードバック

直接的に記事と関連がないご質問はcybozu developer コミュニティをご活用ください。

Avatar
竹内 能彦

nasuka_o様

おそらくJava9に対応していないのが原因だと思います。
Java9には対応する予定ですがいつ頃になるかは未定です。
そのため、お急ぎでしたらJava8での実行をご検討ください。

Avatar
nasuka_o

竹内様

Java8にダウングレードして同期が成功いたしました!
迅速なコメント、誠にありがとうございます!助かりました。
御礼申し上げます

>おそらくJava9に対応していないのが原因だと思います。
>Java9には対応する予定ですがいつ頃になるかは未定です。
>そのため、お急ぎでしたらJava8での実行をご検討ください。

Avatar
Hirotaka Kanemaru

 

グループ週表示

 

 

 

 

 

 

 

 

 

以前、こちらのサイトを参考に同期をしていたのですが、
(バージョン:Cybozu® Garoon Version 4.0.3)

PCを新しくして同じように設定した所、下記エラーが出てしまい動作しません。対処方法を教えてください。

◆コマンド

C:\Users\NSW00_003565>java -jar c:\GGsync\GGsync.jar c:\GGsync

◆エラーメッセージ

INFO  16:19:44 The sync beginning with debug mode.
DEBUG 16:19:44 グーグルカレンダーの認証方式: P12key
DEBUG 16:19:44 サービスアカウントのメールアドレス: cybozu@potaro-194303.iam.gser
viceaccount.com
DEBUG 16:19:44 サービスアカウントのP12キーファイルの絶対パス: C:/GGsync/potaro-0
cad61aad03b.p12
DEBUG 16:19:44 OAuth2のclient_idファイルの絶対パス:
DEBUG 16:19:44 OAuth2の認証情報保存先の絶対パス:
DEBUG 16:19:44 グーグルカレンダーID: kc77h91mh30iks3tf6736mdm50@group.calendar.g
oogle.com
DEBUG 16:19:44 グーグルカレンダーに登録する通常予定の色: 5
DEBUG 16:19:44 グーグルカレンダーに登録する期間予定の色: 7
DEBUG 16:19:44 ガルーンのURL: https://nswcb.bluespider.jp/cgi-bin/cbgrn/grn.cgi
DEBUG 16:19:44 ガルーンのアカウント: NSW00_003565
DEBUG 16:19:44 SYNC対象の開始時間: Sun Feb 04 16:19:44 JST 2018
DEBUG 16:19:44 SYNC対象の終了時間: Thu Jul 05 16:19:44 JST 2018
ERROR 16:19:44 No enum constant com.cybozu.GoogleCalendar.CredentialConfig.AuthT
ype.P12key
java.lang.IllegalArgumentException: No enum constant com.cybozu.GoogleCalendar.C
redentialConfig.AuthType.P12key
        at java.lang.Enum.valueOf(Unknown Source)

Avatar
Hirotaka Kanemaru
以前から、こちらのサイトを参考に同期をしていたのですが、
(バージョン:Cybozu® Garoon Version 4.0.3)

PCを新しくして同じように設定した所、下記エラーが出てしまい動作しません。対処方法を教えてください。

◆コマンド

C:\Users\NSW00_003565>java -jar c:\GGsync\GGsync.jar c:\GGsync

◆エラーメッセージ

INFO  16:19:44 The sync beginning with debug mode.
DEBUG 16:19:44 グーグルカレンダーの認証方式: P12key
DEBUG 16:19:44 サービスアカウントのメールアドレス: cybozu@potaro-194303.iam.gser
viceaccount.com
DEBUG 16:19:44 サービスアカウントのP12キーファイルの絶対パス: C:/GGsync/potaro-0
cad61aad03b.p12
DEBUG 16:19:44 OAuth2のclient_idファイルの絶対パス:
DEBUG 16:19:44 OAuth2の認証情報保存先の絶対パス:
DEBUG 16:19:44 グーグルカレンダーID: kc77h91mh30iks3tf6736mdm50@group.calendar.g
oogle.com
DEBUG 16:19:44 グーグルカレンダーに登録する通常予定の色: 5
DEBUG 16:19:44 グーグルカレンダーに登録する期間予定の色: 7
DEBUG 16:19:44 ガルーンのURL: https://nswcb.bluespider.jp/cgi-bin/cbgrn/grn.cgi
DEBUG 16:19:44 ガルーンのアカウント: NSW00_003565
DEBUG 16:19:44 SYNC対象の開始時間: Sun Feb 04 16:19:44 JST 2018
DEBUG 16:19:44 SYNC対象の終了時間: Thu Jul 05 16:19:44 JST 2018
ERROR 16:19:44 No enum constant com.cybozu.GoogleCalendar.CredentialConfig.AuthT
ype.P12key
java.lang.IllegalArgumentException: No enum constant com.cybozu.GoogleCalendar.C
redentialConfig.AuthType.P12key
        at java.lang.Enum.valueOf(Unknown Source)

Avatar
竹内 能彦

Hirotaka Kanemaruさん

GGsync.propertiesの下記設定値がおそらく「P12key」になっています。
KEYも大文字にしてください。
google.oauth.type=P12KEY

Avatar
Hirotaka Kanemaru

竹内様

早々のご回答有り難うございます。

ご指摘の大文字変更した所、実行されたようですが、

別のエラーが出てしまいました。

 

ERROR 18:09:00 handshake alert:  unrecognized_name
org.apache.axis2.AxisFault: handshake alert:  unrecognized_name
        at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)

Avatar
竹内 能彦

Hirotaka Kanemaruさん

ガルーンサーバーのSSLに問題がありそうです。以下の対応をご検討ください。
・http://で試す
・グーグルで検索するとJavaのバージョンに関する記述もありました。
 Javaのバージョンが1.7の場合は1.8へのバージョンアップをご検討ください。
 Java 1.9では本プログラムは動作しませんのでご注意ください。

これでも発生するとなると解決は難しいです。

Avatar
Hirotaka Kanemaru

竹内様

HTTPで試しましたが、サーバー側で制限しておりだめでした。

色々とグーグル検索して試したところ、コマンドを下記にしたら正常動作しました。

「java -Djsse.enableSNIExtension=false -jar c:\GGsync\GGsync.jar c:\GGsync」

 

ありがとうございました。

Avatar
wada

竹内さま

実行すると、下記のようなエラーが出るのですがどんな原因が予想されますか?

DEBUG 17:23:22 SYNC対象の開始時間: Tue Feb 27 17:23:22 JST 2018
DEBUG 17:23:22 SYNC対象の終了時間: Sat Jul 28 17:23:22 JST 2018
DEBUG 17:23:26 [ADD] GaroonId:155581 Title:xxxxxx 様
ERROR 17:23:26 Connection reset
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)


DEBUG 17:23:26 [ADD] GaroonId:155581 …と出ていることから

ガルーンからはデータをとれているような気がするのですが、

GGsync.propertiesのGoogle側の設定がおかしいのでしょうか?

 

ちなみに、PROXY使用で実行すると

DEBUG 17:23:26 [ADD]は出ずに org.apache.axis2.transport.http.HTTPSender sendViaPost
情報: Unable to sendViaPost to url

というエラーが出ます

 

Avatar
竹内 能彦

wada様

Googleカレンダーへのアクセスにはプロキシ設定が必要で、ガルーンは不要という状況でしょうか。
であれば下記URLを参考にhttp.nonProxyHostsを活用してみてください。
https://docs.oracle.com/javase/8/docs/api/java/net/doc-files/net-properties.html

Avatar
竹内 能彦

未確認ですが、Garoonがhttp環境であればhttpsの方のみプロキシ設定すれば動作するかもしれません。

(Googleカレンダーはhttpsなので)

Avatar
wada

竹内さま

一旦別の環境で成功してから社内で再トライしようと思い、プライベートの端末で
VMWAREでCentos6.9をインストール&ガルーン4.6パッケージ版をインストールし
同梱のサンプルデータを使って、Googleカレンダーと連携のテストをしてみました。

P12KEYの設定では問題なく連携できたのですが、OAUTHを試そうとすると以下のエラーが出ます。

INFO 14:52:38 The sync beginning with debug mode.
DEBUG 14:52:38 グーグルカレンダーの認証方式: OAUTH2
DEBUG 14:52:38 サービスアカウントのメールアドレス:
DEBUG 14:52:38 サービスアカウントのP12キーファイルの絶対パス:
DEBUG 14:52:38 OAuth2のclient_idファイルの絶対パス: c:/ggsync/client_secret_xxx.apps.googleusercontent.com.json
DEBUG 14:52:38 OAuth2の認証情報保存先の絶対パス: c:/ggsync/
DEBUG 14:52:38 グーグルカレンダーID: xxx@gmail.com
DEBUG 14:52:38 グーグルカレンダーに登録する通常予定の色: 5
DEBUG 14:52:38 グーグルカレンダーに登録する期間予定の色: 7
DEBUG 14:52:38 ガルーンのURL: http://xxx/cgi-bin/cbgrn/grn.cgi
DEBUG 14:52:38 ガルーンのアカウント: sato
DEBUG 14:52:38 SYNC対象の開始時間: Mon Mar 19 14:52:38 JST 2018
DEBUG 14:52:38 SYNC対象の終了時間: Fri Aug 17 14:52:38 JST 2018
3 20, 2018 2:52:39 午後 com.google.api.client.util.store.FileDataStoreFactory se
tPermissionsToOwnerOnly
警告: unable to change permissions for everybody: C:\ggsync
3 20, 2018 2:52:39 午後 com.google.api.client.util.store.FileDataStoreFactory se
tPermissionsToOwnerOnly
警告: unable to change permissions for owner: C:\ggsync
Exception in thread "main" java.lang.NoClassDefFoundError: org/mortbay/jetty/Han
dler
at com.cybozu.GoogleCalendar.authorizeOAuth2(GoogleCalendar.java:260)
at com.cybozu.GoogleCalendar.authenticate(GoogleCalendar.java:202)
at com.cybozu.GoogleCalendar.<init>(GoogleCalendar.java:50)
at com.cybozu.GGsync.main(GGsync.java:157)
Caused by: java.lang.ClassNotFoundException: org.mortbay.jetty.Handler
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 4 more

c:/ggsync/は、Everyoneユーザを追加してフルコントロール権限がついています。
また、OAuth2の認証情報保存先の絶対パスにStoredCredentialファイルが
できているので書き込み権限の問題なのかが?です。

どのあたりから原因を探したら良いでしょう?

 

Avatar
竹内 能彦

wada様

OAUTHはJavaのバージョンが上がったからかClassNotFoundExceptionが出ますね・・・
(権限は警告なので動作しない直接的な要因ではありません)
そのため、P12KEYでの利用をご検討ください。

Avatar
TI

竹内様

いつもGoogleカレンダー連携大変重宝しております。ありがとうございます。

 

解説いただいている内容で1年以上問題なく動作していたのですが、数週間前より下記エラーとなり、動作しなくなってしましました。Javaの知識がまったくないため、お手上げ状態です。あつかましいお願いですが、どのようにすれば正常に動作するようになるかアドバイスいただけないでしょうか。

当方環境は、サイボウズガルーン 4.6.1(RedHat)、PC Windows10 Pro、Java 1.8._161 です。

※一部●で伏せ字にしております。

C:\GGsync>java -jar C:\GGsync\GGsync.jar C:\GGsync
INFO  21:34:48 The sync beginning with debug mode.
DEBUG 21:34:48 サービスアカウントのメールアドレス: ●●●●●●●●●@appspot.gserviceaccount.com
DEBUG 21:34:48 サービスアカウントのP12キーファイルの絶対パス: C:/GGsync/GGSync●●●●●●●.p12
DEBUG 21:34:48 グーグルカレンダーID: ●●●●●@●●●●.com
DEBUG 21:34:48 グーグルカレンダーに登録する通常予定の色: 5
DEBUG 21:34:48 グーグルカレンダーに登録する期間予定の色: 7
DEBUG 21:34:48 ガルーンのURL: http://garoon.●●●●●●●●●.jp/cgi-bin/cbgrn/grn.cgi
DEBUG 21:34:48 ガルーンのアカウント: ●●●●●●
DEBUG 21:34:48 SYNC対象の開始時間: Thu Mar 29 21:34:48 JST 2018
DEBUG 21:34:48 SYNC対象の終了時間: Mon Aug 27 21:34:48 JST 2018
ERROR 21:34:51 For input string: ""
java.lang.NumberFormatException: For input string: ""
        at java.lang.NumberFormatException.forInputString(Unknown Source)
C:\GGsync>

TIにより編集されました
Avatar
竹内 能彦

TI様

GGsync.jarを最新版に更新してください。(記事本文からダウンロードしてください)
削除されたユーザーが登録した予定を連携させられない不具合を2017年3月に改修しました。
おそらく直ると思います。が直らなければすいませんm(_ _)m

Avatar
TI

竹内様

ありがとうございます。

GGsync.jar最新版にすることで正常に動作するようになりました。

当方で初歩的な検証もできておらず申し訳ございませんでした。

 

これで安心して新年度業務を行えます。

本当にありがとうございました。

 

 

 

Avatar
Hiroki Tei

導入しようと試行錯誤しているのですが

文中の以下のコマンド実行時にエラーが発生します。

java –jar C:/GGsync/GGsync.jar C:/GGsync

 

エラー文

GGsync (Is a directory)

java.io.FileNotFoundException: GGsync (Is a directory)

at java.base/java.io.FileInputStream.open0(Native Method)

 

 

フォルダ構成やファイルの置き場所を確認しましたが

それに関しては間違い無いと思います。

 

他にどんな原因が考えられるでしょうか?

よろしくお願いします。

Hiroki Teiにより編集されました
Avatar
竹内 能彦

Hiroki Teiさん

こちらの情報だけでは原因はわかりませんでした。
「C:/GGsync」ディレクトリに移動して、コマンド「dir」の実行結果を
教えていただければ原因がわかるかもしれません。

Avatar
Hiroki Tei

ご返信ありがとうございます。

当方macを使用しているため、lsコマンドで表示された

結果を示します。以下のような結果になりました。

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

GGsync.db GGsync.log GGsync.properties

GGsync.jar GGsync.p12 GGsync.properties~

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

ご確認いただければ幸いです。

Avatar
竹内 能彦

パスの指定が間違っていそうです。
「C:/」というのはWindowsを想定しています。

コマンドの形式は「java -jar 実行ファイルのパス 設定ファイルが存在するフォルダ」です。
GGsync.jarなどを設置したフォルダはGGsync.jarが存在するフォルダ上でコマンド「pwd」で確認できます。
例えばその結果が「/home/hiroki」であれば実行コマンドは「java -jar /home/hiroki/GGsync.jar /home/hiroki」です。

Avatar
Hiroki Tei

GGsync.jarが含まれているフォルダでpwdコマンドを入力した結果です。

hiroki-tei$ pwd

=>    /Users/hiroki-tei/GGsync

 

これを受けて次のコマンドを入力しました

java -jar /Users/hiroki-tei/GGsync/GGsync.jar /Users/hiroki-tei/GGsync

しかしながら次のようなエラーが表示されました。

INFO  10:00:49 The sync beginning with normal mode.

ERROR 10:00:50 GGsync (No such file or directory)

java.io.FileNotFoundException: GGsync (No such file or directory)

at java.base/java.io.FileInputStream.open0(Native Method)

 

どうすればよいでしょうか?

Avatar
竹内 能彦

すいません。回答遅れました。
プログラムは実行されるようになりましたが、その後エラーが発生していますね。

もしまだ調査中でしたら下記の情報を教えていただければ原因がわかるかもしれません。
・コマンド「ls -l」の結果
・GGsync.propertiesの最下部で「execution.level=1」に設定し、GGsync実行時のエラー出力

Avatar
Hiroki Tei

お世話になっております。

まず、ls -lの結果がこちらです。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

GGsync hiroki-tei$ ls -l

total 34968

-rw-r--r--  1 hiroki-tei  UNIVERSUM\Domain Users      3072  4 23 13:24 GGsync.db

-rw-r--r--@ 1 hiroki-tei  UNIVERSUM\Domain Users  17496321  4 23 10:50 GGsync.jar

-rw-r--r--  1 hiroki-tei  UNIVERSUM\Domain Users     41692  4 27 09:33 GGsync.log

-rw-r--r--@ 1 hiroki-tei  UNIVERSUM\Domain Users      2476  4 23 10:16 GGsync.p12

-rw-r--r--@ 1 hiroki-tei  UNIVERSUM\Domain Users      1832  4 23 15:19 GGsync.properties

-rw-r--r--@ 1 hiroki-tei  UNIVERSUM\Domain Users      1817  4 23 13:50 GGsync.properties~

ーーーーーーーー「ls -l」の結果終わりーーーーーーーーーーーーーーーーーーーーーーーーー

 

次にpropertiesでデバッグモードを指定して実行した結果がこちらです。

ーーーーーーーーーーーーーーーーーーーーーーーーーー

hiroki-tei$ java -jar /Users/hiroki-tei/GGsync/GGsync.jar /Users/hiroki-tei/GGsync

INFO  15:31:05 The sync beginning with debug mode.

DEBUG 15:31:05 グーグルカレンダーの認証方式: P12KEY

DEBUG 15:31:05 サービスアカウントのメールアドレス: ggsync@ggsync-202001

DEBUG 15:31:05 サービスアカウントのP12キーファイルの絶対パス: GGsync

DEBUG 15:31:05 OAuth2のclient_idファイルの絶対パス:

DEBUG 15:31:05 OAuth2の認証情報保存先の絶対パス:

DEBUG 15:31:05 グーグルカレンダーID: dtj6q9u308isv2uovjqlnjov50

DEBUG 15:31:05 グーグルカレンダーに登録する通常予定の色: 5

DEBUG 15:31:05 グーグルカレンダーに登録する期間予定の色: 7

DEBUG 15:31:05 ガルーンのURL: https://united.cybozu.com/g/

DEBUG 15:31:05 ガルーンのアカウント: hiroki-tei@united.jp

DEBUG 15:31:05 SYNC対象の開始時間: Tue May 01 15:31:05 JST 2018

DEBUG 15:31:05 SYNC対象の終了時間: Sat Sep 29 15:31:05 JST 2018

ERROR 15:31:05 GGsync (No such file or directory)

java.io.FileNotFoundException: GGsync (No such file or directory)

at java.base/java.io.FileInputStream.open0(Native Method)

ーーーーーーーーー「デバッグモードでの表示」終わりーーーーーーーーーーーーーーー

 

お忙しいところ本当にありがとうございます。

よろしくお願いします。

Avatar
竹内 能彦

お世話になります。

私がしばらく実行環境確認できないので推測ですが、、、


P12キーの指定(GGsync.propertiesファイル内のgoogle.oauth.p12key)を絶対パスで指定するようにしてください。
例)google.oauth.p12key=/Users/hiroki-tei/GGsync/GGsync.p12

あと、グーグルカレンダーIDは「@」以降も含めてください。
例)google.calendar.id=dtj6q9u308isv2uovjqlnjov50@group.calendar.google.com

 

Avatar
Hiroki Tei

ありがとうございます。

ご指摘いただいた部分、修正して再度実行してみたのですが

また別のエラーが吐き出されてしまいました。

以下に指摘点の該当部分に対応するDEBUG表示と

吐き出された警告文を記載しました。

 

INFO  14:57:29 The sync beginning with debug mode.

DEBUG 14:57:29 サービスアカウントのP12キーファイルの絶対パス: /Users/hiroki-tei/GGsync/GGsync.p12

 

DEBUG 14:57:29 グーグルカレンダーID: dtj6q9u308isv2uovjqlnjov50@group.calendar.google.com

 

 

5月 03, 2018 2:57:30 午後 org.apache.axiom.util.stax.dialect.StAXDialectDetector detectDialectFromJarManifest

警告: Unable to load manifest for StAX implementation at jrt:/java.xml/

Exception in thread "main" java.lang.NoClassDefFoundError: javax/activation/DataSource

at org.apache.axiom.om.impl.builder.StAXBuilder.initParser(StAXBuilder.java:170)

at org.apache.axiom.om.impl.builder.StAXBuilder.<init>(StAXBuilder.java:138)

at org.apache.axiom.om.impl.builder.StAXBuilder.<init>(StAXBuilder.java:147)

at org.apache.axiom.om.impl.builder.StAXOMBuilder.<init>(StAXOMBuilder.java:105)

at org.apache.axiom.om.impl.common.factory.AbstractOMMetaFactory.createOMBuilder(AbstractOMMetaFactory.java:168)

at org.apache.axiom.om.OMXMLBuilderFactory.createOMBuilder(OMXMLBuilderFactory.java:161)

at org.apache.axiom.om.OMXMLBuilderFactory.createOMBuilder(OMXMLBuilderFactory.java:141)

at org.apache.axiom.om.OMXMLBuilderFactory.createOMBuilder(OMXMLBuilderFactory.java:112)

at org.apache.axis2.util.XMLUtils.toOM(XMLUtils.java:590)

at org.apache.axis2.util.XMLUtils.toOM(XMLUtils.java:575)

at org.apache.axis2.deployment.DescriptionBuilder.buildOM(DescriptionBuilder.java:97)

at org.apache.axis2.deployment.AxisConfigBuilder.populateConfig(AxisConfigBuilder.java:90)

at org.apache.axis2.deployment.DeploymentEngine.populateAxisConfiguration(DeploymentEngine.java:857)

at org.apache.axis2.deployment.FileSystemConfigurator.getAxisConfiguration(FileSystemConfigurator.java:116)

at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContext(ConfigurationContextFactory.java:64)

at org.apache.axis2.context.ConfigurationContextFactory.createConfigurationContextFromFileSystem(ConfigurationContextFactory.java:210)

at org.apache.axis2.client.ServiceClient.configureServiceClient(ServiceClient.java:151)

at org.apache.axis2.client.ServiceClient.<init>(ServiceClient.java:144)

at org.apache.axis2.client.ServiceClient.<init>(ServiceClient.java:251)

at com.cybozu.garoon3.common.CBServiceClient.<init>(CBServiceClient.java:65)

at com.cybozu.GGsync.main(GGsync.java:161)

Caused by: java.lang.ClassNotFoundException: javax.activation.DataSource

at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)

at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)

at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)

... 21 more

 

 

急ぎではないので、休み明けなどご都合よろしい時で大丈夫です。

次にすべきことを教えていただけたら嬉しいです。

よろしくお願いいたします。

Avatar
竹内 能彦

ご確認ありがとうございます。

Javaのバージョンは9でしょうか。
本プログラムは現在Java8にしか対応していません。
Java8のインストールをご検討ください。

Avatar
Hiroki Tei

大変失礼しました。

最新版のJava10を入れていたようです。

改めて、Java8をインストールして

やり直したところ、正常に動作するようになりました。

 

当方、新卒社員でパソコンの扱いに慣れておらず

この度はお手を煩わせてしまい、内心気がひける思いでしたが

1から丁寧に対応していただき、本当に助かりました。

お休み中にも関わらず、誠にありがとうございました。

 

先輩や同期にも、このやり方を教えようと思います!

いつかまた竹内様のお知恵を拝借させていただく時が

あるかもしれませんが、その際は何卒よろしくお願いいたします。

Avatar
yabu

竹内様

いつも大変便利に利用させていただいております。
恐縮ながら一点要望なのですが、「同期するスケジュールの除外機能」を実装いただけませんでしょうか。
例としましては「タイトルやメモ欄などに'##'が含まれる場合、google calendarに同期しない」といった機能です。
スマートフォンで、視認性を向上させたくお願い申し上げております。

お手すきの際に検討いただけましたら幸いです。

Avatar
竹内 能彦

yabu様

ご要望ありがとうございます。
現時点ではご要望いただいた機能の実装予定はありませんが、今後の参考にさせていただきます。
※GitHubにソースを公開していますのでソースの改修で実現可能です

Avatar
ゆうき

竹内様

シンク対象の日数を変更しようと[sync.before.days]パラメータを100から3650へ変えたところ、

以下エラーが発生しました。

ERROR 2018/06/27 13:30:59(GGsync:main:429) For input string: ""

こちらのページで既に回答済みの内容であったため、

最新のGGsync.properties及びGGsync.jarへ変更し再度実行したところ、

上記エラーではなく下記のようなエラーが発生して同期ができません、、

**************************************************************

ERROR 2018/06/27 14:01:23(GGsync:main:449) 400 Bad Request
{
  "error" : "invalid_grant",
  "error_description" : "Invalid JWT Signature."
}
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
  "error" : "invalid_grant",
  "error_description" : "Invalid JWT Signature."
}
    at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)
    at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
    at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:384)
    at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
    at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:217)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:859)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
    at com.cybozu.GoogleCalendar.addSchedule(GoogleCalendar.java:81)
    at com.cybozu.GGsync.main(GGsync.java:405)

**************************************************************

解決方法をご教示頂けないでしょうか??

 

ログインしてコメントを残してください。