[精讚] [會員登入]
479

設定Google analytics API #2 -- PHP的程式安裝和撰寫

讓你的網站能夠存取你的Google analytics上面的資料

此文完整連結 http://n.sfs.tw/11587

複製連結 設定Google analytics API #2 -- PHP的程式安裝和撰寫@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2017-08-11 04:14:19 最後編修
2017-08-10 02:43:49 By 瘦河馬
 

此文分成三個部分

設定Google analytics API #1 -- Google網站上的設定

設定Google analytics API #2 -- PHP的程式安裝和撰寫

設定Google analytics API #3 -- 查詢範例

三、安裝Google的Library(PHP)

google的文件[1]說明要用composer安裝他的library,如果你沒有composer,可以參考 [Centos7] 安裝php套件管理程式Composer+ Codeignioter3 這裡來安裝,基本上安裝google library沒有任何問題。

$ composer require google/apiclient:^2.0

安裝完畢後你會出現一個google的library目錄

google/
├── apiclient
├── apiclient-services
└── auth

四、叫用 google apiclient

只要依composer 的方式載入即可,因為我把google的範例放到CI3的類別中,所以寫法稍有改變,基本上大部分依[1]所寫的範例作測試。

叫用

public function doAnalytics(){
    include  APPPATH. "third_party/autoload.php";  //載入composer的 autoload
    $analytics = $this->initializeAnalytics();  //載入帳號資料
    $profileid = $this->getProfileIdByName($analytics,'新精讚');
    $results = $this->getResults($analytics, $profileid); //由profile id取回資料
    $this->printResults($results);
}

初始化載入帳號資料

private function initializeAnalytics()
{
    $KEY_FILE_LOCATION = APPPATH. "config/note_ana.json";
    $client = new Google_Client();
    $client->setApplicationName("Hello Analytics Reporting");
    $client->setAuthConfig($KEY_FILE_LOCATION);
    $client->setScopes(['https://www.googleapis.com/auth/analytics.readonly']);
    $analytics = new Google_Service_Analytics($client);
    return $analytics;
}

第3行 note_ana.json 就是前面二步驟下載的json檔,請確認路徑正確

由property name取回profile id

其中的name就是property name,也就是你在google analytics上面設定的名稱,例如:

private function getProfileIdByName($analytics,$name) {
    $accounts = $analytics->management_accounts->listManagementAccounts();
    if (count($accounts->getItems()) <= 0) {
      throw new Exception('No accounts found for this user.');
    }
    $accitems = $accounts->getItems();
    $firstAccountId = $accitems[0]->getId();
    $properties = $analytics->management_webproperties 
->listManagementWebproperties($firstAccountId);
    $items = $properties->getItems();
    if (count($items) <= 0) throw new Exception('No properties found for this user.');
    $n=-1;
    foreach($items as $k=>$one){
      if(!strcmp($one->getName(),$name)){$n=$k; break;}
    }
    if($n==-1)throw new Exception('No profile found for this name.');
    $PropertyId = $items[$n]->getId();
    $profiles = $analytics->management_profiles 
->listManagementProfiles($firstAccountId, $PropertyId);
    if (count($profiles->getItems()) <= 0) {
      throw new Exception('No views (profiles) found for this user.');
    }
    $profileobj= $profiles->getItems();
    return $profileobj[0]->getId();
}

1-7行 取回account id,有多筆取回第1筆
8-10行 取回properties的項目,一個帳號可能有多個google analytics的properties
12-17行 判斷取回的properties名稱是否符合,優先符合優先取回 property id
18-24行 每個property可能有單個或多個profile,取回第一個profile的id

取回資料項目

private function getResults($analytics, $profileId) {
    // Calls the Core Reporting API and queries for the number of sessions
    // for the last seven days.
    return $analytics->data_ga->get(
        'ga:' . $profileId,
        '7daysAgo',
        'today',
        'ga:sessions');
}

其中的參數可參考[3][4]:
  第5行:VIEW_ID: ga:132128590
  第6行:起始日期
  第7行:結束日期
  第8行:matrics,查詢session

印出結果

此部分和Google文件提供的一樣,請自行發揮了

private function printResults($results) {
    if (count($results->getRows()) > 0) {
      $profileName = $results->getProfileInfo()->getProfileName();
      $rows = $results->getRows();
      $sessions = $rows[0][0];
      print "First view (profile) found: $profileName\n";
      print "Total sessions: $sessions\n";
    } else {
      print "No results found.\n";
    }
}

執行結果

First view (profile) found: 所有網站資料
Total sessions: 5678

下一篇 設定Google analytics API #3 -- 查詢範例

參考資料

[1] https://developers.google.com/analytics/devguides/config/mgmt/v3/quickstart/service-php

[2] 所有API的文件請參考 https://developers.google.com/analytics/devguides/config/mgmt/v3/

[3] https://developers.google.com/analytics/devguides/reporting/core/v3/reference

[4] https://developers.google.com/analytics/devguides/reporting/core/v3/coreDevguide

[5] Hierarchy of accounts, users, properties, and views https://support.google.com/analytics/answer/1009618

你可能感興趣的文章

PHP程式經驗 #2 -- print和echo的差異 常在寫php的人一定會想知道echo和print這兩個函數有什麼不一樣 驗證 1. 比較print 和echo 函式的執

作業上傳程式 提供學生作業上傳的程式

[PHP] 檢查檔案是否是圖檔 使用getimagesize函數檢查檔案是否是圖檔

[PHP] preg_match 的貪婪和不貪婪比對 在php preg_match中預設是採用貪婪比對,太貪婪反而不符合需要,因此得採用「非貪婪比對」...

[PHP]解決ksort新增的SORT_NATURAL|SORT_FLAG_CASE方法 php>=5.4中ksort函數多了SORT_NATURAL 和 SORT_FLAG_CASE 旗標,對舊版的PHP中要怎麼辦?

[phpmyadmin] 缺少 mcrypt 外掛,請檢查 PHP 設定 缺少 mcrypt 外掛,請檢查 PHP 設定,安裝php-mcrypt。

[CodeIgniter 3] 自寫找不到頁面(page404)的方法 使用CI3框架中如果找不到頁面,就會導到一個自定的404頁面,該怎麼做?

[PHP] 處理mail 函式的標題中文字亂碼 PHP的mail函式若標題有中文字得先處理過,否則收信者會看到亂碼

使用Yahoo OAuth2 1/2 使用Yahoo OAuth2來認證我的網站

[PHP] 如何寫callback function 召回函數(回呼函數) PHP如何寫召回函數或回呼函數(callback function)?

我有話要說


限制:留言最高字數1000字,超過部分會被截掉。請注意:留言不可帶有網址,會被濾掉。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[HP DL380G7] 生效啟動第3,4片網卡/開啟或關閉內建的網卡 HP DL380G7 預設第3,4片網卡裝完系統後找不到,難道是壞了?要怎麼辦?

[Freebsd] 使用 ADSL 撥接上網 Freebsd上要使用 ADSL 撥接上網,該如何設定?

UTF8中文字/全形一覽 快速查詢urf-8的中文字,共計13246中文字(5401常用字+7652罕用字+日文或編號),292全形符號,27半形符號。

一個邏輯的錯誤刪了全部檔案的經驗 今天本來想做一件很簡單的事,但卻足足浪費我多一倍的時間,再加上刪掉我全部的檔案,原因只是因為我自己的邏輯錯誤。

好用的3+2碼郵遞區號查詢系統推薦 網路上找到用地址輸入判斷3+2碼郵遞區號的辨識率不高,除了這個網站…