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

คู่มือการเรียนรู้ Yii Framework 2 (Yii2)

บทเรียนดีๆ สำหรับผู้ที่ต้องการแบ่งปัน บทเรียนของคุณอาจมีค่าสำหรับอีกหลายๆ คน

beta version

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

มานพ กองอุ่น google api analytic yii framework yii2 961

สำหรับบทเรียนรู้นี้เรามาทดลองการแสดงข้อมูลจาก 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
มานพ กองอุ่น

มานพ กองอุ่น
admin

  • 2 เพื่อน
  • 8 ผู้ติดตาม
  • 754 โพสต์
กลับขึ้นบน