Calendarlist возвращает пустой набор результатов с учетной записью службы - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь установить связь между учетной записью Календаря Google и API Календаря Google, чтобы обновить базу данных MySQL на основе событий, содержащихся в календаре Google. Кажется, мой клиент настроен, и теперь мне нужно получить CalendarList, но у меня возникли проблемы.

Я вдохновился тем, что было сделано в quickstart.php, и тем, что объясняется в документации Google, чтобы попробовать некоторые тесты.

Проблема в том, что все мои запросы возвращают пустой результат, когда я использую метод getItems ();

Мой код:

function getClient()
{
    $client = new Google_Client();
    $client->setApplicationName('Google Calendar API PHP synchroniser');
    $client->setScopes(Google_Service_Calendar::CALENDAR_READONLY);
    $client->setAuthConfig('Path/To/My/AccountService/File.json');
    $client->setAccessType('online');
    $client->setPrompt('MyCalendarWithMyData');

    // Load previously authorized token from a file, if it exists.
    // The file token.json stores the user's access and refresh tokens, and is
    // created automatically when the authorization flow completes for the first
    // time.
    /*
    $tokenPath = 'token.json';
    if (file_exists($tokenPath)) {
        $accessToken = json_decode(file_get_contents($tokenPath), true);
        $client->setAccessToken($accessToken);
    }

    // If there is no previous token or it's expired.
    if ($client->isAccessTokenExpired()) {
        // Refresh the token if possible, else fetch a new one.
        if ($client->getRefreshToken()) {
            $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
        } else {
            //I don't know what to put here.
        }
    }
    */
    return $client;
}

$client = getClient(); // based on quickstart.php

$service = new Google_Service_Calendar($client);// from the sample on documentation

$calendarList = $service->calendarList->listCalendarList();
$calendars=$calendarList->getItems();
var_dump($calendars);

Моя цель - получить список календарей, чтобы получить каждое событие относительно каждого календаря в списке календарей для обновления базы данных. Спасибо G.G

1 Ответ

0 голосов
/ 15 мая 2019

Что вам нужно помнить, так это то, что учетная запись службы - это не вы.Сервисная учетная запись является фиктивным пользователем.У этого пользователя есть собственная учетная запись в календаре Google, учетная запись на диске и, возможно, еще несколько.

Если вы наберете

$calendar = $service->calendars->get('primary');
echo $calendar->getSummary();

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

Если вы хотите, чтобы у него был доступ к вашему личному календарю Google, вам нужно перейти на веб-сайт календаря Google и поделиться им с учетными записями служб.адрес электронной почты.тогда он должен быть в состоянии сделать следующее, убедитесь, что вы записали идентификатор календаря для календаря, которым вы поделились с ним, пока вы находитесь в настройках.

$calendar = $service->calendars->get('calendarid');

echo $calendar->getSummary();

Если вы действительно хотите его в списке календарей, вы можете добавитьit.

$calendarListEntry = new Google_Service_Calendar_CalendarListEntry();
$calendarListEntry->setId("calendarId");

$createdCalendarListEntry = $service->calendarList->insert($calendarListEntry);

echo $createdCalendarListEntry->getSummary();

Настройка учетной записи службы

Как я уже говорил, учетные записи служб должны быть предварительно авторизованы.Вам нужно перейти на веб-сайт Календаря Google и в настройках календаря, к которым вы хотите иметь доступ, вам необходимо поделиться с ним календарем, как показано

enter image description here

полезные ссылки

...