การเข้าถึงข้อมูล Google Analytics ใน Google ชีตโดยอัตโนมัติ

Nick Mihailovski ทีม Google Analytics API – สิงหาคม 2012

บทแนะนำนี้จะอธิบายวิธีเข้าถึง Management และ Core Reporting API ใน Google ชีตโดยใช้ Apps Script


เกริ่นนำ

คุณจะใช้ Google Analytics API และ Google Apps Script เพื่อเข้าถึงข้อมูล Google Analytics จาก Google ชีตได้ การทำเช่นนี้มีประสิทธิภาพมากเพราะช่วยให้คุณใช้ประโยชน์จากฟีเจอร์ที่ยอดเยี่ยมทั้งหมดของ Google ชีตกับข้อมูลการวิเคราะห์ได้ เช่น การแชร์ที่ง่ายดาย การทำงานร่วมกัน เครื่องมือการสร้างแผนภูมิ และการแสดงข้อมูลผ่านภาพ

บทแนะนำนี้จะแนะนำโค้ดที่จำเป็นในการเข้าถึงข้อมูล Google Analytics ใน Google ชีตโดยใช้ Google Apps Script

ภาพรวม

บทแนะนำนี้จะแสดงวิธีลงทะเบียนและกำหนดค่าสภาพแวดล้อม Apps Script เพื่อใช้ Google Analytics API เมื่อกำหนดค่าแล้ว บทแนะนำจะแนะนำวิธีเรียกข้อมูลรหัสข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) ของผู้ใช้ที่ได้รับอนุญาตโดยใช้ API การจัดการ จากนั้นวิธีใช้รหัสข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) เพื่อค้นหา API การรายงานหลักเพื่อดึงข้อมูลคีย์เวิร์ดที่ใช้ค้นหาบนอุปกรณ์เคลื่อนที่ 250 อันดับแรกจาก Google สุดท้ายจะแทรกผลลัพธ์ลงในสเปรดชีตของ Google เมื่อคุณมีข้อมูลแล้ว บทแนะนำจะพูดถึงวิธีดึงข้อมูลโดยอัตโนมัติด้วย

เมื่อสร้างแอปพลิเคชันโดยใช้ Google Analytics API และ Apps Script โดยทั่วไปคุณจะต้องทำตามขั้นตอนต่อไปนี้

  • เปิดใช้ API ของ Google Analytics ใน Google ชีต
  • ทำงานกับ API ของ Google Analytics

มาดูรายละเอียดของแต่ละขั้นตอนกัน

เปิดใช้ Google Analytics API ใน Apps Script

หากต้องการเปิดใช้การเข้าถึงข้อมูล Google Analytics จากภายใน Google ชีต ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างไฟล์ Google ชีต ตั้งชื่อเก๋ๆ หน่อย
  2. สร้าง Apps Script ใหม่
    1. ในเมนู ให้ไปที่ส่วนขยาย > Apps Script
    2. หากเมนูปรากฏขึ้น ให้คลิกโครงการเปล่า
    3. ตั้งชื่อโปรเจ็กต์ ตรวจสอบว่ามีชื่อที่น่าสนใจ

เมื่อมีสคริปต์ใหม่แล้ว คุณจะต้องเปิดใช้บริการ Google Analytics

  1. ในเครื่องมือแก้ไขสคริปต์ ให้เลือกทรัพยากร > บริการขั้นสูงของ Google...
  2. ในกล่องโต้ตอบที่ปรากฏขึ้น ให้คลิกสวิตช์เปิด/ปิดข้าง Google Analytics API
  3. ที่ด้านล่างของกล่องโต้ตอบ ให้คลิกลิงก์สำหรับ Google Developers Console
  4. ในคอนโซลใหม่ ให้คลิกสวิตช์เปิด/ปิดข้าง Google Analytics API อีกครั้ง (เมื่อเปิดใช้แล้ว ไอคอนจะข้ามไปที่ด้านบนของหน้า)
  5. กลับไปที่เครื่องมือแก้ไขสคริปต์ แล้วคลิกตกลงในกล่องโต้ตอบ

กล่องโต้ตอบสีเหลืองเล็กๆ จะปรากฏขึ้นแจ้งว่าคุณได้เพิ่มบริการ Google APIs ใหม่ลงในสคริปต์เรียบร้อยแล้ว ตอนนี้คุณก็พร้อมที่จะเขียนสคริปต์บทแรกแล้ว

ใช้งาน Google Analytics API

สคริปต์ในบทแนะนำนี้จะค้นหา API ของ Google Analytics สำหรับคีย์เวิร์ดการค้นหาบนอุปกรณ์เคลื่อนที่ 250 อันดับแรกของ Google จากนั้นแสดงผลลัพธ์ใน Google ชีต สคริปต์จะต้องดำเนินการตามขั้นตอนต่อไปนี้เพื่อให้บรรลุเป้าหมายนี้

  • ดึงข้อมูลการแสดงผลครั้งแรก (โปรไฟล์) ของผู้ใช้ที่ได้รับอนุญาต
  • ค้นหาข้อมูลใน API การรายงานหลัก
  • แทรกข้อมูลลงในสเปรดชีต

เพิ่มฟังก์ชันต่อไปนี้ในโปรเจ็กต์ที่ว่างเปล่า

function runDemo() {
  try {

    var firstProfile = getFirstProfile();
    var results = getReportDataForProfile(firstProfile);
    outputToSpreadsheet(results);

  } catch(error) {
    Browser.msgBox(error.message);
  }
}

ในโค้ดด้านบน มีการใช้บล็อก try...catch เพื่อจัดการข้อผิดพลาด API หากมีข้อผิดพลาดเกิดขึ้น การดำเนินการของโปรแกรมจะหยุดลงและข้อผิดพลาดจะแสดงอยู่ในกล่องข้อความ ในบล็อก try จะมีการใช้ฟังก์ชันเพื่อดำเนินการแต่ละขั้นตอนที่สคริปต์จะดำเนินการ คราวนี้ลองเพิ่มโค้ดสำหรับแต่ละฟังก์ชัน

ดึงข้อมูลการดู (โปรไฟล์) ครั้งแรกของผู้ใช้ที่ได้รับอนุญาต

ใน Google Analytics รายงานแต่ละฉบับเป็นของข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) และจะระบุโดยรหัสข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) ดังนั้นเมื่อคุณระบุการค้นหาข้อมูลรายงาน คุณต้องระบุรหัสข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) ของข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) ที่คุณต้องการดึงข้อมูลด้วย

Google Analytics Management API ให้สิทธิ์เข้าถึงบัญชี เว็บพร็อพเพอร์ตี้ และเอนทิตีข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) ทั้งหมดที่เป็นของผู้ใช้ เอนทิตีแต่ละรายการเหล่านี้อยู่ในลำดับชั้น และคุณจะข้ามผ่านลำดับชั้นนี้แบบเป็นโปรแกรมเพื่อเรียกข้อมูลรหัสข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) ของผู้ใช้ที่ได้รับอนุญาตได้

ฟังก์ชันที่ 2 ที่เราจะเขียนจะข้ามผ่านลำดับชั้นของ Management API และแสดงผลมุมมองแรก (โปรไฟล์) ของผู้ใช้ คัดลอกและวางโค้ดต่อไปนี้ลงในโปรเจ็กต์ Apps Script

function getFirstProfile() {
  var accounts = Analytics.Management.Accounts.list();
  if (accounts.getItems()) {
    var firstAccountId = accounts.getItems()[0].getId();

    var webProperties = Analytics.Management.Webproperties.list(firstAccountId);
    if (webProperties.getItems()) {

      var firstWebPropertyId = webProperties.getItems()[0].getId();
      var profiles = Analytics.Management.Profiles.list(firstAccountId, firstWebPropertyId);

      if (profiles.getItems()) {
        var firstProfile = profiles.getItems()[0];
        return firstProfile;

      } else {
        throw new Error('No views (profiles) found.');
      }
    } else {
      throw new Error('No webproperties found.');
    }
  } else {
    throw new Error('No accounts found.');
  }
}

ในฟังก์ชันนี้ ระบบจะค้นหาคอลเล็กชันบัญชีก่อนโดยใช้เมธอด Analytics.Management.Accounts.list หากผู้ใช้ที่ได้รับอนุญาตมีบัญชี Google Analytics ระบบจะดึงข้อมูลรหัสบัญชีแรก ถัดไป ระบบจะค้นหาคอลเล็กชันเว็บพร็อพเพอร์ตี้โดยการเรียกใช้เมธอด Analytics.Management.Webproperties.list แล้วส่งผ่านเมธอดรหัสบัญชีที่ดึงมาในขั้นตอนก่อนหน้า หากมีเว็บพร็อพเพอร์ตี้อยู่ ระบบจะค้นหาคอลเล็กชันข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) ในที่สุดโดยใช้เมธอด Analytics.Management.Profiles.list ระบบจะส่งทั้งรหัสบัญชีและรหัสเว็บพร็อพเพอร์ตี้เป็นพารามิเตอร์ไปยังเมธอดนี้ หากมีข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) อยู่ ระบบจะแสดงข้อมูลพร็อพเพอร์ตี้แรก (โปรไฟล์)

หากเมื่อใดก็ตามที่เกิดข้อผิดพลาดของ API หรือการตอบสนองของ API ไม่มีผลลัพธ์ ระบบจะแสดงข้อผิดพลาดพร้อมข้อความที่อธิบายว่าไม่พบผลลัพธ์ บล็อก catch ในฟังก์ชัน runDemo ด้านบนจะตรวจจับข้อผิดพลาดนี้และพิมพ์ข้อความไปยังผู้ใช้

หลังจากที่สคริปต์แสดงผลแล้ว ตอนนี้จึงสามารถค้นหาข้อมูลการรายงานได้

ค้นหาข้อมูลใน API การรายงานหลัก

เมื่อมีรหัสข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) แล้ว คุณจะใช้ Core Reporting API เพื่อค้นหาข้อมูลรายงานของ Google Analytics ได้ ในส่วนนี้ คุณจะได้ดูวิธีค้นหา API นี้โดยใช้ Apps Script

เพิ่มโค้ดต่อไปนี้ในโปรเจ็กต์ Apps Script

function getReportDataForProfile(firstProfile) {

  var profileId = firstProfile.getId();
  var tableId = 'ga:' + profileId;
  var startDate = getLastNdays(14);   // 2 weeks (a fortnight) ago.
  var endDate = getLastNdays(0);      // Today.

  var optArgs = {
    'dimensions': 'ga:keyword',              // Comma separated list of dimensions.
    'sort': '-ga:sessions,ga:keyword',       // Sort by sessions descending, then keyword.
    'segment': 'dynamic::ga:isMobile==Yes',  // Process only mobile traffic.
    'filters': 'ga:source==google',          // Display only google traffic.
    'start-index': '1',
    'max-results': '250'                     // Display the first 250 results.
  };

  // Make a request to the API.
  var results = Analytics.Data.Ga.get(
      tableId,                    // Table id (format ga:xxxxxx).
      startDate,                  // Start-date (format yyyy-MM-dd).
      endDate,                    // End-date (format yyyy-MM-dd).
      'ga:sessions,ga:pageviews', // Comma seperated list of metrics.
      optArgs);

  if (results.getRows()) {
    return results;

  } else {
    throw new Error('No views (profiles) found');
  }
}

function getLastNdays(nDaysAgo) {
  var today = new Date();
  var before = new Date();
  before.setDate(today.getDate() - nDaysAgo);
  return Utilities.formatDate(before, 'GMT', 'yyyy-MM-dd');
}

ส่วนแรกของโค้ดจะสร้างการค้นหา Core Reporting API โดยใช้เมธอด Analytics.Data.Ga.get เมธอดจะยอมรับพารามิเตอร์จำนวนมากที่ระบุประเภทรายงานที่จะดึงข้อมูล การค้นหา Core Reporting API แต่ละรายการประกอบด้วยชุดพารามิเตอร์ที่จําเป็นและไม่บังคับ ระบบจะส่งพารามิเตอร์ที่จำเป็นไปยังเมธอดเป็นพารามิเตอร์ในขณะที่ส่งพารามิเตอร์ที่ไม่บังคับในรูปแบบออบเจ็กต์

ต้องมีพารามิเตอร์ table ID และสร้างขึ้นโดยการรวมคำนำหน้า ga: เข้ากับรหัสข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) โค้ดจะสร้างรหัสตารางโดยใช้รหัสข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) ที่ดึงมาในขั้นตอนก่อนหน้า นอกจากนี้ คุณจะต้องระบุวันที่เริ่มต้นและวันที่สิ้นสุด รวมถึงระบุช่วงวันที่ของข้อมูลที่ต้องการเรียกดูด้วย ทั้ง 2 ค่าจะคำนวณตามวันที่ของวันนี้โดยใช้ฟังก์ชัน getLastNdays สุดท้าย ระบบจะส่งพารามิเตอร์ที่ไม่บังคับทั้งหมดไปยังฟังก์ชันโดยใช้ออบเจ็กต์ optArgs

เมื่อเมธอด Analytics.Data.Ga.get ทำงาน ระบบจะส่งคำขอไปยัง API การรายงานหลัก หากเกิดข้อผิดพลาด ระบบจะตรวจจับได้จากบล็อก try...catch ที่กำหนดไว้ในเมธอด runDemo ภายนอก หากคำขอสำเร็จ ระบบจะแสดงผลลัพธ์

แทรกข้อมูลในสเปรดชีต

ขั้นตอนสุดท้ายในสคริปต์คือแสดงผลลัพธ์จาก Core Reporting API ไปยัง Google ชีต เมธอด outputToSpreadsheet จะใช้วิธีนี้ เพิ่มโค้ดต่อไปนี้ลงในโปรเจ็กต์

function outputToSpreadsheet(results) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet();

  // Print the headers.
  var headerNames = [];
  for (var i = 0, header; header = results.getColumnHeaders()[i]; ++i) {
    headerNames.push(header.getName());
  }
  sheet.getRange(1, 1, 1, headerNames.length)
      .setValues([headerNames]);

  // Print the rows of data.
  sheet.getRange(2, 1, results.getRows().length, headerNames.length)
      .setValues(results.getRows());
}

ฟังก์ชันนี้จะแทรกแผ่นงานใหม่ลงในสเปรดชีตที่ใช้งานอยู่ก่อน จากนั้นจะแทรกส่วนหัวและข้อมูลการรายงานทั้งหมดลงในชีต ดูเคล็ดลับเพิ่มเติมเกี่ยวกับวิธีแทรกข้อมูลลงใน Google ชีตได้ที่หัวข้อ การเขียนข้อมูลจากออบเจ็กต์ JavaScript ไปยังสเปรดชีตใน บทแนะนำการจัดเก็บข้อมูลในสเปรดชีต

เรียกใช้สคริปต์

เมื่อเพิ่มโค้ดทั้งหมดในโปรเจ็กต์แล้ว ก็เรียกใช้ได้เลย

  • ในแถบเครื่องมือของเครื่องมือแก้ไขสคริปต์ ให้เลือก runDemo ในเมนูเลือกฟังก์ชันแบบเลื่อนลง
  • จากนั้น คลิกปุ่ม play

ครั้งแรกที่คุณเรียกใช้สคริปต์นี้ ช่องป๊อปอัปจะปรากฏขึ้น ซึ่งคุณจะต้องให้สิทธิ์สคริปต์นี้ในการเข้าถึงข้อมูลบัญชี Google Analytics

คลิกให้สิทธิ์

เมื่อคลิกแล้ว หน้าเว็บใหม่ที่โฮสต์บน google.com จะเปิดขึ้นและขอให้คุณอนุญาตให้สคริปต์นี้เข้าถึงข้อมูล เมื่อคลิก "อนุญาต" ระบบจะเปลี่ยนเส้นทางคุณไปยังหน้ายืนยัน ถึงตอนนี้สคริปต์ก็จะเข้าถึงข้อมูล Google Analytics และดำเนินการต่อไปได้

หลังจากสคริปต์ทำงานแล้ว ให้คลิกไปยังหน้าต่างที่มี Google ชีต คุณควรเห็นข้อมูลคีย์เวิร์ดทั้งหมดที่แสดงผลจาก API หรือกล่องข้อความที่มีข้อความแสดงข้อผิดพลาด

ทำให้สคริปต์ทำงานอัตโนมัติ

ณ จุดนี้ คุณควรมีสคริปต์ที่ค้นหา API ของ Google Analytics ตอนนี้คุณอาจต้องกำหนดให้สคริปต์นี้ทำงานโดยอัตโนมัติเพื่อดึงข้อมูลใหม่ทุกคืน Apps Script ช่วยให้การทำงานอัตโนมัติเป็นเรื่องง่ายโดยใช้ฟีเจอร์ triggers

หากต้องการให้สคริปต์นี้ทำงานโดยอัตโนมัติ ให้ทำตามขั้นตอนต่อไปนี้

  • ในแถบเครื่องมือของเครื่องมือแก้ไขสคริปต์ ให้คลิก Resources -> All your triggers...
  • คลิก Add a new trigger กล่องโต้ตอบทริกเกอร์จะปรากฏขึ้น
  • กำหนดค่าทริกเกอร์เพื่อเรียกใช้เมธอด runDemo ทุกคืน
    • เมนูแบบเลื่อนลง Run ควรตั้งค่าเป็น runDemo
    • เมนูแบบเลื่อนลง Events ควรตั้งค่าเป็น Time-driven, Day timer และ Midnight to 1am

เมื่อกำหนดค่าแล้ว สคริปต์นี้จะทำงานทุกคืนเพื่อให้คุณได้รับข้อมูลสดใหม่ในตอนเช้า

หากมีข้อผิดพลาดเกิดขึ้นในเวลากลางคืน คุณจะได้รับการแจ้งเตือน นอกจากนี้ Apps Script ยังช่วยให้คุณส่งอีเมลแจ้งเตือนได้ด้วยหากเกิดข้อผิดพลาดขึ้น หากต้องการกำหนดค่านี้ ให้คลิกลิงก์ notifications ในกล่องโต้ตอบของทริกเกอร์ กล่องโต้ตอบใหม่จะปรากฏขึ้นและให้คุณกำหนดค่าอีเมลที่ต้องการให้เกิดข้อผิดพลาด

บทสรุป

คุณได้ลงทะเบียนและให้สิทธิ์เข้าถึงสคริปต์เรียบร้อยแล้ว คุณได้ค้นหา Management API หลายครั้งเพื่อเรียกข้อมูลรหัสข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) จากนั้นใช้รหัสข้อมูลพร็อพเพอร์ตี้ (โปรไฟล์) เพื่อค้นหา Core Reporting API เพื่อดึงข้อมูลและแสดงผลใน Google ชีต

การใช้เทคนิคที่อธิบายไว้ในบทแนะนำจะช่วยให้คุณทำการวิเคราะห์ที่ซับซ้อนขึ้น รับข้อมูลเชิงลึกมากขึ้น สร้างแดชบอร์ดที่กำหนดเอง และลดเวลาในการเรียกใช้รายงานด้วยตนเองได้นาน

บทแนะนำดีๆ อีก 2-3 เรื่องที่อาจเป็นประโยชน์เพื่อช่วยให้คุณใช้ประโยชน์จาก Google Analytics API และ Google Apps Script ได้มากขึ้น ได้แก่