Core Reporting API - دليل المطوِّر

يوضّح هذا المستند كيفية استخدام Core Reporting API للوصول إلى بيانات "إحصاءات Google".

مقدمة

توفر واجهة برمجة التطبيقات الأساسية لإعداد التقارير إمكانية الوصول إلى البيانات الجدولية في التقارير العادية والمخصَّصة في "إحصاءات Google". للوصول إلى البيانات، عليك إنشاء طلب بحث يحدّد: الملف الشخصي (الملف الشخصي)، وتاريخا البدء والانتهاء، والسمات والمقاييس التي تشكّل عناوين الأعمدة في الجدول. يتم إرسال طلب البحث هذا إلى Core Reporting API، وتعرِض واجهة برمجة التطبيقات الأساسية لإعداد التقارير جميع البيانات في شكل جدول.

إذا كنت مستخدمًا جديدًا لواجهة برمجة التطبيقات، يُرجى الاطّلاع على نظرة عامة على واجهة برمجة التطبيقات الأساسية لإعداد التقارير للاطّلاع على مقدمة حول الغرض من هذه الواجهة والبيانات التي توفّرها.

قبل البدء

يعرض هذا الدليل كيفية الوصول إلى واجهة برمجة التطبيقات Google Analytics API باستخدام لغات البرمجة Java وPython وPHP وJavaScript.

  • اطّلِع على صفحة مكتبات العملاء للحصول على قائمة كاملة بمكتبات العملاء الخاصة بلغة البرمجة التي تعمل مع واجهة برمجة التطبيقات.
  • اقرأ الدليل المرجعي للوصول إلى واجهة برمجة التطبيقات بدون مكتبة برامج.

توفِّر كل مكتبة عملاء عنصرًا واحدًا لخدمة الإحصاءات للوصول إلى جميع بيانات واجهة برمجة التطبيقات الأساسية لإعداد التقارير. لإنشاء عنصر الخدمة، يجب إجراء الخطوات التالية بشكل عام:

  1. سجِّل تطبيقك في وحدة التحكم في واجهة Google API.
  2. السماح بالوصول إلى بيانات "إحصاءات Google"
  3. أنشئ عنصر خدمة على "إحصاءات Google".

في حال عدم إكمال هذه الخطوات، يُرجى التوقف عن القراءة وقراءة الدليل التعليمي لواجهة برمجة تطبيقات "إحصاءات Google". يرشدك هذا الدليل التعليمي خلال الخطوات الأوّلية لإنشاء تطبيق واجهة برمجة التطبيقات لخدمة "إحصاءات Google". وبعد إكمالها، ستتمكن من استخدام هذا الدليل لتنفيذ مهام على أرض الواقع.

يحتوي مقتطف الرمز التالي على متغيّر لتخزين عنصر خدمة معتمد.

Java

Analytics analytics = // Read Hello Analytics Tutorial for details.

Python

analytics = # Read Hello Analytics Tutorial for details.

PHP

$client = // Read Hello Analytics Tutorial for details.

// Return results as objects.
$client->setUseObjects(true);

$analytics = new apiAnalyticsService($client);

ستعرض مكتبة PHP جميع نتائج واجهة برمجة التطبيقات كمصفوفة ارتباطية. لعرض كائنات حقيقية بدلاً من ذلك، يمكنك استدعاء طريقة useObject الخاصة بالعميل، كما هو موضّح في المثال أعلاه.

JavaScript

<script src="https://apis.google.com/js/client.js?onload=loadLib"</script>
<script>
function loadLib() {
  // Handle all the authorization work.
  // Read Hello Analytics Tutorial for details.
  gapi.client.load('analytics', 'v3', makeApiCall);
}
</script>

تعمل علامة النص البرمجي الأولى على تحميل مكتبة JavaScript API في Google. وبعد التحميل، يتم تنفيذ loadLib لتحميل فئة خدمة الإحصاءات. بعد اكتمال العملية، من المفترض أن يكون العنصر gapi.client.analytics متوفرًا في DOM وأن يكون جاهزًا للاستخدام في طلب البحث في Core Reporting API.

بعد إنشاء عنصر خدمة إحصاءات، سيصبح بإمكانك إرسال طلبات إلى Core Reporting API.

ملاحظة: يمكن أيضًا استخدام عنصر خدمة الإحصاءات للوصول إلى Management API.

نظرة عامة

سيتّبع التطبيق الذي يستخدم Core Reporting API خطوتَين بشكل عام:

  • طلب البحث في Core Reporting API
  • العمل على نتائج واجهة برمجة التطبيقات

لنلقِ نظرة على الخطوتَين.

طلب البحث في Core Reporting API

إنشاء طلب بحث في Core Reporting API

يحتوي عنصر خدمة الإحصاءات على طريقة لإنشاء طلب بحث في Core Reporting API.

يحتوي كل طلب بحث في Core Reporting API على مجموعة من المَعلمات التي تحدّد البيانات المطلوب عرضها.

من أهم معلَمات طلب البحث معلمة ids أو رقم تعريف الجدول. تحدِّد هذه المعلَمة الملف الشخصي (الملف الشخصي) في "إحصاءات Google" الذي تريد استرداد البيانات منه. وتكون القيمة بالتنسيق ga:xxx حيث يكون xxx هو رقم تعريف الملف الشخصي.

Java

Get apiQuery = analytics.data().ga()
    .get(tableId,                  // Table Id.
        "2012-01-01",              // Start date.
        "2012-01-15",              // End date.
        "ga:sessions")               // Metrics.
    .setDimensions("ga:source,ga:keyword")
    .setSort("-ga:sessions,ga:source")
    .setFilters("ga:medium==organic")
    .setMaxResults(25);

Python

api_query = service.data().ga().get(
    ids=TABLE_ID,
    start_date='2012-01-01',
    end_date='2012-01-15',
    metrics='ga:sessions',
    dimensions='ga:source,ga:keyword',
    sort='-ga:sessions,ga:source',
    filters='ga:medium==organic',
    max_results='25')

PHP

private function queryCoreReportingApi() {
  $optParams = array(
      'dimensions' => 'ga:source,ga:keyword',
      'sort' => '-ga:sessions,ga:source',
      'filters' => 'ga:medium==organic',
      'max-results' => '25');

  return $service->data_ga->get(
      TABLE_ID,
      '2010-01-01',
      '2010-01-15',
      'ga:sessions',
      $optParams);
}

في هذه المكتبة، لا تنشئ طريقة get طلب بحث Core Reporting API فحسب، بل تنفّذ أيضًا الطلب المُرسَل إلى واجهة برمجة التطبيقات.

JavaScript

function makeApiCall() {
  var apiQuery = gapi.client.analytics.data.ga.get({
    'ids': TABLE_ID,
    'start-date': '2010-01-01',
    'end-date': '2010-01-15',
    'metrics': 'ga:sessions',
    'dimensions': 'ga:source,ga:keyword',
    'sort': '-ga:sessions,ga:source',
    'filters': 'ga:medium==organic',
    'max-results': 25
  });
  // ...
}

في هذا المثال، يتم استدعاء الدالة makeApiCall بعد تحميل مكتبة برامج JavaScript. في الداخل، تنشئ الدالة طلب بحث جديدًا لواجهة Google Analytics API وتخزِّن العنصر في المتغيّر apiQuery.

يمكن العثور على قائمة كاملة بجميع معلَمات طلب البحث والإجراءات التي تؤديها في الدليل المرجعي لواجهة برمجة التطبيقات الأساسية لإعداد التقارير. إضافةً إلى ذلك، تتيح لك مَعلمات السمات والمقاييس تحديد البيانات المطلوب استردادها من "إحصاءات Google". يمكن العثور على قائمة كاملة في صفحة مرجع السمات والمقاييس.

تقديم طلب للحصول على بيانات Core Reporting API

بعد تحديد طلب بحث، يمكنك استدعاء طريقة execute لإرسال الطلب إلى خوادم "إحصاءات Google".

Java

try {
  apiQuery.execute();
  // Success. Do something cool!

} catch (GoogleJsonResponseException e) {
  // Catch API specific errors.
  handleApiError(e);

} catch (IOException e) {
  // Catch general parsing network errors.
  e.printStackTrace();
}

إذا كنت تفضّل الوصول إلى استجابة واجهة برمجة التطبيقات الأولية بدلاً من ذلك، استخدِم طريقة executeUnparsed():

HttpResponse response = apiQuery.executeUnparsed();

Python

try:
  results = get_api_query(service).execute()
  print_results(results)

except TypeError, error:
  # Handle errors in constructing a query.
  print ('There was an error in constructing your query : %s' % error)

except HttpError, error:
  # Handle API service errors.
  print ('There was an API error : %s : %s' %
         (error.resp.status, error._get_reason()))

PHP

  try {
    $results = queryCoreReportingApi();
    // Success. Do something cool!

  } catch (apiServiceException $e) {
    // Handle API service exceptions.
    $error = $e->getMessage();
  }

JavaScript

function makeApiCall() {
  // ...

  apiQuery.execute(handleCoreReportingResults);
}

function handleCoreReportingResults(results) {
  if (!results.error) {
    // Success. Do something cool!
  } else {
    alert('There was an error: ' + results.message);
  }
}

يأتي هذا المثال كالتالي من الخطوة السابقة التي تم فيها إنشاء طلب بحث في واجهة برمجة التطبيقات الأساسية لإعداد التقارير. في هذه الخطوة، يتم تنفيذ الاستعلام. تمثّل المعلَمة الخاصة بطريقة execute مرجعًا لدالة استدعاء سيتم تنفيذها بعد إرجاع البيانات من واجهة برمجة التطبيقات.

وبعد عرض واجهة برمجة التطبيقات مع النتائج، يتم تنفيذ وظيفة معاودة الاتصال ويتم تمرير البيانات من واجهة برمجة التطبيقات. وفي حال حدوث خطأ، ستتضمّن النتائج سمة باسم error.

في هذا المثال، يتم إجراء عملية تحقّق لمعرفة ما إذا كان error متوفرًا أو ما إذا تم عرض واجهة برمجة التطبيقات بنجاح.

وإذا كان طلب البحث ناجحًا، ستعرض واجهة برمجة التطبيقات البيانات المطلوبة. في حال حدوث أي أخطاء، ستعرض واجهة برمجة التطبيقات رمز حالة محدّدًا ورسالة تصف الخطأ. من المفترض أن ترصد جميع التطبيقات الأخطاء وتعالجها بشكل صحيح.

التعامل مع نتائج واجهة برمجة التطبيقات

إذا تم تنفيذ طلب البحث Core Reporting API بنجاح، تظهر واجهة برمجة التطبيقات مع بيانات إعداد تقارير "إحصاءات Google" بالإضافة إلى معلومات أخرى ذات صلة بالبيانات.

بيانات إعداد التقارير في "إحصاءات Google"

يمكن اعتبار البيانات الرئيسية التي يتم عرضها من واجهة برمجة التطبيقات على أنّها جدول يحتوي على نوعَين رئيسيَين من البيانات:

  • العنوان الذي يصف أنواع القيم في كل عمود
  • صفوف البيانات في الجدول

بيانات رأس العمود

تحتوي كل استجابة من واجهة برمجة التطبيقات على حقل عنوان للعمود يمثّل معلومات العنوان الخاصة بالجدول. الحقل هو قائمة (أو مصفوفة) من العناصر حيث يصف كل كائن نوع البيانات الواردة في العمود. ترتيب الأعمدة هو أعمدة السمات متبوعة بأعمدة المقاييس بنفس الترتيب المحدد في طلب البحث الأصلي.

Java

private void printColumnHeaders(GaData gaData) {
 System.out.println("Column Headers:");

 for (GaDataColumnHeaders header : gaData.getColumnHeaders()) {
   System.out.println("Column Name: " + header.getName());
   System.out.println("Column Type: " + header.getColumnType());
   System.out.println("Column Data Type: " + header.getDataType());
 }
}

Python

def print_column_headers():
  headers = results.get('columnHeaders')

  for header in headers:
    # Print Dimension or Metric name.
    print 'Column name = %s' % header.get('name'))
    print 'Column Type = %s' % header.get('columnType')
    print 'Column Data Type = %s' % header.get('dataType')

PHP

private function printColumnHeaders(&results) {
  $html = '';
  $headers = $results->getColumnHeaders();

  foreach ($headers as $header) {
    $html .= <<<HTML
Column Name = {$header->getName()}
Column Type = {$header->getColumnType()}
Column Data Type = {$header->getDataType()}
HTML;

  print $html;
}

JavaScript

function printColumnHeaders(results) {
  var output = [];

  for (var i = 0, header; header = results.columnHeaders[i]; ++i) {
    output.push(
        'Name        = ', header.name, '\n',
        'Column Type = ', header.columnType, '\n',
        'Data Type   = ', header.dataType, '\n'
    );
  }

  alert(output.join(''));
}

بيانات الصف

يتم عرض البيانات الرئيسية التي يتم عرضها من واجهة برمجة التطبيقات على شكل List ثنائي الأبعاد من السلاسل. تمثل القائمة الخارجية جميع صفوف البيانات. تمثّل كل قائمة داخلية صفًا واحدًا، حيث يكون ترتيب الخلايا في الصف مماثلاً للحقول في كائن عنوان العمود الموضّح أعلاه.

بما أنّه يتم عرض البيانات في كل خلية كسلسلة، يكون الحقل DataType في كل كائن عنوان عمود مفيدًا بشكل خاص لأنّه يمكن استخدامه لتحليل قيم السلسلة إلى نوع مناسب. راجِع استجابة واجهة برمجة التطبيقات للبيانات الوصفية لجميع أنواع البيانات الممكنة.

تطبع الأمثلة التالية كلاً من رؤوس الجدول وصفوفه.

Java

private void printDataTable(GaData gaData) {
 if (gaData.getTotalResults() > 0) {
   System.out.println("Data Table:");

   // Print the column names.
   for (GaDataColumnHeaders header : gaData.getColumnHeaders()) {
     System.out.format("%-32s", header.getName() + '(' + header.getDataType() + ')');
   }
   System.out.println();

   // Print the rows of data.
   for (List<String> rowValues : gaData.getRows()) {
     for (String value : rowValues) {
       System.out.format("%-32s", value);
     }
     System.out.println();
   }
 } else {
   System.out.println("No Results Found");
 }

Python

def print_data_table(results):
  # Print headers.
  output = []
  for header in results.get('columnHeaders'):
    output.append('%30s' % header.get('name'))
  print ''.join(output)

  # Print rows.
  if results.get('rows', []):
    for row in results.get('rows'):
      output = []
      for cell in row:
        output.append('%30s' % cell)
      print ''.join(output)
  else:
    print 'No Results Found'

PHP

private function printDataTable(&$results) {
  if (count($results->getRows()) > 0) {
    $table .= '<table>';

    // Print headers.
    $table .= '<tr>';

    foreach ($results->getColumnHeaders() as $header) {
      $table .= '<th>' . $header->name . '</th>';
    }
    $table .= '</tr>';

    // Print table rows.
    foreach ($results->getRows() as $row) {
      $table .= '<tr>';
        foreach ($row as $cell) {
          $table .= '<td>'
                 . htmlspecialchars($cell, ENT_NOQUOTES)
                 . '</td>';
        }
      $table .= '</tr>';
    }
    $table .= '</table>';

  } else {
    $table .= '<p>No Results Found.</p>';
  }
  print $table;
}

JavaScript

function printRows(results) {
  output = [];

  if (results.rows && results.rows.length) {
    var table = ['<table>'];

    // Put headers in table.
    table.push('<tr>');
    for (var i = 0, header; header = results.columnHeaders[i]; ++i) {
      table.push('<th>', header.name, '</th>');
    }
    table.push('</tr>');

    // Put cells in table.
    for (var i = 0, row; row = results.rows[i]; ++i) {
      table.push('<tr><td>', row.join('</td><td>'), '</td></tr>');
    }
    table.push('</table>');

    output.push(table.join(''));
  } else {
    output.push('<p>No Results Found</p>');
  }

  alert(output.join(''));
}

معلومات التقرير

إلى جانب بيانات الجدول الرئيسية، تحتوي البيانات التي يتم عرضها من واجهة برمجة التطبيقات على بعض المعلومات المهمة حول الرد. ويمكنك طباعته باستخدام:

Java

private void printResponseInfo(GaData gaData) {
  System.out.println("Contains Sampled Data: " + gaData.getContainsSampledData());
  System.out.println("Kind: " + gaData.getKind());
  System.out.println("ID:" + gaData.getId());
  System.out.println("Self link: " + gaData.getSelfLink());
}

Python

def print_response_info(results):
  print 'Contains Sampled Data = %s' % results.get('containsSampledData')
  print 'Kind                  = %s' % results.get('kind')
  print 'ID                    = %s' % results.get('id')
  print 'Self Link             = %s' % results.get('selfLink')

PHP

private function printReportInfo(&$results) {
  $html = <<<HTML
  <pre>
Contains Sampled Data = {$results->getContainsSampledData()}
Kind                  = {$results->getKind()}
ID                    = {$results->getId()}
Self Link             = {$results->getSelfLink()}
</pre>
HTML;

  print $html;
}

JavaScript

function printReportInfo(results) {
  var output = [];

  output.push(
      'Contains Sampled Data  = ', results.containsSampledData, '\n',
      'Kind                   = ', results.kind, '\n',
      'ID                     = ', results.id, '\n',
      'Self Link              = ', results.selfLink, '\n');

  alert(output.join(''));
}

والحقل containsSampledData مهم لأنّه يوضّح ما إذا كانت استجابة واجهة برمجة التطبيقات مستندة إلى عيّنات. يمكن أن يؤثر أخذ العينات في نتائج بياناتك، والسبب الشائع لعدم تطابق القيم المعروضة من واجهة برمجة التطبيقات مع واجهة الويب. يمكنك الاطّلاع على دليل مفاهيم أخذ العينات للحصول على مزيد من التفاصيل.

عرض معلومات (الملف الشخصي)

يحتوي كل رد على مجموعة من المَعلمات التي تشير إلى الحساب، والموقع الإلكتروني، والملف الشخصي (الملف الشخصي) الذي تنتمي إليه هذه البيانات.

Java

private void printProfileInfo(GaData gaData) {
  GaDataProfileInfo profileInfo = gaData.getProfileInfo();

  System.out.println("Account ID: " + profileInfo.getAccountId());
  System.out.println("Web Property ID: " + profileInfo.getWebPropertyId());
  System.out.println("Internal Web Property ID: " + profileInfo.getInternalWebPropertyId());
  System.out.println("View (Profile) ID: " + profileInfo.getProfileId());
  System.out.println("View (Profile) Name: " + profileInfo.getProfileName());
  System.out.println("Table ID: " + profileInfo.getTableId());
}

Python

def print_profile_info(result):

  info = results.get('profileInfo')
  print 'Account Id          = %s' % info.get('accountId')
  print 'Web Property Id     = %s' % info.get('webPropertyId')
  print 'Web Property Id     = %s' % info.get('internalWebPropertyId')
  print 'View (Profile) Id   = %s' % info.get('profileId')
  print 'Table Id            = %s' % info.get('tableId')
  print 'View (Profile) Name = %s' % info.get('profileName')

PHP

private function printProfileInformation(&$results) {
  $profileInfo = $results->getProfileInfo();

  $html = <<<HTML
<pre>
Account ID               = {$profileInfo->getAccountId()}
Web Property ID          = {$profileInfo->getWebPropertyId()}
Internal Web Property ID = {$profileInfo->getInternalWebPropertyId()}
Profile ID               = {$profileInfo->getProfileId()}
Table ID                 = {$profileInfo->getTableId()}
Profile Name             = {$profileInfo->getProfileName()}
</pre>
HTML;

  print $html;
}

JavaScript

function printProfileInfo(results) {
  var output = [];

  var info = results.profileInfo;
  output.push(

      'Account Id          = ', info.accountId, '\n',
      'Web Property Id     = ', info.webPropertyId, '\n',
      'View (Profile) Id   = ', info.profileId, '\n',
      'Table Id            = ', info.tableId, '\n',
      'View (Profile) Name = ', info.profileName);

  alert(output.join(''));
}

يتوافق كل رقم من أرقام التعريف هذه مع كيانات مختلفة في العرض الهرمي لـ Management API. يمكنك استخدام أرقام التعريف هذه لإنشاء طلبات بحث من واجهة برمجة تطبيقات الإدارة للحصول على معلومات ضبط إضافية بشأن الملف الشخصي. على سبيل المثال، يمكنك إجراء طلب بحث في مجموعة أهداف واجهة برمجة التطبيقات للإدارة لمعرفة الأهداف النشطة إلى جانب أسماء الأهداف التي تم ضبطها.

معلومات طلب البحث

يحتوي كل استجابة من استجابة واجهة برمجة التطبيقات الأساسية لإعداد التقارير على عنصر يحتوي على جميع قيم معلَمات طلب البحث المستخدَمة لإنشاء الرد.

Java

private void printQueryInfo(GaData gaData) {
  GaDataQuery query = gaData.getQuery();

  System.out.println("Ids: " + query.getIds());
  System.out.println("Start Date: " + query.getStartDate());
  System.out.println("End Date: " + query.getEndDate());
  System.out.println("Metrics: " + query.getMetrics()); // List
  System.out.println("Dimensions: " + query.getDimensions());
  System.out.println("Sort: " + query.getSort()); // List
  System.out.println("Segment: " + query.getSegment());
  System.out.println("Filters: " + query.getFilters());
  System.out.println("Start Index: " + query.getStartIndex());
  System.out.println("Max Results: " + query.getMaxResults());
}

Python

def print_query_info(results):
  query = results.get('query')
  for key, value in query.iteritems():
    print '%s = %s' % (key, value)

PHP

private function printQueryParameters(&$results) {
  $query = $results->getQuery();

  $html = '<pre>';
  foreach ($query as $paramName => $value) {
    $html .= "$paramName = $value\n";
  }
  $html .= '</pre>';

  print $html;
}

JavaScript

function printQuery(results) {
  output = [];

  for (var key in results.query) {
    output.push(key, ' = ', results.query[key], '\n');
  }

  alert(output.join(''));
}

يتم عرض المَعلمتَين metrics وsort كقيمتَين في قائمة، بينما يتم عرض المَعلمات الأخرى كسلاسل.

معلومات التقسيم على صفحات

وقد يتطابق أي طلب لواجهة Core Reporting API مع مئات الآلاف من الصفوف من بيانات "إحصاءات Google". ولن تعرِض واجهة برمجة التطبيقات الأساسية لإعداد التقارير سوى مجموعة فرعية في وقت معيّن، والتي يمكن الإشارة إليها على أنّها صفحة واحدة من البيانات. يمكنك استخدام حقول التقسيم على صفحات لاسترداد جميع صفحات البيانات.

Java

private void printPaginationInfo(GaData gaData) {
  System.out.println("Items Per Page: " + gaData.getItemsPerPage());
  System.out.println("Total Results: " + gaData.getTotalResults());
  System.out.println("Previous Link: " + gaData.getPreviousLink());
  System.out.println("Next Link: " + gaData.getNextLink());
}

Python

def print_pagination_info(results):
  print 'Items per page = %s' % results.get('itemsPerPage')
  print 'Total Results  = %s' % results.get('totalResults')
  print 'Previous Link  = %s' % results.get('previousLink')
  print 'Next Link      = %s' % results.get('nextLink')

PHP

private function getPaginationInfo(&$results) {
  $html = <<<HTML
<pre>
Items per page = {$results->getItemsPerPage()}
Total results  = {$results->getTotalResults()}
Previous Link  = {$results->getPreviousLink()}
Next Link      = {$results->getNextLink()}
</pre>
HTML;

  print $html;
}

JavaScript

function printPaginationInfo(results) {
  var output = [];

  output.push(
      'Items Per Page = ', results.itemsPerPage, '\n',
      'Total Results  = ', results.totalResults, '\n',
      'Previous Link  = ', results.previousLink, '\n',
      'Next Link      = ', results.nextLink, '\n');

  alert(output.join(''));
}

يمثّل الحقل totalResults إجمالي عدد صفوف البيانات التي تطابقها طلب البحث في "إحصاءات Google". ويمكن أن يكون هذا العدد أكبر من العدد الفعلي للصفوف التي يتم عرضها في صفحة واحدة من الاستجابة. ويمثّل الحقل itemsPerPage عدد الصفوف التي يتم عرضها في هذه الصفحة.

لا تتوفّر المَعلمتَان previousLink وnextLink إلا في حال توفُّر صفحة سابقة أو تالية. تحقَّق من هذه الروابط لمعرفة ما إذا كان من الممكن استرداد المزيد من صفحات البيانات من واجهة برمجة التطبيقات الأساسية لإعداد التقارير.

إجماليات كل النتائج

كما هو مذكور في قسم معلومات التقسيم على صفحات أعلاه، يمكن أن يتطابق طلب البحث في Core Reporting API مع العديد من صفوف البيانات في "إحصاءات Google"، ولكنّه لا يعرض سوى مجموعة فرعية من البيانات. يتم عرض القيم الإجمالية للمقاييس لكل الصفوف المطابقة في العنصر totalsForAllResults. هذه البيانات مفيدة لحساب المتوسطات.

Java

private void printTotalsForAllResults(GaData gaData) {
  Map totalsMap = gaData.getTotalsForAllResults();

  for (Map.Entry entry : totalsMap.entrySet()) {
    System.out.println(entry.getKey() + " : " + entry.getValue());
  }
}

Python

def print_totals_for_all_results(results):
  totals = results.get('totalsForAllResults')

  for metric_name, metric_total in totals.iteritems():
    print 'Metric Name  = %s' % metric_name
    print 'Metric Total = %s' % metric_total

PHP

private function printTotalsForAllResults(&$results) {
  $totals = $results->getTotalsForAllResults();

  foreach ($totals as $metricName => $metricTotal) {
    $html .= "Metric Name  = $metricName\n";
    $html .= "Metric Total = $metricTotal";
  }

  print $html;
}

JavaScript

function printTotalsForAllResults(results) {
  var output = [];

  var totals = results.totalsForAllResults;
  for (metricName in totals) {
    output.push(
        'Metric Name  = ', metricName, '\n',
        'Metric Total = ', totals[metricName], '\n');
  }

  alert(output.join(''));
}

نماذج عمل

للاطّلاع على نماذج العمل الكاملة، يمكنك مراجعة نموذج واجهة برمجة التطبيقات الأساسية لإعداد التقارير في دليل النماذج الخاص بكل مكتبة عميل.