1

我正在尝试在 .NET 中使用 Google Calendar API,特别是我正在尝试获取事件列表。根据此处的示例,在不同的编程语言中,我需要创建一个“服务”对象和一个“事件”对象。但是,我找不到关于这些对象是什么或如何启动它们的清晰解释。有人有解释吗?或者任何人都可以提供任何信息或给我一个链接到解释的地方吗?它不一定必须在 .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

4 回答 4

3

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

通过 NuGet 获取 CalendarV3 API 后,您只需手动添加对以下内容的引用

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

到项目中(因为它不是通过 NuGet 脚本自动插入的)!

而已!也许@peleyal 会在将来某个时候更正脚本;)

于 2014-02-05T16:41:40.613 回答
3

GoogleWebAuthorizationBroker 的问题在于它试图启动一个新的网络浏览器实例来获取授权,您必须单击“授予”按钮。

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

我的解决方案:

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

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

  3. 运行该项目,它将在您的计算机上打开一个新的浏览器,您必须在其中单击“授予”按钮。这样做一次,然后您的 MVC 代码将工作,因为它不会尝试打开 Web 浏览器来授予权限。

我不知道有任何其他方式可以将此权限授予 SDK,但它对我来说非常有用!

祝你好运。这花了我 5 个小时才弄清楚。

于 2013-11-10T12:34:59.863 回答
1

请记住,此示例适用于 Java。我的建议是执行以下操作:

  1. 查看我们的日历 API 的 VB 示例,该示例可在此处获得
  2. 您还应该查看其他 C# 示例,比如说Tasks API 示例
  3. 启动一个新项目并添加对Google.Apis.Calednar.v3的 NuGet 引用。请记住,它是预发布版本。
  4. 您的代码应如下所示:

它基于上面的 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;
     }
  }
于 2013-10-28T13:32:35.837 回答
0

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

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

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

于 2013-12-06T17:21:47.800 回答