如何使用node.js中的OAuth2客户端调用谷歌分析管理API(用于GA4)?

f8rj6qna  于 2023-01-12  发布在  Node.js
关注(0)|答案(2)|浏览(184)

我注意到,Google Analytics AdminGoogle 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()-但如何调用呢?

mwg9r5ms

mwg9r5ms1#

这里简单的答案是不要麻烦与谷歌分析管理和谷歌分析数据的Node.js库.
省去中间人,自己构建一个非常简单的直接查询REST API的 Package 器,这样你就可以看到整个过程,任何错误都是你自己造成的。
如果您正确处理了刷新标记,那么这可能就是您所需要的全部内容:

const getResponse = async (url, accessToken, options = {}) => {
  const response = await fetch(url, {
    ...options,
    headers: {
      Authorization: `Bearer ${accessToken}`,
    },
  });
  return response;
};
pjngdqdw

pjngdqdw2#

我使用Python,但方法可能类似,你应该基于获得的令牌创建一个Credentials对象:

credentials = google.auth.credentials.Credentials(token=YOUR_TOKEN)

然后使用它创建客户端:

from google.analytics.admin import AnalyticsAdminServiceClient

client = AnalyticsAdminServiceClient(credentials=credentials)
client.list_account_summaries()

相关问题