2016-01-07 2 views
0

Проблема

мне нужно тянуть ровно 12 общественных событий из общественного календаря с помощью Javascript на стороне клиента, или, как многие общественные мероприятия есть. Примеры:только Общественные события из Google Calendar API

  1. В календаре 14 событий. 3 являются частными, поэтому я ожидаю 11.
  2. Календарь имеет 18 событий. Первые 3 являются частными. Я ожидаю, что 12 мероприятий, а не 9.

Я использую Google Calendar API Explorer мало пользы (ссылку приведет вас к API исследователю с полями Я использую заполненный). Кажется, что в любом случае API API не должен включать частные события.
Примечание: Я выполняю этот вызов API без OAuth. События публикуются с использованием веб-интерфейса Календаря Google, поэтому расширенные свойства не соответствуют моему решению. Мой публичный Google Calendar ID: [email protected]

Плохого Решение

Если вы посмотрите на ответ JSON, вы увидите, что события, которые являются частными имеет следующее свойство и значение:

"visibility": "private" 

Что я могу сделать, это вызвать API с maxResults = 12 и просто отфильтровать любые частные мероприятия, проверяя свойства JSON выше.

  • Если nextPageToken == null, в календаре больше нет событий, и количество полученных результатов не имеет значения.
  • Если nextPageToken! = Null и после фильтрации закрытых событий у меня осталось менее 12 событий, я могу запросить еще один вызов API календаря Google для next 24 события (путем передачи в null-null nextPageToken) , Если этот ответ следующийPageToken! = Null, а сумма числа событий из последних двух вызовов не равна 12, я могу запросить следующие 48 событий и так далее, пока у меня не будет 12 общедоступных событий.

Проблема в том, что мне может потребоваться несколько раз вызвать API календаря Google, прежде чем я получу необходимое количество событий. И я должен сделать эту процедуру для нескольких календарей (например, если у меня есть 4 общедоступных календаря Google, и каждый из них принимает в среднем 3 вызова API для получения 12 событий, я бы выполнил 12 различных вызовов AJAX, чтобы получить данные ...). Крайне важно, чтобы я получил 12 событий или пока календарь не исчерпан.

хорошее решение

Я не могу найти хорошее решение этой проблемы. Я тщательно изучил все поля в Google API Explorer до нуля. Любая помощь будет оценена по достоинству.

+0

Насколько я знаю, нет способа отфильтровать на основе свойства видимости. – luc

ответ

0

Я не мог найти ответ на «Хорошее решение», к которому я стремился, но я нашел приемлемый компромисс.

Хорошо Решение

На мой вопрос, я сказал, что я должен сделать это «получить только общественные события» из нескольких календарей, и если каждый календарь в среднем уходило 3 API вызовов для получения X публичных мероприятий , Мне нужно будет вызвать Google Calendar API 3 * C, где C = количество календарей.

В клиентской библиотеке Google API есть что-то под названием Batch Requests, что позволяет мне звонить за несколько вызовов API за один раз! Ergo, я могу использовать пакетные запросы для получения всех событий для календарей C в одном запросе, отфильтровывать любые частные события, делать еще один пакетный запрос с C> = календари и т. Д.

В заключение я могу получить X открытых событий для календарей C всего лишь в среднем из 3 запросов API вместо 3 * C запросов.

Смежные вопросы