Объект службы Google для API Календаря Google

Я пытаюсь использовать API Календаря Google в .NET, в частности, я пытаюсь получить список событий. Согласно примерам здесь, на разных языках программирования я необходимо создать объект «сервис» и объект «событие». Однако я не могу найти четкого объяснения того, что представляет собой любой из этих объектов или как их инициировать. У кого-нибудь есть объяснение? Или кто-нибудь может предоставить какую-либо информацию или дать мне ссылку, где это объясняется? Это не обязательно должно быть в .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)


Помните, что этот пример предназначен для Java. Моя рекомендация сделать следующее:

  1. Взгляните на наш образец VB для Calendar API, который доступен здесь
  2. Вам также следует взглянуть на другой пример для C#, скажем, Пример API задач
  3. Запустите новый проект и добавьте ссылку NuGet в Google.Apis.Calednar.v3< /а>. Помните, что это предварительная версия.
  4. Ваш код должен выглядеть следующим образом:

Он основан на двух приведенных выше примерах, я не компилировал и не тестировал его, но он должен работать.

  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;
     }
  }
person peleyal    schedule 28.10.2013
comment
Спасибо за ваш ответ (это мой сторонний проект, поэтому я не пробовал его до сих пор). Я получаю ошибку, описанную выше, в «редактировании». Я нашел файл Microsoft.Threading.Tasks.Extensions.Desktop.dll на веб-сайте code.google.com, но любая попытка его присоединения вызывает ошибки. - person Art F; 03.11.2013
comment
Я попытался загрузить файл отсюда: code.google.com/p/google-api-dotnet-client/source/browse/ . Но это привело к другой ошибке: 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 module was expected to contain an assembly manifest. - person Art F; 04.11.2013
comment
Используйте NuGet для управления зависимостями. Просто добавьте ссылку на Google.Apis.Calendar.v3 (nuget.org/ пакеты/Google.Apis.Calendar.v3) - person peleyal; 04.11.2013
comment
Итак, почему вы пытаетесь скачать - code.google.com/p/google-api-dotnet-client/source/browse/? Может быть, просто запустите новый проект, добавьте необходимую зависимость NuGet (это все...), а затем добавьте код, который я опубликовал. Дайте мне знать, если он скомпилируется. - person peleyal; 04.11.2013
comment
Я пытался загрузить его, потому что он выдавал ошибку cannot find file. Ошибка давала мне список путей к файлам, где .NET искал dll, поэтому я попытался загрузить ее и вставить в один из них. Я не знаю, есть ли проблема с Nuget, я попробую сегодня создать новый проект. - person Art F; 04.11.2013
comment
Хорошо, наконец понял, похоже, что .NET искал эту Dll не в том месте, я наконец смог найти ее и поместить в папку «bin», где ее искал .NET, после этого все заработало. - person Art F; 05.11.2013
comment
@peleyal Я думаю, что проблема здесь в том, что Nuget создает зависимости (например, при следовании этот пример) не удается добавить Microsoft.Threading.Tasks.Extensions.Desktop.dll к ссылкам, возможно, это требует обновления? Я смог найти его и вручную добавить в ссылки в следующей папке в решении после выполнения всех установок Nuget: \packages\Microsoft.Bcl.Async.1.0.16\lib\net40\ - person squid808; 06.11.2013
comment
С другой стороны, я только что попробовал это на отдельном компьютере, используя VS 2010 вместо 2012, и *.Desktop был втянут. Возможно, тогда это проблема nuget? - person squid808; 07.11.2013
comment
Интересно. Документация Microrosft.Bcl.Async на самом деле говорит об обратном: этот пакет не поддерживается в Visual Studio 2010. Какую именно ошибку вы получаете при запуске его в VS2012? Попробуйте начать с нуля, ориентируясь на нужную платформу с правильными ссылками NuGet. Вам также следует рассмотреть возможность использования C #, а не VB.NET (просто потому, что я ненавижу VB.NET :)) - person peleyal; 07.11.2013

Проблема с GoogleWebAuthorizationBroker заключается в том, что он пытается запустить новый экземпляр веб-браузера, чтобы перейти и получить авторизацию, где вам нужно нажать кнопку «Предоставить».

Очевидно, что если вы запускаете проект MVC под IIS, он просто запутается, когда код попытается выполнить веб-браузер!

Мое решение:

  1. Загрузите примеры проектов .net: https://code.google.com/p/google-api-dotnet-client/source/checkout?repo=samples

  2. Создайте и запустите один из проектов, имеющих отношение к вам (например, Календарь или Диск). Не забудьте включить файл client_secret.json, загруженный из облачной консоли.

  3. Запустите проект, и он откроет новый браузер на вашем компьютере, где вам нужно будет нажать кнопку «Предоставить». Сделайте это один раз, и тогда ваш код MVC будет работать, потому что он не будет пытаться открыть веб-браузер для предоставления разрешений.

Я не знаю другого способа предоставить это разрешение SDK, но у меня это сработало просто отлично!

Удачи. Это заняло у меня добрых 5 часов, чтобы понять.

person Angelo    schedule 10.11.2013
comment
Я думаю, вы можете избежать этого, если используете учетную запись службы, см. здесь code.google.com/p/google-api-dotnet-client/wiki/OAuth2 . Я обнаружил, что мне нужно поделиться документом с электронной почтой учетной записи службы, иначе он не появится. Очевидно, есть и другой способ справиться с этим developers.google.com/drive/delegation. - person Andrew Olney; 20.11.2013

У меня была такая же проблема с VS2013 (с использованием .net45 для моего проекта):

После получения API CalendarV3 через NuGet вам просто нужно вручную добавить ссылку в:

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

в проект (поскольку он не вставляется автоматически через NuGet-Script)!

Вот и все! Возможно, когда-нибудь @peleyal поправит сценарий ;)

person Mr.Acid    schedule 05.02.2014
comment
Гений, это сделало это для меня! - person Mike Devenney; 11.07.2014

У меня была та же ошибка, и это было связано с тем, что приложение пыталось запустить экран принятия.
Сначала я попытался получить пример vb.net из Google и запустил его, что у меня получилось, и изменить на свой секретная информация, побежал и получил экран принятия. Затем я попробовал свое приложение, и оно все еще не работало. Я заметил, что 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, и тогда это сработало!!

person yzguy    schedule 06.12.2013