После нескольких часов чтения документации Google API и поиска в Интернете мне удалось написать простую функцию PHP для вставки события в мой Календарь Google (если кто-то хочет код, просто спросите).
Однако следующее, что я хочу сделать, это удалить все содержимое моего календаря Google. Первоначально я думал, что сделаю это, прочитав все события и затем удалив каждое из них, но в соответствии с Google я могу сделать это с помощью одной команды:
$ Сервис-> calendars-> Clear ($ cal_id);
Однако, поскольку документация Google API охватывает только фактическую команду и не показывает какой-либо код, который должен предшествовать этому, я использовал код авторизации, который работал в скрипте вставки события, но я просто не могу заставить его работать для очистка данных, и я получаю сообщение об ошибке:
Примечание: неопределенная переменная: service в index.php в строке 68
Весь мой код выглядит следующим образом:
<?php
//
// example code taken from:
// https://developers.google.com/google-apps/calendar/v3/reference/calendars/clear
//
//
calendclear('[email protected]');
//---------------------------------------------------//
// funtion to delete all events from Google calendar //
//---------------------------------------------------//
function calendclear ($cal_id) {
session_start();
require_once '../google-api-php-client-master/autoload.php';
//Google credentials
$client_id = 'xxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com';
$service_account_name = '[email protected]';
$key_file_location = '../google-api-php-client-master/API Project-xxxxxxxxxxxx.p12';
if (!strlen($service_account_name) || !strlen($key_file_location))
echo missingServiceAccountDetailsWarning();
$client = new Google_Client();
$client->setApplicationName("Whatever the name of your app is");
if (isset($_SESSION['service_token'])) {
$client->setAccessToken($_SESSION['service_token']);
}
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
$service_account_name,
array('https://www.googleapis.com/auth/calendar'),
$key
);
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
try {
$client->getAuth()->refreshTokenWithAssertion($cred);
} catch (Exception $e) {
var_dump($e->getMessage());
}
}
$_SESSION['service_token'] = $client->getAccessToken();
$calendarService = new Google_Service_Calendar($client);
$calendarList = $calendarService->calendarList;
//delete all calendar data
try {
$service->calendars->clear($cal_id);
} catch (Exception $e) {
var_dump($e->getMessage());
}
echo 'Calendar Successfully Cleared';
}
?>
После долгих проб и ошибок я нашел способ очистить Календарь Google, используя API v3.
Мне не удалось заставить команду clear работать, поэтому вместо этого мне пришлось:
1. прочитать все события в календаре
2. удалить каждый
Во-первых, убедитесь, что ваш Календарь Google настроен правильно, чтобы все это работало — в ответе есть 4 простых шага. Вставка записей Календаря Google с сервисной учетной записью
Далее приведен код, который я использовал — обратите внимание, что последние 2 ссылки на [email protected] являются адресом электронной почты владельца календаря — удаление НЕ будет работать ни с «первичным», ни с $ service_account_name.
Если вы играете с этим материалом, я надеюсь, что это поможет, так как тогда последние 2 дня моей жизни, которые я потратил, пытаясь решить это, не были полностью потрачены впустую 🙂
<?php
session_start();
require_once '../google-api-php-client-master/autoload.php';
//Google credentials
$client_id = 'xxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com';
$service_account_name = '[email protected]';
$key_file_location = '../google-api-php-client-master/API Project-xxxxxxxxxxx.p12';
if (!strlen($service_account_name) || !strlen($key_file_location))
echo missingServiceAccountDetailsWarning();
$client = new Google_Client();
$client->setApplicationName("Whatever the name of your app is");
if (isset($_SESSION['service_token'])) {
$client->setAccessToken($_SESSION['service_token']);
}
$key = file_get_contents($key_file_location);
$cred = new Google_Auth_AssertionCredentials(
$service_account_name,
array('https://www.googleapis.com/auth/calendar'),
$key
);
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
try {
$client->getAuth()->refreshTokenWithAssertion($cred);
} catch (Exception $e) {
var_dump($e->getMessage());
}
}
$_SESSION['service_token'] = $client->getAccessToken();
/* ------------------------- We are now properly authenticated ------------------- */
$cal = new Google_Service_Calendar($client);
$event_list = $cal->events->listEvents('[email protected]');
$events = $event_list->getItems();
// loop through all events read from calendar
foreach ($events as $event)
{
$myEvent=$event->getId();
$mySummary=$event->getSummary();
$MyStart=$event->getStart()->getDateTime();
$MyEnd=$event->getEnd()->getDateTime();
echo 'about to delete event '.$mySummary.' ID: ('.$myEvent.')<br />';
// now delete the event found
try {
$cal->events->delete('[email protected]', $myEvent);
echo 'Success.<br />';
} catch (Exception $e) {
var_dump($e->getMessage());
die('Event Delete Failed.');
}
}
?>
Других решений пока нет …