تفاعل مع Google Analytics API باستخدام Node.js

تعرف على كيفية ربط تطبيق Node.js بواجهة برمجة تطبيقات Google Analytics ، باستخدام المسؤولgoogleapisصفقة. سنستخدم JSON Web Token ونرى بعض الأمثلة

ملاحظة: يحظر uBlock Origin الصور الموجودة في هذا المنشور ، لأن لديهم ملفanalyticsكلمة في المسار. لذا تأكد من تعطيله لهذه الصفحة لمشاهدة الصور 🖼

في هذا المنشور ، سأعرض بعض الأمثلة على استخدام Google Analytics API معNode.js.

تقدم Google حزمة npm رائعة:googleapis. سنستخدم ذلك باعتباره اللبنة الأساسية لتفاعل API الخاص بنا.

المصادقة جزء كبير من التفاعل مع API. تحقق من هذا المنصب علىكيفية المصادقة على Google APIs. في هذه المقالة سأفترض أنك قرأت ذلك ، وأنت تعرف كيفية أداء ملفJWTالمصادقة.

متغيرات البيئة

بمجرد تنزيل ملفجسونملف رئيسي من Google ، ضع ملفclient_emailوprivate_keyالقيم كمتغيرات البيئة ، بحيث يمكن الوصول إليها من خلال

  • process.env.CLIENT_EMAIL
  • process.env.PRIVATE_KEY

أضف المستخدم إلى Google Analytics

نظرًا لأننا نستخدم Service to Service API في هذه الأمثلة ، فأنت بحاجة إلى إضافةclient_emailقيمة لملفك الشخصي في Google Analytics. انتقل إلى لوحة المسؤول وانقر فوقإدارةالمستخدم، سواء على الممتلكات أو على العرض

Google Analytics Settings

وأضف البريد الإلكتروني الذي وجدته في ملفclient_emailمفتاح في ملف JSON:

Add a new user

قم باستيراد مكتبة Google

const { google } = require('googleapis')

تذكر{}حول الgoogleكائن ، لأننا بحاجة إلى تدميره منgoogleapisمكتبة (وإلا فسنحتاج إلى الاتصالgoogle.googleوهو قبيح)

حدد النطاق

يحدد هذا الخط النطاق:

const scopes = 'https://www.googleapis.com/auth/analytics.readonly'

تحدد Google Analytics API عدة نطاقات:

  • https://www.googleapis.com/auth/analytics.readonlyلعرض البيانات
  • 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لإنشاء حسابات Google Analytics جديدة

يجب عليك دائمًا اختيار النطاق الذي يمنح أقل قدر من القوة.

نظرًا لأننا نريد عرض التقارير الآن فقط ، فنحن نختارhttps://www.googleapis.com/auth/analytics.readonlyبدلا منhttps://www.googleapis.com/auth/analytics.

واجهة برمجة تطبيقات إعداد التقارير في Google Analytics

ملاحظة: يمكنك أيضًا استخدام ملفGoogle Analytics Reporting APIللوصول إلى تلك الأذونات.

إنها نسخة مختصرة من Google Analytics API ، تقدم النطاق فقطhttps://www.googleapis.com/auth/analytics.readonlyوhttps://www.googleapis.com/auth/analytics.

تختلف واجهة برمجة التطبيقات قليلاً عن واجهة برمجة تطبيقات Analytics ولكن من حيث كيفية استخدامها والطرق التي تعرضها ، لذلك سنتخطى ذلك.

قم بإنشاء JWT

const jwt = new google.auth.JWT(process.env.CLIENT_EMAIL, null, process.env.PRIVATE_KEY, scopes)

قم بإجراء طلب

تحقق من هذا الرمز:

const { google } = require('googleapis')
const scopes = 'https://www.googleapis.com/auth/analytics.readonly'
const jwt = new google.auth.JWT(process.env.CLIENT_EMAIL, null, process.env.PRIVATE_KEY, scopes)

const view_id = ‘XXXXX’

async function getData() { const response = await jwt.authorize() const result = await google.analytics(‘v3’).data.ga.get({ ‘auth’: jwt, ‘ids’: ‘ga:’ + view_id, ‘start-date’: ‘30daysAgo’, ‘end-date’: ‘today’, ‘metrics’: ‘ga:pageviews’ })

console.dir(result) }

getData()

ينفذ طلبًا إلى Google Analytics API لجلب ملفعدد مشاهدات الصفحة في آخر 30 يومًا.

view_idيحتوي على معرف ملفرأي. ليس رمز Google Analytics الخاص بك ، ولكن معرّف الملف الشخصي. يمكنك الحصول على ذلك من لوحة الإدارة ، بالنقر فوقعرض الإعداداتفي العرض الذي تريد الوصول إليه:

The view id

تقوم بتمرير هذا الكائن إلى الطلب:

{
  'auth': jwt,
  'ids': 'ga:' + view_id,
  'start-date': '30daysAgo',
  'end-date': 'today',
  'metrics': 'ga:pageviews'
}

بالإضافة إلى الكائن jwt ومعرّف العرض ، لدينا 3 معلمات.

  • metrics: يقول APIما نريد الحصول عليه
  • start-date: يحدد تاريخ البدء للتقرير
  • end-date: يحدد تاريخ انتهاء التقرير

هذا الطلب بسيط للغاية ويعرض عدد مشاهدات الصفحة التي حدثت في الفترة الزمنية المحددة.

ستكون النتيجة التي تم إرجاعها مثل:

{
  status: 200,
  statusText: 'OK',
  headers: {...},
  config: {...},
  request: {...},
  data: {
    kind: 'analytics#gaData',
    id: 'https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXXXXXXXXXXXXXXXX&metrics=ga:pageviews&start-date=30daysAgo&end-date=today',
    query:  {
      'start-date': '30daysAgo',
      'end-date': 'today',
      ids: 'ga:XXXXXXXXXXXXXXXXXX',
      metrics: [ 'ga:pageviews' ],
      'start-index': 1,
      'max-results': 1000
    },
    itemsPerPage: 1000,
    totalResults: 1,
    selfLink: 'https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXXXXXXXXXXXXXXXX&metrics=ga:pageviews&start-date=30daysAgo&end-date=today',
    profileInfo: {
      profileId: 'XXXXXXXXXXXXXXXXXX',
      accountId: 'XXXXXXXXXXXXXXXXXX',
      webPropertyId: 'UA-XXXXXXXXXXX--XX',
      internalWebPropertyId: 'XXXXXXXXXXXXXXXXXX',
      profileName: 'XXXXXXXXXXXXXXXXXX',
      tableId: 'ga:XXXXXXXXXXXXXXXXXX'
    },
    containsSampledData: false,
    columnHeaders: [
      {
        name: 'ga:pageviews',
        columnType: 'METRIC',
        dataType: 'INTEGER'
      }
    ],
    totalsForAllResults: { 'ga:pageviews': '3000' },
    rows: [ [ '114426' ] ] }
}

باستخدام هذا يمكنك الوصول إلى عدد مشاهدات الصفحةresponse.data.rows[0][0].

المقاييس

كان هذا المثال بسيطًا. لقد طلبنا هذه البيانات فقط:

{
  'start-date': '30daysAgo',
  'end-date': 'today',
  'metrics': 'ga:pageviews'
}

هناك الكثير من البيانات التي يمكننا استخدامها.

المستكشف الأبعاد والمقاييسهي أداة رائعة لاكتشاف جميع الخيارات.

هذه المصطلحات هما مفهومان في Google Analytics.

أبعادهي سمات ، مثل المدينة أو البلد أو الصفحة أو مسار الإحالة أو مدة الجلسة.

المقاييسهي قياسات كمية ، مثل عدد المستخدمين أو عدد الجلسات.

بعض الأمثلة على المقاييس:

  • الحصول على مشاهدات الصفحةga:pageviews
  • الحصول على المستخدمين الفريدينga:users
  • الحصول على الجلساتga:sessions
  • الحصول على عمليات البحث العضويةga:organicSearches

دعونا نبني بعض الأمثلة مع هذه المقاييس.

الكود المشترك

إليك الكود الشائع المستخدم في الأمثلة أدناه. ضع المقتطف في ملفauthorize()أتصل مرة أخرى.

'use strict'

const { google } = require(‘googleapis’)

const scopes = https://www.googleapis.com/auth/analytics.readonly const jwt = new google.auth.JWT(process.env.CLIENT_EMAIL, null, process.env.PRIVATE_KEY, scopes)

async function getData() { const defaults = { ‘auth’: jwt, ‘ids’: ‘ga:’ + process.env.VIEW_ID, } const response = await jwt.authorize()

/* custom code goes here, using response */ }

getData()

سيتم إعادة استخدام كائن الإعدادات الافتراضية في الأمثلة باستخدامانتشار المشغل، وهي طريقة سهلة للتعامل مع القيم الافتراضية في JavaScript.

احصل على عدد جلسات اليوم

const result = await google.analytics('v3').data.ga.get({
  ...defaults,
  'start-date': 'today',
  'end-date': 'today',
  'metrics': 'ga:sessions'
})

console.dir(result.data.rows[0][0])

احصل على عدد جلسات اليوم القادمة من مصادر عضوية (محركات البحث)

أضف الfiltersمنشأه:

const result = await google.analytics('v3').data.ga.get({
  ...defaults,
  'start-date': 'today',
  'end-date': 'today',
  'metrics': 'ga:sessions',
  'filters': 'ga:medium==organic',
})

احصل على عدد جلسات أمس

const result = await google.analytics('v3').data.ga.get({
  ...defaults,
  'start-date': 'yesterday',
  'end-date': 'yesterday',
  'metrics': 'ga:sessions'
})

console.dir(result.data.rows[0][0])

احصل على عدد الجلسات في آخر 30 يومًا

const result = await google.analytics('v3').data.ga.get({
  ...defaults,
  'start-date': '30daysAgo',
  'end-date': 'today',
  'metrics': 'ga:sessions'
})

console.dir(result.data.rows[0][0])

احصل على المتصفحات المستخدمة في آخر 30 يومًا

const result = await google.analytics('v3').data.ga.get({
  ...defaults,
  'start-date': '30daysAgo',
  'end-date': 'today',
  'dimensions': 'ga:browser',
  'metrics': 'ga:sessions'
})

console.dir(result.data.rows.sort((a, b) => b[1] - a[1]))

[
[ ‘Chrome’, ‘994’ ],
[ ‘Safari’, ‘548’ ],
[ ‘Firefox’, ‘442’ ],
[ ‘Android Webview’, ‘113’ ],
[ ‘Opera’, ‘56’ ],
[ ‘Safari (in-app)’, ‘41’ ],
[ ‘Edge’, ‘36’ ],
[ ‘Internet Explorer’, ‘4’ ]
]

احصل على عدد الزوار الذين يستخدمون Chrome

const result = await google.analytics('v3').data.ga.get({
  ...defaults,
  'start-date': '30daysAgo',
  'end-date': 'today',
  'dimensions': 'ga:browser',
  'metrics': 'ga:sessions',
  'filters': 'ga:browser==Chrome',
})

console.dir(result.data.rows[0][1])

احصل على الجلسات حسب مصدر حركة المرور

const result = await google.analytics('v3').data.ga.get({
  ...defaults,
  'start-date': '30daysAgo',
  'end-date': 'today',
  'dimensions': 'ga:source',
  'metrics': 'ga:sessions'
})

console.dir(result.data.rows.sort((a, b) => b[1] - a[1]))

[
[ ‘google’, ‘1343’ ],
[ ‘(direct)’, ‘731’ ],
[ medium.com, ‘624’ ],
[ t.co, ‘987’ ],
[ reddit.com, ‘65’ ]
]

Google Analytics Real Time API

إن Google Analytics Real Time API هي [مايو 2018] في إصدار تجريبي خاص ، ولا يمكن الوصول إليها بشكل عام.تحقق من هذه الصفحة.

تحميل مجانيكتيب Node.js


المزيد من دروس العقدة: