B.G*_*ost 1 php google-calendar-api google-api google-oauth
我正在开发一个应用程序,该应用程序允许我的用户使用我的 Google 日历之一安排/重新安排日历事件,我不需要用户向 Google 进行身份验证。我需要使用的是带有服务帐户的 Google Calendar API。
我试图用 api v2 写一些东西,但我遇到了问题,所以我想知道你是否可以指导我阅读教程或示例,或者只是插入的示例
<?php
require_once './google-api-php-client-2.2.2/vendor/autoload.php';
session_start();
/************************************************ */
$client_id = '751416246659ae431430560098c25ba433c3e483';
$Email_address = ' testecalendar@spartan-grail-241202.iam.gserviceaccount.com';
$key_file_location = './credentials.json';
$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.readonly";
$client->setAuthConfig('./credentials.json');
$service = new Google_Service_Calendar($client);
?>
<html>
<body>
<?php
$calendarList = $service->calendarList->listCalendarList();
while (true) {
foreach ($calendarList->getItems() as $calendarListEntry) {
echo $calendarListEntry->getSummary() . "<br>\n";
// get events
$events = $service->events->listEvents($calendarListEntry->id);
foreach ($events->getItems() as $event) {
echo "-----" . $event->getSummary() . "<br>";
}
}
$pageToken = $calendarList->getNextPageToken();
if ($pageToken) {
$optParams = array('pageToken' => $pageToken);
$calendarList = $service->calendarList->listCalendarList($optParams);
} else {
break;
}
}
?>
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
致命错误:未捕获的 Google_Service_Exception: { "error": { "errors": [ { "domain": "global", "reason": "required", "message": "Login Required", "locationType": "header" , "location": "Authorization" } ], "code": 401, "message": "Login Required" } } 在 /Users/macbook/Desktop/testcal/google-api-php-client-2.2.2/src /Google/Http/REST.php:118 堆栈跟踪:#0 /Users/macbook/Desktop/testcal/google-api-php-client-2.2.2/src/Google/Http/REST.php(94): Google_Http_REST ::decodeHttpResponse(Object(GuzzleHttp\Psr7\Response), Object(GuzzleHttp\Psr7\Request), 'Google_Service_...') #1 /Users/macbook/Desktop/testcal/google-api-php-client-2.2. 2/src/Google/Task/Runner.php(176): Google_Http_REST::doExecute(Object(GuzzleHttp\Client), Object(GuzzleHttp\Psr7\Request), 'Google_Service_...') #2 /Users/macbook/Desktop/testcal/google-api-php-client-2.2.2/src/ Google/Http/REST.php(58): Google_Task_Runner->run() #3 /Users/macbook/Desktop/testcal/google-api-php-client-2.2.2/src/Google/Client.php(798) :第 118 行 /Users/macbook/Desktop/testcal/google-api-php-client-2.2.2/src/Google/Http/REST.php 中的 Google_Http_RES
在没有用户同意屏幕的情况下从 PHP 应用程序访问 Google Calendar API
不确定你是否真的想经历这一切(它只有一次 :-) ),但在这里你去......
“服务帐户是一种特殊类型的 Google 帐户,旨在代表需要进行身份验证并被授权访问 Google API 中的数据的非人类用户。”
这个想法是使用“服务帐户”(电子邮件地址)授权/共享您的日历,并使用“服务帐户密钥”进行身份验证。
我将从代码开始:
<?php
// read google calendar from php command line application
require_once './google-api-php-client-2.2.3/vendor/autoload.php';
$client = new Google_Client();
$client->addScope("https://www.googleapis.com/auth/calendar.readonly");
$client->setAuthConfig('client_credentials.json');
$service = new Google_Service_Calendar($client);
$calendarList = $service->calendarList->listCalendarList();
while(true) {
foreach ($calendarList->getItems() as $calendarListEntry) {
echo $calendarListEntry->getSummary();
echo "\n------------------------------\n\n";
// get events
$events = $service->events->listEvents($calendarListEntry->id);
foreach ($events->getItems() as $event) {
echo "- " . $event->getSummary() . "\n";
echo "- " . $event->getStart()->getDateTime() . "\n\n";
}
}
$pageToken = $calendarList->getNextPageToken();
if ($pageToken) {
$optParams = array('pageToken' => $pageToken);
$calendarList = $service->calendarList->listCalendarList($optParams);
} else {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
如何使它工作:
从这个 repo ( https://github.com/googleapis/google-api-php-client/releases )
下载“google-api-php-client-2.2.3.zip”并解压“google-api-php-client” -2.2.3" 在您的 php 应用程序的根目录中。
接下来,您需要这个“client_credentials.json”文件。您将从“Google Cloud Platform”获得它。最好是创建一个新项目,您可以使用现有项目,但您可能无法获得我在下面描述的内容(您可能能够做到,本质是相同的)。
创建并选择新项目后,
-转到“API 和服务”>“库”
-搜索“日历”,然后选择“Google 日历 API”
-启用
接下来,您需要
“创建凭据”
——如果你还没有被重定向到“API 和服务”>“凭据”
——点击“创建凭据”>“帮我选择”
——他们会问你“哪个 API正在使用”,选择“Google Calendar API”
——接下来,他们会问你“你将从哪里调用 API?”,选择“其他 UI(例如 Windows、CLI 工具)”
——接下来,他们会问您“您将访问哪些数据?”,选择“应用程序数据”
- 接下来,单击“我需要哪些凭据?”
现在您在“向项目添加凭据”页面
- 填写“服务帐户名称”
-选择“项目”的“角色”>“编辑器”
-“密钥类型”应为“JSON”
-单击“继续”将提示下载这个“something-something.json”文件(你可以将它保存在你的php应用程序的根目录中)
接下来,在您的 php 应用程序文件夹中,将“something-something.json”重命名为“client_credentials.json”
差不多好了...
接下来,使用文本编辑器打开“client_credentials.json”
- 复制“client_email”值的电子邮件地址,例如“test-php-app@xxxxxxxxxx-nnnnnnnnnnnnn.iam.gserviceaccount.com”
接下来,转到您的日历(您要访问的 Google 日历)并转到“设置”>“日历设置”
-向下滚动到“与特定人员共享”(您将在列表中看到您自己)
-单击“+ 添加人员”并粘贴电子邮件地址,例如“test-php-app@xxxxxxxxxx-nnnnnnnnnnnnn.iam.gserviceaccount.com”
-选择您想要的“权限”
-单击“发送”按钮
现在您的 php 应用程序通过服务帐户可以访问您的日历。
这是显示日历 ID 的代码:
echo "calendar summary: " . $calendarListEntry->getSummary();
echo "\ncalendar id: " . $calendarListEntry->getId();
echo "\n------------------------------\n\n";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2181 次 |
| 最近记录: |