API Календаря Google / Очистить корзину основного календаря

Я синхронизирую календарь с внешним приложением. У меня должны быть одинаковые идентификаторы событий в этом приложении и в Календаре Google. Но в этом приложении, когда событие удаляется, его идентификатор доступен для будущего нового события. Поэтому мне бы хотелось, чтобы при удалении события с помощью Calendar API был доступен идентификатор события. Но он всегда остается в корзине, и я не могу очистить его с помощью API.

Итак, два решения, которые я нашел:

  • Использовать clear функция:

    $cld = $service->calendars->get($calendarId);
    $calendarList = $service->calendarList->listCalendarList()->getItems();
    $summary = $cld->getSummary();
    $timeZone = $cld->getTimeZone();
    $events = $service->events->listEvents("primary")->getItems();
    $service->calendars->clear('primary');
    $cld->setSummary($summary);
    $cld->setTimeZone($timeZone);
    foreach($events as $event){
        $service->events->insert("primary", $event);
    }
    

    Но этот код возвращает сообщение "Запрещено" с кодом 403 на линии $service->calendars->clear('primary');

  • Создать новый календарь и сделать его primary

    $cld = $service->calendars->get($calendarId);
    $calendarList = $service->calendarList->listCalendarList()->getItems();
    $summary = $cld->getSummary();
    $timeZone = $cld->getTimeZone();
    $events = $service->events->listEvents("primary")->getItems();
    
    $calendarListEntry = new Google_Service_Calendar_CalendarListEntry();
    $calendarListEntry->setId("account_mail@gmail.com");
    $calendarListEntry->setSummary($summary);
    $calendarListEntry->setTimeZone($timeZone);
    
    $createdCalendarListEntry = $service->calendarList->insert($calendarListEntry);
    
    foreach($events as $event){
        $service->events->insert("account_mail@gmail.com", $event);
    }
    

    Но этот код возвращает сообщение "Неверное значение" с кодом 400 на линии $createdCalendarListEntry = $service->calendarList->insert($calendarListEntry);

Если у кого-то есть идея для меня, это было бы удивительно!

Спасибо.

1 ответ

Думаю, у меня есть решение вашей проблемы. Мои шаги:

  1. Создать новый календарь
  2. Переместить событие в календарь
  3. Удалить календарь

Насколько я вижу, в календарях нет мусора...

      $calendar = new Google_Service_Calendar_Calendar();
$calendar->setSummary('calendarSummary');
$calendar->setTimeZone('America/Los_Angeles');

$createdCalendar = $service->calendars->insert($calendar);

$result = $service->events->move('primary', 'eventId', $createdCalendar->getId());

$service->calendars->delete($createdCalendar->getId());

Извините за мои плохие навыки PHP.

Будьте осторожны с ограничениями календаря (на данный момент 60, подробнее об этом читайте здесь: https://support.google.com/a/answer/2905486?hl=en).

Другие вопросы по тегам