RESTを使用して一連のGoogleカレンダーにアクセスし、Javaを使用する必要があるプロジェクトに取り組んでいます。
Google以外のプライベートサーバー上にあるプログラムは、定期的に(cronジョブを介して)Googleアカウントに接続し、アカウントにリンクされているカレンダーのリストを取得し、各カレンダーの先月のイベントを取得して、すべてを含むXMLファイルを返します。情報。プログラムは、ユーザー入力なしでカレンダーを実行およびアクセスできる必要があります。現時点では、プロジェクトはカレンダーが変更されずに読み取られることを指定しています(したがって、GET/LIST呼び出しのみが行われます)。
Googleのドキュメントを確認し、クライアントライブラリを使用してサンプルコードを確認しました。記載されているほとんどすべての例では、カレンダーAPIにアクセスする前にOAuth2.0ユーザーの同意が必要です。 REST APIドキュメントページでさえ、要求された情報を返すためにOAuth 2.0をアクティブ化する必要があります(そうでない場合は、HTTP 40Xエラーコードとエラーステータスとメッセージを含むJSONファイルを返します)。
GoogleカレンダーREST APIに接続して、必要な情報を取得するにはどうすればよいですか。すべてはREST呼び出しを介して行われ、実行時にユーザーの同意は必要ありません。
または、物事を複雑にしすぎて、Google CloudConsoleのResgisteredApps部分にある「サーバーキー」のみが必要ですか?
または、OAuthと開発者キーの両方を使用する必要がありますか? (誰かがここで「GoogleCalendar API v3ハードコードされた資格情報」というタイトルの質問の下でそれについて言及しているのを見つけました;しかし、質問と解決策はPHPに関するものであり、Javaで同様のことが可能または必要かどうかはわかりません)。
私が探しているものについて十分な情報を提供したこと、そしてこの質問がこれまでカバーされていないことを願っています。調べてみましたが、探していたものに近いものは見つかりませんでした。
2つ以上のリンクを投稿できませんでした(評判が不足しています)が、Google Calendar v3 REST APIと、JWTの作成を指定するページを確認しました。
特定のカレンダーのセットにアクセスする必要がある場合は、サービスアカウントを作成し、必要なカレンダーをそのアカウントと共有します。
そうするために:
次に、次のコードを使用できるようになります。
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.json.gson.GsonFactory;
import Java.io.File;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import Java.util.Arrays;
import com.google.api.services.calendar.Calendar;
GoogleCredential credentials = new GoogleCredential.Builder().setTransport(GoogleNetHttpTransport.newTrustedTransport())
.setJsonFactory(new GsonFactory())
.setServiceAccountId("<service account email address>@developer.gserviceaccount.com")
.setServiceAccountScopes(Arrays.asList("https://www.googleapis.com/auth/calendar.readonly"))
.setServiceAccountPrivateKeyFromP12File(new File("<private key for service account in P12 format>-privatekey.p12"))
.build();
Calendar client = new Calendar.Builder(GoogleNetHttpTransport.newTrustedTransport(), new GsonFactory(), credentials).build();
client.<do calendar stuff>.execute();
代わりに、個々のユーザーの同意なしにドメインの一部であるすべてのGoogle Appsアカウントのカレンダーにアクセスする必要があるドメイン管理者の場合は、上記の手順4の代わりに次の手順を実行します。
これで、次のようなコードを記述できるようになります。
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.json.gson.GsonFactory;
import Java.io.File;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import Java.util.Arrays;
import com.google.api.services.calendar.Calendar;
GoogleCredential credentials = new GoogleCredential.Builder().setTransport(GoogleNetHttpTransport.newTrustedTransport())
.setJsonFactory(new GsonFactory())
.setServiceAccountId("<service account email address>@developer.gserviceaccount.com")
.setServiceAccountScopes(Arrays.asList("https://www.googleapis.com/auth/calendar"))
.setServiceAccountPrivateKeyFromP12File(new File("<private key for service account in P12 format>-privatekey.p12"))
.setServiceAccountUser("<domain user whose data you need>@yourdomain.com")
.build();
Calendar client = new Calendar.Builder(GoogleNetHttpTransport.newTrustedTransport(), new GsonFactory(), credentials).build();
client.<do calendar stuff as that user>()