Google Calendar API的Google服务对象

时间:2013-10-27 19:24:01

标签: google-api google-calendar-api google-api-java-client google-api-dotnet-client

我正在尝试在.NET中使用Google Calendar API,特别是我正在尝试获取事件列表。根据示例here,在不同的编程语言中,我需要创建一个“服务”对象和一个“事件”对象。但是,我无法找到这些对象中的任何一个或如何启动它们的明确解释。有人有解释吗?或者任何人都可以提供任何信息或给我一个链接到解释的位置?它不一定必须在.NET中

以下是Java中的示例:

String pageToken = null;
do {
   events = service.events().list('primary').setPageToken(pageToken).execute();
List<Event> items = events.getItems();
for (Event event : items) {
  System.out.println(event.getSummary());
}
pageToken = events.getNextPageToken();

} while (pageToken != null); 

根据建议回答,我收到以下错误:

Could not load file or assembly 'Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.16.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

以下是代码,错误发生在credentials = Await...

Dim credential As UserCredential
Dim clientSecretsPath As String = Server.MapPath("~/App_Data/client_secret.json")
Dim scopes As IList(Of String) = New List(Of String)()
    scopes.Add(CalendarService.Scope.Calendar)

Using stream = New System.IO.FileStream(clientSecretsPath, System.IO.FileMode.Open, System.IO.FileAccess.Read)
credential = Await GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets, scopes, "user", CancellationToken.None)
    End Using

4 个答案:

答案 0 :(得分:3)

GoogleWebAuthorizationBroker的问题在于,它会尝试启动新的Web浏览器实例,并在必须单击“授予”按钮的情况下获得授权。

显然,如果您在IIS下运行MVC项目,那么当代码尝试执行Web浏览器时,它会感到困惑!

我的解决方案:

  1. 下载.net示例项目:https://code.google.com/p/google-api-dotnet-client/source/checkout?repo=samples

  2. 构建并运行与您相关的项目之一(例如日历或云端硬盘)。不要忘记包含从云控制台下载的client_secret.json文件。

  3. 运行项目,它将在您的计算机上打开一个新的浏览器,您必须单击“授予”按钮。执行此操作然后您的MVC代码将起作用,因为它不会尝试打开W​​eb浏览器来授予权限。

  4. 我不知道有任何其他方法可以将此权限授予SDK,但它对我很有帮助!

    祝你好运。这花了我5个小时才弄明白。

答案 1 :(得分:3)

运行VS2013时遇到同样的问题(我的项目使用.net45):

通过NuGet获取CalendarV3 API后,您只需手动将参考添加到:

...packages\Microsoft.Bcl.Async.1.0.165\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll

到项目中(因为它没有通过NuGet-Script自动插入)!

就是这样!也许@peleyal将来会纠正这个剧本;)

答案 2 :(得分:1)

请记住,此示例适用于Java。我的建议是做以下事情:

  1. 在我们的VB示例中查看可用的here
  2. Calendar API
  3. 你应该看一下C#的其他样本,让我们说Tasks API sample
  4. 启动一个新项目并向Google.Apis.Calednar.v3添加一个NuGet引用。请记住它是预发布版本。
  5. 您的代码应如下所示:
  6. 它基于上面的2个样本,我没有编译或测试它但它应该可以工作。

      UserCredential credential;
      using (var stream = new System.IO.FileStream("client_secrets.json",
      System.IO.FileMode.Open, System.IO.FileAccess.Read))
      {
        credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
          GoogleClientSecrets.Load(stream).Secrets, 
          new[] { CalendarService.Scope.Calendar }, 
          "user", CancellationToken.None);
      }
    
      // Create the service.
      var service = new CalendarService(new BaseClientService.Initializer()
      {
         HttpClientInitializer = credential,
         ApplicationName = "YOUR APP NAME HERE",
      });     
    
      var firstCalendar = (await service.CalendarList.List().ExecuteAsync()).Items().FirstOrDefault();
      if (firstCalendar != null)
      {
         // Get all events from the first calendar.
         var calEvents = await service.Events.List(firstCalendar.Id).ExecuteAsync();
         // DO SOMETHING
         var nextPage = calEvents.NextPage;
         while (nextPage != null)
         {
           var listRequest = service.Events.List(firstCalendar.Id);
           // Set the page token for getting the next events.
           listRequest.PageToken = nextPage;
           calEvents = await listRequest.EsecuteAsync();
           // DO SOMETHING
           nextPage = calEvents.NextPage;
         }
      }
    

答案 3 :(得分:0)

我遇到了同样的错误,这是由于应用尝试启动接受屏幕 我首先尝试从谷歌获取vb.net示例并运行它,我确实开始工作,并更改为我的秘密信息,运行并获得接受屏幕。我然后尝试了我的应用程序,它仍然无法正常工作。 我注意到这个dll是在我从nuget包安装的项目中找到的。

... packages\Microsoft.Bcl.Async.1.0.165\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll

但不在net45目录中。所以我卸载了nuget软件包(如果更改.net版本必须更新)然后将我的项目的.net版本更改为4.0而不是4.5,重新安装nuget软件包,然后就可以了!!