创建服务帐户及其凭据
您需要创建一个服务帐户和凭据。在此过程中,您需要收集三个项目,这些项目稍后将用于Google Apps域名范围的权限授权,并在您的代码中使用您的服务帐户进行授权。这三个项目是您的服务帐户:
•客户端ID。
•私人密钥文件。
•电子邮件地址。
为了做到这一点,您首先需要一个运行Google APIs Console项目并启用Google Calendar API。请执行以下步骤:
- 转到Google API控制台。
- 打开您的现有项目或创建一个新项目。
- 转到服务部分。
- 启用日历API(以及可能需要访问的其他API)。
您现在可以创建服务帐户及其凭据。请按照下列步骤:
转至API访问部分。
通过点击创建一个OAuth 2.0客户端ID创建客户端ID ...
输入产品名称,指定一个可选的标志,然后单击下一步。
询问您的应用程序类型时选择服务帐户,然后单击创建客户端ID。
在这一点上,你会看到一个对话框,允许你下载私钥文件提交(见下图)。请务必安全地下载并保存该文件,因为无法从API控制台再次下载。
下载文件并关闭对话框后,您将能够获取服务帐户的电子邮件地址和客户端ID。
您现在应该收集您的服务帐户的私钥文件,客户端ID和电子邮件地址。您已准备好将域范围的权限委托给您的服务帐户。
代表域范围内的权力,您的服务帐户
,你现在需要创建的服务帐户被授予访问您要访问的谷歌Apps域的用户数据。以下任务必须由谷歌Apps域的管理员来执行:
转到您的谷歌Apps域的控制面板。该URL应如下所示:www.google.com/a/cpanel/mydomain.com
转至高级工具...>管理第三方OAuth客户端访问。
在客户端名称字段中输入服务帐户的客户端ID。
在一个或多个API范围字段中,输入您的应用程序应被授予访问权限的范围列表(请参见下图)。例如,如果您需要在全域范围内访问Google Calendar API,请输入:www.googleapis.com/auth/calendar.readonly
单击授权按钮。
您的服务帐户现在有域范围内的访问谷歌日历API为您的域的所有用户,并有可能你在上面的例子中列出的其他API。
下面是使用服务帐户来访问PHP日历数据的描述
的服务帐户访问用户日历的一般过程是如下:
•创建的谷歌客户端
•设置客户端应用程序名称
•如果您已经有Access令牌,请检查它是否已过期
•如果访问令牌到期,则设置JWT断言凭证,并得到一个新的令牌
•设置客户端ID
•创建基于谷歌客户端上的一个新的日历服务对象
•检索日历事件
注意:您必须保存Access令牌并仅在即将到期时刷新它,否则您将收到一个错误,指出您已超出一段时间内访问令牌的数量限制为用户。的谷歌PHP客户端库函数
说明使用:
客户端对象可以访问很多参数和方法都通过客户端对象进行访问以下内容:
创建一个新的客户端对象:
$client = new Google_Client();
设置客户端应用程序名称:
$client->setApplicationName(“My Calendar App”);
设置客户端访问令牌,如果你已经有一个保存:
$client->setAccessToken($myAccessToken);
检查,看是否访问令牌已过期,有30秒的缓冲,所以如果令牌被设置为过期,这将返回true在30秒以内。 Access令牌的有效期为一个小时。 Access令牌实际上是一个JSON对象,它包含创建时间,它的寿命以秒为单位,以及令牌本身。因此,Google不会向Google拨打电话,因为该令牌具有本地所有信息以确定其何时到期。
$client->isAccessTokenExpired();
如果令牌已过期或你从来没有检索到的令牌,那么你将需要设置断言凭据才能获得访问令牌:
$客户 - > setAssertionCredentials(新Google_AssertionCredentials(SERVICE_ACCOUNT_NAME ,数组(CALENDAR_SCOPE),$ key,'notasecret','http://oauth.net/grant_type/jwt/1.0/bearer',$ email_add));
Where:
SERVICE_ACCOUNT_NAME是之前设置的服务帐户电子邮件地址。
For example:’[email protected]’
CALENDAR_SCOPE是Google管理界面中的范围设置。
For example: ‘https://www.googleapis.com/auth/calendar.readonly’
$ key是在Google应用程序控制台中创建项目时下载的密钥文件的内容。 $ email_add是要检索日历数据的用户的Google电子邮件地址。
设置客户端ID: $ client-setClientId(SERVICE_CLIENT_ID); 其中: SERVICE_CLIENT_ID是之前设置的服务帐户客户端ID。 例如:'abcd123456780.apps.googleusercontent.com'
创建新的日历服务对象: $ cal = new Google_CalendarService($ client);
可以为日历检索设置几个选项我在下面的代码中设置了一些选项,它们在api文档中定义。 $ optEvents = array('timeMax'=> $ TimeMax,'timeMin'=> $ TimeMin,'orderBy'=>'startTime','singleEvents'=>'True');
获取日历事件的列表,并通过上述选项的号召:通过返回的事件列表
$calEvents = $cal->events->listEvents('primary', $optEvents);
循环,列表分页,所以我们需要获取页面直到列表耗尽:
foreach ($calEvents->getItems() as $event) {
// get event data
$Summary = $event->getSummary();
$description = $event->getDescription();
$pageToken = $calEvents->getNextPageToken();
if ($pageToken) { // if we got a token the fetch the next page of events.
$optParams = array('pageToken' => $pageToken);
$calEvents = $cal->events->listEvents('primary', $optParams);
} else {
break;
}
}
获得访问令牌:
$ myAccessToken = $ client-> getAccessToken();
将访问令牌下次保存到永久存储区。
你设法解决它?我在这里拉我的头发做类似的事情,但与谷歌驱动器! – wachichornia 2013-12-05 22:39:53
不幸的是我没有。我努力在他们的文档中坚持Google的建议/规则,但最终将配置成Web服务器应用程序。作为服务帐户太痛苦了。它已经跑了至少8个月,我没有问题。 – djibouti33 2013-12-06 00:16:19
我解决了它,我的答案在这里: http://stackoverflow.com/questions/27609138/how-to-insert-video-youtube-api-v3-through-service-account-with-ruby/27620954#27620954 享受! – dangalg 2014-12-23 13:13:45