gpt4 book ai didi

Javascript:如何从网络应用程序使用 Google API 访问*特定用户*数据?

转载 作者:行者123 更新时间:2023-12-03 06:45:32 25 4
gpt4 key购买 nike

我对从浏览器访问 Google API 存在“哲学”疑问(在我的例子中是 Google Calendar API,但这并不重要)。

我正在为一家小酒店编写一个不错的(angular.js)网络应用程序;它带有预订表格。
我想将预订表单链接到酒店的 Google 日历帐户,以便能够将已预订的日期显示为不可用,以及在哪里编写最终的预订。

我的疑问是:从浏览器访问Google API需要oAuth2。美好的。但我不希望网络应用程序用户允许我访问他自己的帐户,但我希望能够访问我知道其 clientId 的酒店帐户。 ..

我确信我很困惑,请给我一些建议......:-(

最佳答案

我有一个使用类似场景但使用 Google Analytics 的应用程序,所以我所做的是设置一个 Google 服务帐户,然后下载并使用 php auth library设置一个端点来处理身份验证并为我提供我从应用程序请求的数据。

相关代码是这样的:

google-data.php

<?php

require_once '/path-to/google/src/Google/autoload.php';

$veiwId = $_GET['viewid']; // Sent from the app
$client_email = 'YOUR_SERVICE_ACCOUNT_EMAIL_HERE'; //looks something like - someproject@api-project-69734519371.iam.gserviceaccount.com
$private_key = file_get_contents('/path-to/APIProject-c5bfsdf45d54d.p12'); // downloaded from Google dev console
// Define the service you want to use (Calendar, Analytics, etc.)
$scopes = array(Google_Service_Analytics::ANALYTICS_READONLY);
$credentials = new Google_Auth_AssertionCredentials(
$client_email,
$scopes,
$private_key
);

$client = new Google_Client();
$client->setAssertionCredentials($credentials);
// Grab token if it's set
if (isset($_SESSION['service_token'])) {
$client->setAccessToken($_SESSION['service_token']);
}
// Refresh if expired
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion();
}
// Pin to Session
$_SESSION['service_token'] = $client->getAccessToken();

// Here is where you will start using the service, such as Google Calendar, etc.
$service = new Google_Service_Analytics($client);
// Adding Dimensions
$params = array('dimensions' => 'ga:medium');
// requesting the data (methods will depend on the service)
$data = $service->data_ga->get(
// params from get request
// request logic, etc.
);
// Return to client as JSON
echo json_encode($data);
?>

您显然不需要使用 PHP 库,因为有很多 others available ,但概念保持不变。我的用例非常简单,因此 PHP 是首选。

通过该设置,我可以从我的 Angular 应用程序发送一个简单的获取数据请求:

app.factory('DataLoader', function( $http, $log ) {

return {
getGoogleData: function(toDate, fromDate, viewId) {
// Pass in some dates and a profile id
return $http.get('path-to/google-data.php?todate='+toDate+'&fromdate='+fromDate+'&viewid='+viewId);
}

}
})

希望这可以帮助您了解如何允许您的应用与 Google api 交互,而不是让您的最终用户与 api 交互。

关于Javascript:如何从网络应用程序使用 Google API 访问*特定用户*数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37752017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com