Как подключиться к API календаря Google без аутентификации oAuth?

Я изучал API Календаря Google и документы об аутентификации (http://code.google.com/apis/calendar/v3/using.html#auth). Кажется, что упомянутый здесь вариант использования - это приложение, которое обращается к календарю пользователя. Тем не менее, я пишу веб-страницу, которая будет иметь доступ к календарю владельца веб-сайта и отображать только одну информацию календаря. Поэтому я не хочу, чтобы пользователь вводил информацию о своей учетной записи Google, что и хочет сделать.

В принципе, я ищу способ получить доступ к одному частному календарю Google и пройти проверку подлинности, передав учетные данные непосредственно службе.

Здесь есть похожие вопросы: Как использовать OAuth с Календарем Google для доступа только к одному календарю? что, похоже, указывает, что плакат первоначально передавал учетные данные напрямую. Доступна ли эта функция? Как вы обрабатываете описанный вами вариант использования?

Ответ 1

У меня та же проблема. Я нашел этот учебник по 3 частям, который делает именно то, что вы хотите. Веб-страница для бронирования
Вы создаете веб-страницу, которая записывается непосредственно в ваш собственный календарь (а не пользователи), и поэтому пользователям не нужно давать вам разрешение на доступ к их календарю.
Это решение работает для меня, но вам нужно управлять им напрямую с помощью REST.

Я ищу способ использовать google api php client, потому что это кажется немного проще. Но я еще не нашел способ правильно отредактировать файл google-api-php-client/src/config.php для работы таким образом, чтобы вы аутентифицировали себя не как фактического пользователя, потому что вам нужен доступ к вашему календарю. Если у кого-то есть идея или script, что я буду очень благодарен.

Ответ 2

Если я не ошибаюсь, они запустили учетную запись службы для этого сейчас: https://developers.google.com/accounts/docs/OAuth2ServiceAccount

Edit:

Здесь модификация из их Prediction 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(...)

Ответ 3

Также посмотрите здесь:

https://github.com/googleapis/google-api-php-client#authentication-with-service-accounts

После создания учетной записи службы вы можете аутентифицироваться без приглашения пользователя для добавления элементов в календарь, которым владеет ваша служба.