如果您只需要访问一组特定的日历,我将创建一个服务帐户并与该帐户共享必要的日历。
为此:
- 在此Cloud Console中创建一个“服务帐户”(可在“ Web应用程序” /“证书”下找到)。
- 下载私钥并将其存储在安全的地方。
- 记下与服务帐户关联的电子邮件地址。
- 与该电子邮件地址共享(通过日历用户界面)任何必要的日历。
- 安装Google API Java客户端库(https://developers.google.com/api-client-library/java/apis/)。
然后,您应该可以使用以下代码:
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:
- 记下与服务帐户关联的客户端ID。可以在client_secrets.json文件中找到-通常为1234.apps.googleusercontent.com形式。
- 授权此客户端代表您组织中的用户发出请求。有关步骤,请参见https://support.google.com/a/answer/162106?hl=zh_CN-使用以后要请求的范围。
您现在应该可以编写如下代码:
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>()


