資料來源
Google Analytics 提供了流量分析與統計的免費工具,一般來說都是在網頁中掛上 JavaScript 就可以進行資料蒐集,在 App 也可以透過 SDK 進行資料蒐集。那為什麼要在圖片中加入 Google Analytics 呢?要這樣做的情況比較特別,當有時候我們沒有網頁更改權限時,傳統的掛載方式就無法進行了。這樣的情況像是「露天拍賣」與「Y 拍」等等的電商平台都是禁止在商品描述中加入 JavaScript,然而在台灣的主流拍賣平台,對於分析功能實在有點弱,所以只少自己想辦法實作流量分析。
其實概念很簡單,既然無法在商品中加入 JavaScript 程式碼(總不能使用 XSS 攻擊吧!!),那我們就利用載入外站圖片的動作來蒐集統計資料,並且植入自己可以控制的 Cookie 來保持使用者資訊。大致的實現流程如下:
在這裡我們透過 php-ga 這個函式庫來完成 (可以在 GitHub 中取得),官方網站介紹的使用方法實在再簡單不過了,最最基本的程式碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
useUnitedPrototype\GoogleAnalytics;
// Initilize GA Tracker
$tracker=newGoogleAnalytics\Tracker('UA-12345678-9','example.com');
// Assemble Visitor information
// (could also get unserialized from database)
$visitor=newGoogleAnalytics\Visitor();
$visitor->setIpAddress($_SERVER['REMOTE_ADDR']);
$visitor->setUserAgent($_SERVER['HTTP_USER_AGENT']);
$visitor->setScreenResolution('1024x768');
// Assemble Session information
// (could also get unserialized from PHP session)
$session=newGoogleAnalytics\Session();
// Assemble Page information
$page=newGoogleAnalytics\Page('/page.html');
$page->setTitle('My Page');
// Track page view
$tracker->trackPageview($page,$session,$visitor);
|
更有效地使用 php-ga 蒐集流量資訊
但是上述的程式碼並沒有持續地保留使用者的 Session 與 Visitor,造成每次執行都被判斷為新的使用者,這樣如果要對流量進行後續的分析,效果會打打折扣,完全沒有「跳出率」、「重新造訪」、「單一使用者瀏覽頁數」等等的資訊可以分析。
為了解決這個問題,我們可以利用 PHP 自有的 $_SESSION 來保留造訪者的連線,我已將這個專案 Fork 並且加上比較方便實作的功能,程式可以在 GitHub Project 取得,或者直接下載函式庫。
最後整合圖片的使用方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
<?php
// set time zone
date_default_timezone_set('Asia/Taipei');
// Initialize GoogleAnalytics
require(__DIR__.'/libs/php-ga/autoload.php');
useUnitedPrototype\GoogleAnalytics;
$persistManager=newGoogleAnalytics\PersistManager();
// Initialize GA Tracker, Session and visitor
$tracker=$persistManager->makeTracker('UA-88888888-8','example.com');
$visitor=$persistManager->getVisitor();
$session=$persistManager->getSession();
// Assemble Page information
$page=newGoogleAnalytics\Page('/track.html');
$page->setTitle('Your Title');
// Track page view
$tracker->trackPageview($page,$session,$visitor);
// Store to $_SESSION
$persistManager->store();
// Load file
$filepath=__DIR__.'/your-image.jpg';
$filename=basename($filepath);
// Set Http Herder
Header('Content-Description: File Transfer');
Header('Content-type: '.mime_content_type($filename));
Header('Content-Transfer-Encoding: binary');
Header('Expires: 0');
Header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
Header('Pragma: public');
Header('Content-Length: '.filesize($filepath));
// output image file
$fp=fopen($filepath,'r');
while(!feof($fp)){
echofgets($fp);
ob_flush();
}
fclose($fp);
exit(0);
|
參考資料
留言列表