holidays google google-api google-calendar google-api-java-client google-api-dotnet-client

google-api - holidays - google calendar api key



Objeto de servicio de Google para Google Calendar API (4)

Estoy tratando de usar la API de Google Calendar en .NET, específicamente estoy tratando de obtener una lista de eventos. De acuerdo con los ejemplos aquí , en diferentes lenguajes de programación necesito crear un objeto ''servicio'' y un objeto ''evento''. Sin embargo, no puedo encontrar una explicación clara de cuál de estos objetos es o cómo iniciarlos. ¿Alguien tiene una explicación? ¿O puede alguien proporcionar información o darme un enlace a dónde se explica esto? No necesariamente tiene que estar en .NET

Aquí está el ejemplo en 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);

Siguiendo el consejo respondido, recibo el siguiente error:

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.

Aquí está el código, el error ocurre en las credentials = Await... línea

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


Recuerde que esta muestra es para Java. Mi recomendación es hacer lo siguiente:

  1. Eche un vistazo a nuestra muestra de VB para la API de calendario que está disponible aquí
  2. Deberías echarle un vistazo también a otra muestra para C #, digamos muestra de API de tareas
  3. Comience un nuevo proyecto y agregue una referencia NuGet a Google.Apis.Calednar.v3 . Recuerde que es una versión preliminar.
  4. Tu código debe verse así:

Se basa en las 2 muestras anteriores, no compilé ni probé, pero debería funcionar.

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; } }


El problema con GoogleWebAuthorizationBroker es que intenta lanzar una nueva instancia de un navegador web para obtener una autorización donde debe hacer clic en el botón "Otorgar".

Obviamente, si está ejecutando un proyecto MVC en IIS, ¡se confundirá cuando el código intente ejecutar un navegador web!

Mi solución:

  1. Descargue los proyectos de muestra .net: https://code.google.com/p/google-api-dotnet-client/source/checkout?repo=samples

  2. Cree y ejecute uno de los proyectos relevantes para usted (por ejemplo, Calendario o Unidad). No olvide incluir su archivo client_secret.json descargado de la consola de la nube.

  3. Ejecute el proyecto y se abrirá un nuevo navegador en su computadora donde tendrá que hacer clic en el botón "Otorgar". Haga esto una vez y luego su código MVC funcionará porque no intentará abrir un navegador web para otorgar los permisos.

No tengo conocimiento de ninguna otra forma de otorgar este permiso al SDK, pero funcionó para mí simplemente genial.

Buena suerte. Esto me tomó unas buenas 5 horas para averiguarlo.


Tuve el mismo error, y fue debido a que la aplicación intentaba iniciar la pantalla de aceptación.
Primero intenté obtener el ejemplo de vb.net de google y lo ejecuté, lo que sí pude hacer, y cambié a mi información secreta, ejecuté y obtuve la pantalla de aceptación. Luego probé mi aplicación y aún no funcionó. Noté que el dll se encontró aquí debajo de mi proyecto instalado desde los paquetes nuget.

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

pero no estaba en el directorio net45 . Así que desinstalé los paquetes nuget (si cambian la versión .net) y luego cambié mi versión .net para mi proyecto a 4.0 en lugar de 4.5, reinstalé los paquetes nuget y luego funcionó.


Simplemente tuve el mismo problema al ejecutar VS2013 (usando .net45 para mi proyecto):

Después de obtener la API de CalendarV3 a través de NuGet, solo tiene que agregar manualmente la referencia a:

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

al proyecto (¡porque no se inserta automáticamente a través de NuGet-Script)!

¡Eso es! Tal vez @peleyal está corrigiendo el guión de algún modo en el futuro;)