แสดงข้อมูลจาก Google Analytic Real-time และ AnalyticsReporting ด้วย Yii Framework 2

wave
มานพ กองอุ่น 19 เม.ย. 2017 19:47:16 10,810

สำหรับบทเรียนรู้นี้เรามาทดลองการแสดงข้อมูลจาก Google Analytics มาแสดงใน Web Application ของเราผ่าน API ของ Google ซึ่งมีขั้นตอนต่อไปนี้

ติดตั้ง Google API Client

ทำการติดตั้ง Google API Client กันก่อน โดย copy คำสั่งไปวางใน composer.json 

"google/apiclient": "^2.0",

จากนั้นก็สั่ง 

composer update

ทำการสร้าง Google API Project ก่อนนะ

โดยเข้าที่ URL 

https://console.developers.google.com/apis/dashboard

จากนั้นก็กดสร้างโครงการให้เรียบร้อย

จะได้โครงการหน้าตาลักษณะดังนี้

เป็นอันเสร็จเรียบร้อยในขั้นตอนนี้ ต่อไปเรามาเปิดการใช้งาน API กัน ซึ่งการเปิด API นั้นก็อาจมีค่าใช้จ่ายเพิ่มเติมนะครับ

การเปิดใช้ API

API ที่จะใช้งานในขั้นตอนนี้จะมี 2 ตัว ไปดูกันเลย

ตัวแรกคือ Analytics API อยู่มุมขวาล่าง

คลิกเข้าไปแล้วคลิกลิ้ง เปิด ก็เป็นอันใช้ได้ล่ะครับ

ตัวที่สองมีชื่อว่า Google Analytics Reporting API หาไม่เจอใช่ไหม ให้ค้นหาเอานะครับ

และทำการเปิดใช้งานเหมือนตัวแรกนะ เป็นอันเสร็จเรียบร้อย

สร้าง KEY ต่างๆ

คลิกที่เมนูซ้ายมือ ข้อมูลรับรอง เพื่อจัดการ Key ต่างๆ (อันนี้ห้ามบอกใครนะ)

ทำการสร้าง Key 2 ส่วนคือ คีย์ API และ รหัสไคลเอ็นต์ OAuth 2.0 จะได้ดังนี้

ในส่วน OAuth 2.0 ก็ทำการระบุ URL ให้เรียบร้อยตามคำอธิบายเลย

เป็นอันเสร็จเรียบร้อยในขั้นตอนการสร้าง Key

เขียนโปรแกรม

มาเขียนโปรแกรมในการเชื่อมต่อ โดยในที่นี้จะให้เชื่อมต่อผ่าน OAuth จาก Google นะครับ ซึ่งจะต้องทำการ Login ก่อนจึงจะสามารถเข้าใช้งานได้โดยทำการสร้าง Controller ดังนี้

frontend/controllers/GoogleController และสร้าง Action Analytic ดังนี้

<?php


namespace frontend\controllers;


use Exception;
use Google_Client;
use Google_Service_AnalyticsReporting;
use Google_Service_AnalyticsReporting_DateRange;
use Google_Service_AnalyticsReporting_GetReportsRequest;
use Google_Service_AnalyticsReporting_Metric;
use Google_Service_AnalyticsReporting_ReportRequest;
use Yii;
use yii\web\Controller;
use Google_Service_Analytics;

class GoogleController extends Controller
{
    public function actionAnalytic()
    {
        $client = new Google_Client();
        $client->setApplicationName('Programmer Thailand');
        $client->setDeveloperKey('YOUR_KEY');
        $client->setClientId('YOUR_CLIENT_ID');
        $client->setClientSecret('YOUR_CLIENT_SCRET');
        $client->setRedirectUri('https://www.programmerthailand.com/google/analytic');
        $client->addScope(Google_Service_Analytics::ANALYTICS_READONLY);


        $service = new Google_Service_Analytics($client);

        Yii::$app->session->open();

        if (isset($_GET['logout'])) {
            unset($_SESSION['token']);
        }

        if (isset($_GET['code'])) {
            $client->authenticate($_GET['code']);
            $_SESSION['token'] = $client->getAccessToken();
            $redirect = 'https://www.programmerthailand.com/google/analytic';
            header('Location: ' . filter_var($redirect, FILTER_SANITIZE_URL));
        }

        if (isset($_SESSION['token'])) {
            $client->setAccessToken($_SESSION['token']);
        }
        if ($client->getAccessToken()) {
            $_SESSION['token'] = $client->getAccessToken();

            $optParams = ['dimensions' => 'ga:visitorType'];

            try {

                ######## AnalyticsReporting #########
                $analytics = new Google_Service_AnalyticsReporting($client);
                // Call the Analytics Reporting API V4.
                $response = $this->getReport($analytics);

                // Print the response.
                $this->printResults($response);
                ######## AnalyticsReporting #########

                ####### Real-time Analytic ########
                $results = $service->data_realtime->get(
                    'ga:YOUR_VIEW_ID',
                    'ga:activeVisitors',
                    $optParams);
                // Success.
                // Do whatever you need with the results.
                //var_dump($results);
                $total = 0;
                if ($results->getRows() > 0) {
                    foreach ($results->getRows() as $row) {
                        $total += $row[1];
                    }
                }
                echo $total;
                ###### Real-time Analytic ########

            } catch (Exception $e) {
                // Handle API service exceptions.
                print_r('ERROR: ' . $e->getMessage());
            }
        } else {
            $authUrl = $client->createAuthUrl();
            header('Location: ' . $authUrl);
        }


        //return $this->render('realtime-analytic');
    }


    public function getReport($analytics)
    {

        // Replace with your view ID, for example XXXX.
        $VIEW_ID = "YOUR_VIEW_ID";

        // Create the DateRange object.
        $dateRange = new Google_Service_AnalyticsReporting_DateRange();
        $dateRange->setStartDate("7daysAgo"); //อยากรู้ 7 วันที่ผ่านมา
        $dateRange->setEndDate("today");

        // Create the Metrics object.
        $sessions = new Google_Service_AnalyticsReporting_Metric();
        $sessions->setExpression("ga:sessions");
        $sessions->setAlias("sessions");

        // Create the ReportRequest object.
        $request = new Google_Service_AnalyticsReporting_ReportRequest();
        $request->setViewId($VIEW_ID);
        $request->setDateRanges($dateRange);
        $request->setMetrics(array($sessions));

        $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
        $body->setReportRequests(array($request));
        return $analytics->reports->batchGet($body);
    }

    public function printResults($reports) {
        for ( $reportIndex = 0; $reportIndex < count( $reports ); $reportIndex++ ) {
            $report = $reports[ $reportIndex ];
            $header = $report->getColumnHeader();
            $dimensionHeaders = $header->getDimensions();
            $metricHeaders = $header->getMetricHeader()->getMetricHeaderEntries();
            $rows = $report->getData()->getRows();

            for ( $rowIndex = 0; $rowIndex < count($rows); $rowIndex++) {
                $row = $rows[ $rowIndex ];
                $dimensions = $row->getDimensions();
                $metrics = $row->getMetrics();
                for ($i = 0; $i < count($dimensionHeaders) && $i < count($dimensions); $i++) {
                    print($dimensionHeaders[$i] . ": " . $dimensions[$i] . "\n");
                }

                for ($j = 0; $j < count($metrics); $j++) {
                    $values = $metrics[$j]->getValues();
                    for ($k = 0; $k < count($values); $k++) {
                        $entry = $metricHeaders[$k];
                        print($entry->getName() . ": " . $values[$k] . "\n");
                    }
                }
            }
        }
    }
}

VIEW_ID จะเอามาจากไหนล่ะ ก็เอามาจาก Google Analytics เรานันไง

เมื่อเปิด URL Google จะให้ Login เพื่อเปิดร้องขอการเข้าถึงข้อมูลดังนี้

เมื่อกดยอมรับ จะปรากฏข้อมูลดังนี้

sessions: 9275 20

อุ๊ตะ เขียนโปรแกรมตั้งยาวเห็นแค่เนี๊ย 555

9275 คือจำนวน Session หรือจำนวนคนเข้าเว็บเรา 7 วันที่ผ่านมา ส่วน 20 คือจำนวนที่กำลังออนไลน์ นั่นเอง

หากมีการ ERROR หรือ SESSION หมดอายุแล้วก็เรียก URL yourdomain.com/google/analytic/?logout=true เพื่อเชื่อมต่อใหม่นะ

สรุป ตัวอย่างนี้เป็นการเชื่อมต่อ Google API ด้วย Yii Framework 2 ซึ่งเป็นเพียงแนวทางหนึ่งเท่านั้น เพื่อนๆสามารถดูรายละเอียดเพิ่มเติมได้ที่ 

https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/web-php
https://developers.google.com/analytics/devguides/reporting/realtime/v3/#next_steps

 


ความคิดเห็น

หากบทเรียนรู้มีความผิดพลาดประการใด หรือมีข้อเสนอแนะกรุณาแจ้ง contact@programmerthailand.com

เขียนบทเรียนรู้ของคุณ

รายละเอียด
  • ดู 10,810
  • รักเลย 0
  • หมวดหมู่ Yii Framework 2 (Yii2)
  • เขียนเมื่อ
  • แก้ไขเมื่อ
  • Tags google api analytic yii framework yii2
ข้อมูลผู้เขียน
มานพ กองอุ่น

มานพ กองอุ่น

เป็นสมาชิกเมื่อ: 18 ธ.ค. 2009

เนื้อหาที่เกี่ยวข้อง