Как подключиться к API Календаря Google без аутентификации oAuth?
Я изучал API Календаря Google и документы по аутентификации ( http://code.google.com/apis/calendar/v3/using.html). Кажется, что упомянутый здесь вариант использования - это написание приложения, которое обращается к календарю пользователя. Тем не менее, я пишу веб-страницу, которая будет обращаться к календарю владельца веб-сайта и отображать только информацию этого календаря. Поэтому я не хочу, чтобы пользователь вводил в свою учетную запись Google информацию, которую хочет сделать oAuth.
По сути, я ищу способ доступа к одному частному календарю Google и аутентификации в нем, передавая учетные данные непосредственно в службу.
Здесь есть похожие вопросы: Как использовать OAuth с Календарем Google для доступа только к ОДНОМУ календарю? это, кажется, указывает на то, что постер изначально передавал полномочия напрямую. Эта функция еще доступна? Как вы справляетесь с вариантом использования, который я описал?
2 ответа
У меня та же проблема. Я нашел этот учебник из 3 частей, который делает именно то, что вы хотите. Веб-страница для бронирования
Вы создаете веб-страницу, которая пишет непосредственно в ваш собственный календарь (не для пользователей), и поэтому пользователям не нужно давать вам разрешение на доступ к их календарю.
Это решение работает для меня, но вы должны управлять им напрямую с помощью REST.
Я ищу способ использовать клиент PHP API Google, потому что это кажется немного проще. Но я еще не нашел способ, как правильно отредактировать файл google-api-php-client / src / config.php так, чтобы вы аутентифицировали себя, а не действительного пользователя, потому что вам нужен доступ к вашему календарю. Если у кого-то есть идея или сценарий, который бы это сделал, я был бы очень благодарен.
Если я не ошибаюсь, они запустили сервисную учетную запись для этого сейчас: https://developers.google.com/accounts/docs/OAuth2ServiceAccount
Редактировать:
Вот модификация из их API прогнозирования
session_start();
require_once "google-api-php-client/src/Google_Client.php";
require_once "google-api-php-client/src/contrib/Google_CalendarService.php";
const CLIENT_ID = '...';
const SERVICE_ACCOUNT_NAME = '...';
// Make sure you keep your key.p12 file in a secure location, and isn't
// readable by others.
const KEY_FILE = '...';
$client = new Google_Client();
$client->setApplicationName("...");
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
}
// Load the key in PKCS 12 format (you need to download this from the
// Google API Console when the service account was created.
$key = file_get_contents(KEY_FILE);
$client->setAssertionCredentials(new Google_AssertionCredentials(
SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/calendar', "https://www.googleapis.com/auth/calendar.readonly"),
$key)
);
$client->setClientId(CLIENT_ID);
$service = new Google_CalendarService($client);
//Save token in session
if ($client->getAccessToken()) {
$_SESSION['token'] = $client->getAccessToken();
}
//And now you can use the code in their PHP examples, like: $service->events->listEvents(...)
Также посмотрите здесь:
https://github.com/googleapis/google-api-php-client
После создания учетной записи службы вы можете пройти аутентификацию без запроса пользователя на добавление элементов в календарь, которым владеет ваша служба.