如何使用 PHP 将数据(事件)插入到 Google 日历中?
How can I insert data (event) into Google Calendar with PHP?
我正在尝试将活动插入到 Google 日历中,但我每次都遇到错误。我一直在寻找几个小时的答案,但我的问题一无所获。我测试了很多例子,但没有成功。我是 Google 日历的新手,我无法真正理解 google api 文档。
我有一个使用 Google 日历 (Gcal) 作为后端的 Fullcalendar。我可以毫无问题地从 Gcal 读取数据。当我尝试使用 Fullcalendar 显示时,但当我想将一些测试数据写入 Gcal 时,它给我错误。我想制作一个用作预订应用程序的日历应用程序。所以我有一个日历,显示给进入页面的每个人,他们可以预约,这些约会存储在我的 Google 日历中。
主要问题是,我真的不知道如何连接到 Google 日历来写入数据。我见过的每个示例,解决问题的方式都不一样,其中大部分已经过时,其中一些使用了会话,但是我不需要会话,因为我要显示的日历是固定的,每个人都看到了。
代码:
require_once 'Google/src/Google/autoload.php';
require_once "Google/src/Google/Client.php";
require_once "Google/src/Google/Service/Calendar.php";
$client_id = 'XXXXXXXXXX-f9ltk86b2klat20k1osmfbgpu4u1vqse.apps.googleusercontent.com';
$client_secret = 'XXXXXXXXXXXXXXXXXXXXXXX';
$key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // Server Key
$email_address = 'XXXXXXXXXXXX-f9ltk86b2klat20k1osmfbgpu4u1vqse@developer.gserviceaccount.com';
$client = new Google_Client();
$client->setApplicationName("Calendar");
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setDeveloperKey($key);
$client->setScopes(array(
'https://www.googleapis.com/auth/plus.login',
));
$cal = new Google_Service_Calendar($client);
$event = new Google_Service_Calendar_Event();
$event->setSummary('Title');
$event->setDescription('Title');
$event->setLocation('Somewhere');
$start = new Google_Service_Calendar_EventDateTime();
$start->setDateTime('2013-08-17T16:00:00.000-07:00');
$event->setStart($start);
$end = new Google_Service_Calendar_EventDateTime();
$end->setDateTime('2013-08-17T17:00:00.000-07:00');
$event->setEnd($end);
$createdEvent = $cal->events->insert('<Calendar ID>', $event);
它产生的异常:
[19-Jun-2015 09:08:59 Europe/Berlin] PHP Fatal error: Uncaught exception 'Google_Service_Exception' with message 'Error calling POST
https://www.googleapis.com/calendar/v3/calendars/hpba8d7p1f6l65ruhbl9qigvks%40group.calendar.google.com/events?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX:
(401) Login Required' in
/var/www/XXXXXXXXXXXXXXXXXXXX/calendar/Google/src/Google/Http/REST.php:110
Login Required
表示您没有正确验证。
通过查看您正在使用的示波器,我认为这可能会提示您为什么它不起作用
您正在传递 Google+ 的范围,如果您想访问 Google 日历数据,您应该传递 Google 日历之一 scopes。
- https://www.googleapis.com/auth/calendar read/write 访问日历
- https://www.googleapis.com/auth/calendar.readonly 对日历的只读访问权限
使用服务帐户进行身份验证
<?php
require_once 'Google/autoload.php';
session_start();
/************************************************
The following 3 values an befound in the setting
for the application you created on Google
Developers console. Developers console.
The Key file should be placed in a location
that is not accessable from the web. outside of
web root.
In order to access your GA account you must
Add the Email address as a user at the
ACCOUNT Level in the GA admin.
************************************************/
$client_id = '[your client]';
$Email_address = '[your service account email]';
$key_file_location = '[Your key]';
$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
$key = file_get_contents($key_file_location);
// separate additional scopes with a comma
$scopes ="https://www.googleapis.com/auth/calendar";
$cred = new Google_Auth_AssertionCredentials(
$Email_address,
array($scopes),
$key
);
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
$service = new Google_Service_Calendar($client);
?>
教程中的代码 PHP Google Calendar service account
提示:确保您已授予服务帐户访问相关日历的权限。您只需像添加任何其他用户一样将服务帐户电子邮件添加到日历。
我正在尝试将活动插入到 Google 日历中,但我每次都遇到错误。我一直在寻找几个小时的答案,但我的问题一无所获。我测试了很多例子,但没有成功。我是 Google 日历的新手,我无法真正理解 google api 文档。
我有一个使用 Google 日历 (Gcal) 作为后端的 Fullcalendar。我可以毫无问题地从 Gcal 读取数据。当我尝试使用 Fullcalendar 显示时,但当我想将一些测试数据写入 Gcal 时,它给我错误。我想制作一个用作预订应用程序的日历应用程序。所以我有一个日历,显示给进入页面的每个人,他们可以预约,这些约会存储在我的 Google 日历中。
主要问题是,我真的不知道如何连接到 Google 日历来写入数据。我见过的每个示例,解决问题的方式都不一样,其中大部分已经过时,其中一些使用了会话,但是我不需要会话,因为我要显示的日历是固定的,每个人都看到了。
代码:
require_once 'Google/src/Google/autoload.php';
require_once "Google/src/Google/Client.php";
require_once "Google/src/Google/Service/Calendar.php";
$client_id = 'XXXXXXXXXX-f9ltk86b2klat20k1osmfbgpu4u1vqse.apps.googleusercontent.com';
$client_secret = 'XXXXXXXXXXXXXXXXXXXXXXX';
$key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // Server Key
$email_address = 'XXXXXXXXXXXX-f9ltk86b2klat20k1osmfbgpu4u1vqse@developer.gserviceaccount.com';
$client = new Google_Client();
$client->setApplicationName("Calendar");
$client->setClientId($client_id);
$client->setClientSecret($client_secret);
$client->setDeveloperKey($key);
$client->setScopes(array(
'https://www.googleapis.com/auth/plus.login',
));
$cal = new Google_Service_Calendar($client);
$event = new Google_Service_Calendar_Event();
$event->setSummary('Title');
$event->setDescription('Title');
$event->setLocation('Somewhere');
$start = new Google_Service_Calendar_EventDateTime();
$start->setDateTime('2013-08-17T16:00:00.000-07:00');
$event->setStart($start);
$end = new Google_Service_Calendar_EventDateTime();
$end->setDateTime('2013-08-17T17:00:00.000-07:00');
$event->setEnd($end);
$createdEvent = $cal->events->insert('<Calendar ID>', $event);
它产生的异常:
[19-Jun-2015 09:08:59 Europe/Berlin] PHP Fatal error: Uncaught exception 'Google_Service_Exception' with message 'Error calling POST https://www.googleapis.com/calendar/v3/calendars/hpba8d7p1f6l65ruhbl9qigvks%40group.calendar.google.com/events?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXX: (401) Login Required' in /var/www/XXXXXXXXXXXXXXXXXXXX/calendar/Google/src/Google/Http/REST.php:110
Login Required
表示您没有正确验证。
通过查看您正在使用的示波器,我认为这可能会提示您为什么它不起作用
您正在传递 Google+ 的范围,如果您想访问 Google 日历数据,您应该传递 Google 日历之一 scopes。
- https://www.googleapis.com/auth/calendar read/write 访问日历
- https://www.googleapis.com/auth/calendar.readonly 对日历的只读访问权限
使用服务帐户进行身份验证
<?php
require_once 'Google/autoload.php';
session_start();
/************************************************
The following 3 values an befound in the setting
for the application you created on Google
Developers console. Developers console.
The Key file should be placed in a location
that is not accessable from the web. outside of
web root.
In order to access your GA account you must
Add the Email address as a user at the
ACCOUNT Level in the GA admin.
************************************************/
$client_id = '[your client]';
$Email_address = '[your service account email]';
$key_file_location = '[Your key]';
$client = new Google_Client();
$client->setApplicationName("Client_Library_Examples");
$key = file_get_contents($key_file_location);
// separate additional scopes with a comma
$scopes ="https://www.googleapis.com/auth/calendar";
$cred = new Google_Auth_AssertionCredentials(
$Email_address,
array($scopes),
$key
);
$client->setAssertionCredentials($cred);
if($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion($cred);
}
$service = new Google_Service_Calendar($client);
?>
教程中的代码 PHP Google Calendar service account
提示:确保您已授予服务帐户访问相关日历的权限。您只需像添加任何其他用户一样将服务帐户电子邮件添加到日历。