只需在Java中获取Google日历API V3中的所有事件
我一直在寻找一些简单的示例代码来获取事件列表并访问它们的数据(开始日期、结束日期及其描述)。我对java比较陌生,但已经用各种高级语言编程大约十年了。不管怎样,我似乎无法理解这样一个API最基本的要求是什么。我失败的尝试如下:只需在Java中获取Google日历API V3中的所有事件,java,google-calendar-api,Java,Google Calendar Api,我一直在寻找一些简单的示例代码来获取事件列表并访问它们的数据(开始日期、结束日期及其描述)。我对java比较陌生,但已经用各种高级语言编程大约十年了。不管怎样,我似乎无法理解这样一个API最基本的要求是什么。我失败的尝试如下: public class CalenderController { public CalenderController(String email, String pkey){ GoogleCredential credentials; try {
public class CalenderController {
public CalenderController(String email, String pkey){
GoogleCredential credentials;
try {
credentials = new GoogleCredential.Builder().setTransport(GoogleNetHttpTransport.newTrustedTransport())
.setJsonFactory(new GsonFactory())
.setServiceAccountId(email)
.setServiceAccountScopes(Arrays.asList("https://www.googleapis.com/auth/calendar.readonly"))
.setServiceAccountPrivateKeyFromP12File(new File(pkey+"-privatekey.p12"))
.build();
Calendar client = new Calendar.Builder(GoogleNetHttpTransport.newTrustedTransport(), new GsonFactory(), credentials).build();
Events events = client.events();
} catch (GeneralSecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
static void display(Events feed) {
if (feed.getItems() != null) {
for (Event entry : feed.getItems()) {
System.out.println();
System.out.println("-----------------------------------------------");
display(entry);
}
}
}
static void display(Event event) {
if (event.getStart() != null) {
System.out.println("Start Time: " + event.getStart());
}
if (event.getEnd() != null) {
System.out.println("End Time: " + event.getEnd());
}
}
}
及
公共类日历示例{
/**
*请确保指定应用程序的名称。如果应用程序名称
*如果{@code null}或为空,应用程序将记录警告。建议
*格式为“MyCompany ProductName/1.0”。
*/
私有静态最终字符串应用程序\u NAME=“Michelle Cal Client”;
/**用于存储用户凭据的目录*/
private static final java.io.File DATA_STORE_DIR=new java.io.File(
System.getProperty(“user.home”),“.store/calendar_sample”);
/**
*{@link DataStoreFactory}的全局实例。最佳做法是
*使其成为应用程序中的单个全局共享实例。
*/
私有静态文件数据存储工厂数据存储工厂;
/**HTTP传输的全局实例*/
专用静态HttpTransport-HttpTransport;
/**JSON工厂的全局实例*/
私有静态最终JsonFactory JSON_FACTORY=JacksonFactory
.getDefaultInstance();
私有静态com.google.api.services.calendar.calendar客户端;
静态最终java.util.List addedCalendarsUsingBatch=列表
.newArrayList();
/**授权已安装的应用程序访问用户受保护的数据*/
私有静态凭据授权()引发异常{
//加载客户端机密
GoogleClientSecrets clientSecrets=GoogleClientSecrets.load(
金牛工厂,
新的InputStreamReader(CalendarSample.class)
.getResourceAsStream(“/client_secrets.json”);
if(clientSecrets.getDetails().getClientId().startsWith(“输入”)
||clientSecrets.getDetails().getClientSecret()
.startsWith(“输入”)){
系统输出
.println(“输入客户ID和密码https://code.google.com/apis/console/?api=calendar 进入日历命令行sample/src/main/resources/client_secrets.json);
系统出口(1);
}
//设置授权代码流
GoogleAuthorizationCodeFlow=新建GoogleAuthorizationCodeFlow.Builder(
httpTransport、JSON_工厂、客户机密、,
集合.单例(日历范围.日历)
.setDataStoreFactory(dataStoreFactory).build();
//授权
返回新的授权代码InstalledApp(流程,
新建LocalServerReceiver())。授权(“用户”);
}
公共日历样本(){
试一试{
//初始化传输
httpTransport=GoogleNetHttpTransport.newTrustedTransport();
//初始化数据存储工厂
dataStoreFactory=新文件dataStoreFactory(DATA\u STORE\u DIR);
//授权书
凭证=授权();
//设置全局日历实例
client=new com.google.api.services.calendar.calendar.Builder(httpTransport,JSON_工厂,凭证).setApplicationName(APPLICATION_NAME).build();
//获取下一个事件
CalendarList提要=client.CalendarList().list().execute();
}捕获(IOE异常){
System.err.println(e.getMessage());
}捕获(可丢弃的t){
t、 printStackTrace();
}
}
public void getEvents()引发IOException{
CalendarList提要=client.CalendarList().list().execute();
if(feed.getItems()!=null){
对于(CalendarListEntry条目:feed.getItems()){
System.out.println();
System.out.println(“----------------------------------------------------”);System.out.println(“ID:+entry.getId());
System.out.println(“Summary:+entry.getSummary());
if(entry.getDescription()!=null){
System.out.println(“Description:+entry.getDescription());
}
}
}
}
}
是的,json文件确实加载了,我已经获得了API v3的相关导入,但在那之后,我被难住了
如果您有任何意见,我们将不胜感激。请添加更多关于哪些地方出错或不起作用的详细信息。好吧,所提供的代码不完整,我找不到文档来完成它。在我所能找到的所有内容中都有不一致的地方,对不推荐使用的API系统进行了大量的oc覆盖,但只是简单地获取了一个用户日历上所有事件的列表。由于我的浏览器上有一个插件,无法正确加载,但现在我知道我需要的东西可以在这里访问:
public class CalendarSample {
/**
* Be sure to specify the name of your application. If the application name
* is {@code null} or blank, the application will log a warning. Suggested
* format is "MyCompany-ProductName/1.0".
*/
private static final String APPLICATION_NAME = "Michelle Cal Client";
/** Directory to store user credentials. */
private static final java.io.File DATA_STORE_DIR = new java.io.File(
System.getProperty("user.home"), ".store/calendar_sample");
/**
* Global instance of the {@link DataStoreFactory}. The best practice is to
* make it a single globally shared instance across your application.
*/
private static FileDataStoreFactory dataStoreFactory;
/** Global instance of the HTTP transport. */
private static HttpTransport httpTransport;
/** Global instance of the JSON factory. */
private static final JsonFactory JSON_FACTORY = JacksonFactory
.getDefaultInstance();
private static com.google.api.services.calendar.Calendar client;
static final java.util.List<Calendar> addedCalendarsUsingBatch = Lists
.newArrayList();
/** Authorizes the installed application to access user's protected data. */
private static Credential authorize() throws Exception {
// load client secrets
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(
JSON_FACTORY,
new InputStreamReader(CalendarSample.class
.getResourceAsStream("/client_secrets.json")));
if (clientSecrets.getDetails().getClientId().startsWith("Enter")
|| clientSecrets.getDetails().getClientSecret()
.startsWith("Enter ")) {
System.out
.println("Enter Client ID and Secret from https://code.google.com/apis/console/?api=calendar into calendar-cmdline-sample/src/main/resources/client_secrets.json");
System.exit(1);
}
// set up authorization code flow
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport, JSON_FACTORY, clientSecrets,
Collections.singleton(CalendarScopes.CALENDAR))
.setDataStoreFactory(dataStoreFactory).build();
// authorize
return new AuthorizationCodeInstalledApp(flow,
new LocalServerReceiver()).authorize("user");
}
public CalendarSample() {
try {
// initialize the transport
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
// initialize the data store factory
dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);
// authorization
Credential credential = authorize();
// set up global Calendar instance
client = new com.google.api.services.calendar.Calendar.Builder(httpTransport, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();
// get next event
CalendarList feed = client.calendarList().list().execute();
} catch (IOException e) {
System.err.println(e.getMessage());
} catch (Throwable t) {
t.printStackTrace();
}
}
public void getEvents() throws IOException {
CalendarList feed = client.calendarList().list().execute();
if (feed.getItems() != null) {
for (CalendarListEntry entry : feed.getItems()) {
System.out.println();
System.out.println("-----------------------------------------------"); System.out.println("ID: " + entry.getId());
System.out.println("Summary: " + entry.getSummary());
if (entry.getDescription() != null) {
System.out.println("Description: " + entry.getDescription());
}
}
}
}
}