我的最终目标是能够从Google's API检索地点详情。
我需要以Service Account的身份执行此操作,因为这会在我的服务器上作为后台任务启动。服务帐户需要to exchange a JWT(JSON Web Token)来访问access_token。我终于得到了工作,并收到了access_token。呼。
然而,现在我不知道如何处理这个access_token。
Place Details API说明key
参数是必需的,但我没有密钥。只是一个access_token。使用key
的该值或将参数名称更改为access_token
不起作用。
最终我需要能够点击这样的网址:
https://maps.googleapis.com/maps/api/place/details/json?reference={MY_REFERENCE}&sensor=false&key={MY_ACCESS_TOKEN}
如何使用我的访问令牌向Google Place Detail API发出请求?
更新1
仍然没有成功,但我想我会发布我的请求的详细信息,以防我提交给Google的内容出现问题。
我正在使用JWT Ruby library,以下是我的声明集的值:
{
:iss => "54821520045-c8k5dhrjmiotbi9ni0salgf0f4iq5669@developer.gserviceaccount.com",
:scope => "https://www.googleapis.com/auth/places",
:aud => "https://accounts.google.com/o/oauth2/token",
:exp => (Time.now + 3600),
:iat => Time.now.to_i
}
看起来很明智。
答案 0 :(得分:0)
创建服务帐户及其凭据
您需要创建服务帐户及其凭据。在此过程中,您需要收集三个项目,这些项目稍后将用于Google Apps域范围的授权,并在您的代码中使用您的服务帐户进行授权。这三项是您的服务帐户:
•客户ID。
•私钥文件。
•电子邮件地址。
为此,首先需要启用Google Calendar API的Google API控制台项目。请按照以下步骤操作:
您现在可以创建服务帐户及其凭据。请按照以下步骤操作:
转到API访问部分。
点击创建OAuth 2.0客户端ID ...
输入产品名称,指定可选徽标,然后单击“下一步”。
在询问您的应用程序类型时选择服务帐户,然后单击创建客户端ID。
此时,您将看到一个对话框,允许您将私钥下载为文件(参见下图)。确保安全下载并保存该文件,因为无法再从API控制台下载它。
下载文件并关闭对话框后,您将能够获得服务帐户的电子邮件地址和客户端ID。
您现在应该已经收集了服务帐户的私钥文件,客户ID和电子邮件地址。您已准备好将域范围的权限委派给您的服务帐户。
将域范围的权限委派给您的服务帐户
您现在创建的服务帐户需要被授予访问您要访问的Google Apps域的用户数据的权限。以下任务必须由Google Apps域管理员执行:
转到Google Apps域的控制面板。该网址应如下所示:www.google.com/a/cpanel/mydomain.com
转到高级工具...>管理第三方OAuth客户端访问权限。
在客户名称字段中输入服务帐户的客户ID。
在“一个或多个API范围”字段中,输入应授予您的应用程序访问权限的范围列表(请参见下图)。例如,如果您需要在全域范围内访问Google Calendar API,请输入:www.googleapis.com/auth/calendar.readonly
单击“授权”按钮。
您的服务帐户现在可以为您域中的所有用户提供对Google Calendar API的域范围内访问权限,也可能包含您在上述示例中列出的其他API。
以下是使用服务帐户访问PHP中的日历数据的说明
服务帐户访问用户日历的一般过程如下:
•创建Google客户端
•设置客户端应用程序名称
•如果您已有Access令牌,请检查它是否已过期
•如果Access令牌已过期,则设置JWT断言凭据并获取新令牌
•设置客户端ID
•根据Google客户端
创建新的日历服务对象•检索日历事件
注意:您必须保存Access令牌,并且只有在它即将到期时才刷新它,否则您将收到一个错误,表明您已经超过了用户在一段时间内访问令牌数量的限制。
使用的Google PHP客户端库函数说明:
客户端对象可以访问许多参数和方法,通过客户端对象访问以下所有内容:
创建一个新的客户端对象:
$client = new Google_Client();
设置客户端应用程序名称:
$client->setApplicationName(“My Calendar App”);
如果您已经保存了一个客户端访问令牌,请设置它:
$client->setAccessToken($myAccessToken);
检查Access令牌是否已过期,有30秒缓冲区,因此如果令牌设置为在30秒或更短时间内到期,则返回true。 Access令牌的生命周期为一小时。 Access令牌实际上是一个JSON对象,它包含创建时间,以秒为单位的生命周期以及令牌本身。因此,没有给Google打电话,因为令牌在本地拥有所有信息以确定它何时到期。
$client->isAccessTokenExpired();
如果令牌已过期或您从未检索过令牌,那么您需要设置断言凭据才能获得访问令牌:
$ client-> 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:’abcd1234567890@developer.gserviceaccount.com’
CALENDAR_SCOPE是Google管理界面中的范围设置。
For example: ‘https://www.googleapis.com/auth/calendar.readonly’
$ key是在Google Apps控制台中创建项目时下载的密钥文件的内容。 $ email_add是您要为其检索日历数据的用户的Google电子邮件地址。
设置客户端ID: $客户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&# 39;,' 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 = $客户端 - > getAccessToken();
下次将访问令牌保存到您的永久存储区。
答案 1 :(得分:0)
语言并不重要php,ruby,.net,java的过程是一样的。 api的控制台将Places API显示为支持服务帐户,因此应该可以访问它。
就使用令牌而言,请查看https://code.google.com/p/google-api-ruby-client/代码,因为代码存储库中明确定义了用法。如果访问令牌用于服务帐户或单个用户,则使用令牌的过程相同,则没有任何区别。请参阅以下链接中标题为“致电Google API”的部分:https://developers.google.com/accounts/docs/OAuth2InstalledApp
访问令牌与http请求一起在http授权标头中发送。对于日历请求,它看起来如下所示: GET / calendar / v3 / calendars / primary HTTP / 1.1 主持人:www.googleapis.com 内容长度:0 授权:OAuth ya29.AHES6ZTY56eJ0LLHz3U7wc-AgoKz0CXg6OSU7wQA