我注意到,Google Analytics Admin和Google Analytics Data的所有node.js代码示例都假定一个服务帐户和一个JSON文件或GOOGLE_APPLICATION_CREDENTIALS
环境变量。
例如:
const analyticsAdmin = require('@google-analytics/admin');
async function main() {
// Instantiates a client using default credentials.
// TODO(developer): uncomment and use the following line in order to
// manually set the path to the service account JSON file instead of
// using the value from the GOOGLE_APPLICATION_CREDENTIALS environment
// variable.
// const analyticsAdminClient = new analyticsAdmin.AnalyticsAdminServiceClient(
// {keyFilename: "your_key_json_file_path"});
const analyticsAdminClient = new analyticsAdmin.AnalyticsAdminServiceClient();
const [accounts] = await analyticsAdminClient.listAccounts();
console.log('Accounts:');
accounts.forEach(account => {
console.log(account);
});
}
我正在构建一个允许用户使用自己的帐户访问自己的数据的服务,因此使用服务帐户是不合适的。
我最初认为我可能能够使用google-api-node-client
-- Auth将通过构建一个URL来重定向和执行oauth舞蹈来处理...
使用google-api-nodejs-client
:
const {google} = require('googleapis');
const oauth2Client = new google.auth.OAuth2(
YOUR_CLIENT_ID,
YOUR_CLIENT_SECRET,
YOUR_REDIRECT_URL
);
// generate a url that asks permissions for Google Analytics scopes
const scopes = [
"https://www.googleapis.com/auth/analytics", // View and manage your Google Analytics data
"https://www.googleapis.com/auth/analytics.readonly", // View your Google Analytics data
];
const url = oauth2Client.generateAuthUrl({
access_type: 'offline',
scope: scopes
});
// redirect to `url` in a popup for the oauth dance
auth之后,Google重定向到GET /oauthcallback?code={authorizationCode}
,因此我们收集代码并获取令牌以执行后续启用OAuth2的调用:
// This will provide an object with the access_token and refresh_token.
// Save these somewhere safe so they can be used at a later time.
const {tokens} = await oauth2Client.getToken(code)
oauth2Client.setCredentials(tokens);
// of course we need to handle the refresh token too
这一切工作正常,但是是否可以将OAuth2客户机从google-api-node-client
代码插入到google-analytics-admin
代码中?
👉看起来我需要用我已经检索到的访问令牌调用analyticsAdmin.AnalyticsAdminServiceClient()
-但如何调用呢?
2条答案
按热度按时间mwg9r5ms1#
这里简单的答案是不要麻烦与谷歌分析管理和谷歌分析数据的Node.js库.
省去中间人,自己构建一个非常简单的直接查询REST API的 Package 器,这样你就可以看到整个过程,任何错误都是你自己造成的。
如果您正确处理了刷新标记,那么这可能就是您所需要的全部内容:
pjngdqdw2#
我使用Python,但方法可能类似,你应该基于获得的令牌创建一个Credentials对象:
然后使用它创建客户端: