how holidays google event create google-api google-calendar

google-api - holidays - how to add event to google calendar api



La solicitud[Events: list] de Google Calendar v3 devuelve Empty List (4)

Aquí está la versión C #

private void ClearAllEvents() { string pageToken = null; Events events; EventsResource.ListRequest qry = service.Events.List(CALENDAR_ID); do { qry.PageToken = pageToken; events = qry.Execute(); foreach(Event ev in events.Items) { service.Events.Delete(CALENDAR_ID, ev.Id).Execute(); } pageToken = events.NextPageToken; } while (pageToken != null); }

Estoy usando python urllib para hacer una solicitud en el calendario de Google (API V3).

Ahora, el problema es que cuando solicito '' Eventos: lista '', entonces recibí cero elementos en respuesta, aunque hay eventos en ese calendario.

Ejemplo

{ "kind": "calendar#events", "nextPageToken": "CigKGm83a292ZzZ2YXBsNXRsMHJhZnV2cGprdHVvGAEggIDA97TfuYYUGg0IABIAGOjEqd_6q7kC", "items": [ ] }

Si uso '' nextPageToken '' en la siguiente solicitud, funciona bien . (Pero no quiero hacer ninguna solicitud adicional).

Este problema no ocurre todo el tiempo. Si creo un nuevo email_id, esto funciona bien. pero después de uno o dos meses este problema comienza de nuevo.

¿Es esto un error en la API de Google Calendar?

o

¿Hay alguna solución para obtener la lista de eventos de cualquier calendario en solo una solicitud ?

Gracias por adelantado.


He estado tratando de resolver el mismo problema y creo que tengo la respuesta.

El problema aquí es que cuando Google calcula una ''página'' de eventos a devolver, incluye los eventos eliminados en ese cálculo, y su primera página está llena de eventos eliminados que no ve, a menos que su solicitud tenga "showDeleted = True" .

Proporciono una manera para que el usuario ''borre'' su calendario y lo vuelva a llenar y se haya topado con este problema. Considera este escenario:

  • El usuario tiene 250 eventos en su calendario y, por razones de argumentos, digamos que el tamaño de la página de Google es del mismo tamaño.

  • Cuando el usuario ejecuta el proceso de repoblación, estos 250 eventos se eliminan y se crean 250 eventos "nuevos".

  • La próxima vez que vayamos a eliminar los eventos antes de un proceso de repoblación, la primera página regresa sin eventos, esto es porque los primeros 250 en la lista son los que fueron eliminados originalmente. (He verificado esto usando el API Explorer )

  • El uso de nextPageToken para obtener la siguiente página de resultados funciona, como ya ha notado.

  • Esta es la razón por la cual la creación de un nuevo calendario funciona durante un período de tiempo, es decir, hasta que supere el límite de ''página'' y comience a devolver 0 eventos, que es donde nos topamos con problemas.

  • Con el tiempo y si el usuario usa mucho esta función de repoblación, su lista de eventos eliminados puede volverse enorme y requerirá muchas solicitudes para devolver todos los eventos. (No conozco ninguna forma de purgar por completo todos los eventos borrados de Google Cal; parecen permanecer para siempre)

  • No hay forma de que sepa devolver todos los eventos en una sola llamada. Debe recorrer el proceso para obtener una página a la vez hasta que ya no se devuelva "NextPageToken". Esto tiene sentido, porque para los usuarios que tienen calendarios enormes con miles de citas, es ineficiente devolver todo en una sola solicitud.

Usando Google Calendar API V3 aquí hay una muestra de lo que estoy usando en VB.Net para eliminar todos los eventos. (El servicio es un Google.Apis.Calendar.v3.CalendarService)

Private Sub ClearAllEvents() Dim pageToken As String = Nothing Dim events As Events Dim qry As New ListRequest(Service, GCalId) Do qry.PageToken = pageToken events = qry.Execute() For Each ev As [Event] In events.Items Dim dr As New DeleteRequest(Service, GCalId, ev.Id) dr.Execute() Next pageToken = events.NextPageToken Loop While Not IsNothing(pageToken) End Sub


Tuve un problema similar (Descripción completa en la respuesta de gleng). La única solución que encontré y todavía la uso ahora: simplemente agregue un parámetro ( singleEvents=true ) para solicitar. Esto eliminará las respuestas vacías de la API de calendario. Buena suerte.


agregue showDeleted = false y pageToken = next_page_token a url y llame de nuevo a la API.