Служба Google Analytics для службы google-auth-library-nodejs - PullRequest
0 голосов
/ 30 августа 2018

Обращаясь к этому документу Веб-токены JSON , я попытался получить доступ к API отчетов Google Analytics, пытаясь сначала выполнить проверку подлинности «Учетные данные приложения по умолчанию», а затем аутентификацию «Веб-токены JSON».
Каждый раз, когда я получаю сообщение об ошибке Request had insufficient authentication scopes.

У меня нет проблем с доступом к данным через Query Explorer , и я действительно не хочу использовать OAuth2, так как я только начну получать доступ к своей учетной записи. Перечисленные ниже области были получены из "Google Analytics API v3" в Области Google .

Учитывая сообщение об ошибке, я пробовал различные итерации других областей, особенно те, которые относятся к "Analytics Reporting API, v4."
Примечание : электронное письмо, указанное в ключе учетной записи службы из консоли разработчиков Google, было добавлено ко всем разрешениям (учетная запись, свойство, представление) консоли администратора Google Analytics. Я также попробовал нечто подобное, как описано в « Сервис <-> Сервис аутентификации ».

Попытка «Учетные данные приложения по умолчанию» (установка пути к ключу учетной записи службы в .env):

const {auth} = require('google-auth-library');
async function main() {
  const client = await auth.getClient({
    scopes: [
      'https://www.googleapis.com/auth/analytics',
      'https://www.googleapis.com/auth/analytics.edit',
      'https://www.googleapis.com/auth/analytics.manage.users',
      'https://www.googleapis.com/auth/analytics.manage.users.readonly',
      'https://www.googleapis.com/auth/analytics.provision',
      'https://www.googleapis.com/auth/analytics.readonly',
      'https://www.googleapis.com/auth/analytics.user.deletion'
    ]
  });
  const projectId = await auth.getProjectId();
  const url = `https://www.googleapis.com/dns/v1/projects/${projectId}`;
  const res = await client.request({ url });
  console.log(res.data);
}
main().catch(console.error);

Попытка "JSON Web Tokens:"

const {JWT} = require('google-auth-library');
const keys = require('../service-account-credentials.json');

async function main() {
  console.log('keys.client_email: ', keys.client_email)
  console.log('keys.private_key: ', keys.private_key)
  const client = new JWT(
    keys.client_email,
    null,
    keys.private_key,
    [
    'https://www.googleapis.com/auth/analytics',
    'https://www.googleapis.com/auth/analytics.edit',
    'https://www.googleapis.com/auth/analytics.manage.users',
    'https://www.googleapis.com/auth/analytics.manage.users.readonly',
    'https://www.googleapis.com/auth/analytics.provision',
    'https://www.googleapis.com/auth/analytics.readonly',
    'https://www.googleapis.com/auth/analytics.user.deletion'
    ],
  );
  const url = `https://www.googleapis.com/dns/v1/projects/${keys.project_id}`;
  const res = await client.request({url});
  console.log(res.data);
  const tokenInfo = await client.getTokenInfo(client.credentials.access_token);
  console.log(tokenInfo);
}

main().catch(console.error);

1 Ответ

0 голосов
/ 30 августа 2018

URL-адрес, указанный в базовом примере, должен быть заменен аналитическим запросом, например, из "API Query URI" .

Например, если мне нужно количество просмотров страниц, я бы заменил URL, использованный во фрагменте вопроса:

https://www.googleapis.com/dns/v1/projects/${projectId}

с указанным в Query Explorer:

https://www.googleapis.com/analytics/v3/data/ga?ids=ga%${analyticsViewOrProfileId}&start-date=30daysAgo&end-date=2018-08-28&metrics=ga%3Apageviews&dimensions=ga%3ApagePath&sort=-ga%3Apageviews

Полученный (работающий) код выглядит следующим образом:

const {auth} = require('google-auth-library');

async function main() {
  const client = await auth.getClient({
    scopes: [
      'https://www.googleapis.com/auth/analytics',
      'https://www.googleapis.com/auth/analytics.readonly'
    ]
  });
  const viewId = <VIEW ID FROM ANALYTICS CONSOLE>
  const url = `https://www.googleapis.com/analytics/v3/data/ga?ids=ga%3A${viewId}&start-date=30daysAgo&end-date=2018-08-28&metrics=ga%3Apageviews&dimensions=ga%3ApagePath&sort=-ga%3Apageviews`;
  const res = await client.request({ url });
  console.log(res.data);
}
main().catch(console.error);
...