當前位置:首頁 » 數據倉庫 » piwik資料庫文檔
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

piwik資料庫文檔

發布時間: 2023-02-10 00:32:30

『壹』 關於網站頁面訪問量統計的問題

技術問題,還是去技術論壇吧


  1. 關於頁面刷新後不會自動+1,指的是頁面短期內一直刷新在同一個瀏覽器刷新不會被記錄,在不同電腦一定間隔時間後點擊該頁面可以被記錄


關於這個需求,你又不是做投票軟體,記錄用戶ip地址,用戶刷新一次或點擊就算一次點擊,不用做的這么精確吧!


一般統計網頁程序,都是內嵌js腳本,你建立一個用於統計的js公用文件,然後需要統計的頁面都引用他。


請參考Piwik


<!--LoadPiwik.-->
<scripttype="text/javascript">
document.write(unescape("%3Cscriptsrc='"+(("https:"==document.location.protocol)?"https://demo2.piwik.org/":"http://demo2.piwik.org/")+"piwik.js'type='text/javascript'%3E%3C/script%3E"));
</script><scripttype="text/javascript">
try{
varpiwikTracker=Piwik.getTracker((("https:"==document.location.protocol)?"https://demo.piwik.org/":"http://demo.piwik.org/")+"piwik.php",1);
piwikTracker.setCookieDomain('*.piwik.org');
if(document.domain!='piwik.org'){
piwikTracker.setDocumentTitle(document.domain+"/"+document.title);
}
//,intheCustomVariable
if(!piwikTracker.getCustomVariable(1)){
piwikTracker.setCustomVariable(1,"Domainlanded",document.domain);
}
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
}catch(err){}
</script><noscript><p><imgsrc="http://demo.piwik.org/piwik.php?idsite=1"style="border:0"alt=""/></p></noscript>
<!--EndPiwikTag-->


每次頁面載入完畢,js就往你後台發一個請求,這個請求包含了,比如說客戶端訪問的url,然後d電腦解析度啊什麼的,到伺服器端,你能得到ip地址,解析一下http請求頭,也能得到一些信息。


然後記錄下來。

『貳』 如何開發 Piwik 插件

1,插件的作用
1,收集目前piwik目前不能跟蹤的數據
2,定義新的小物件(widgets)能夠用當前可用的或者新的數據形成可見的圖像等。(類似形成報表?)
3,定義新的或者覆蓋已經存在的項目來定製我們自己的Piwik
4,提供某種API,並且自動生成我們易於理解的數據格式。
2,統計跟蹤是如何工作的。
在我們開始寫我們自己的插件之前,我們要知道piwik是如何跟蹤並且加工數據的。最好的辦法是我們安裝一個新的Piwik程序,並觀察他的資料庫布局。
資料庫圖示地址:http://cdn.geekmonkey.org/assets/files/000/000/025/screen/piwik-db-schema.png?1356779711
3,跟蹤:
每當有訪問者來訪問我們可用piwik的網站的時候,JavaScript都會提交一個訪問過piwik.php腳本的關於訪問者以及訪問頁面的最基本的數據設置信息,這個腳本會攜帶合法的數據,並將他存放到資料庫中去。跟蹤插件能夠修改並添加數據
例如:
_log_visit 表:存儲每個新的訪問實體
_log_link_visit_action:訪問者隨後訪問的頁面。
_log_action: 目前為止,piwik追蹤到的目前訪問者訪問過的頁面作為實體存放到這類表中。這類表是被_log_link_visit_action引用的。
4,處理
未加工的數據是指在我們追蹤過程中不能被直接展示出來的數據。對於資料庫來說,計算所有的請求負荷太高。因此,piwik處理這些數據為可視化,這個處理叫做存檔。
當你訪問piwik介面的時候就會產生存檔。在高流量網站上,存檔應該由cronjob來完成,原數據被處理並放到存檔表中。
5,存檔
每個月的由piwik監測的數據,在資料庫中會創建兩個表,這兩個表分別為:_archive_YEAR_MONTH,_archive_numeric_YEAR_MONTH,包含的內容為那個月的處理數據
比如2013-06那麼對應的表為:piwik_archive_2013_06,piwik_archive_numeric_2013_06
6,插件結構:
文件結構:
插件都放在plugins/文件中,每個插件都是它的子文件夾

plugins/
|-- VisitFrequency
| |-- API.php
| |-- Controller.php
| |-- templates
| | |-- index.tpl
| | `-- sparklines.tpl
| `-- VisitFrequency.php

多數的插件都不少與3個php文件和一些視圖模板。
基本布局
為了能夠讓piwik插件能夠工作,插件系統要遵循一些約定
<a>:插件要有一個和它所在插件目錄名稱相同的php文件。所以如果你想開發一個名為VisitorForeCast的插件,就需要創建一個名為 VisitorForeCast的目錄,並且目錄里包含一個名為VisitorForeCast.php文件。
<b>:創建一個繼承Piwik_Plugin類的Piwik_VisitorForeCast 類

<?php class Piwik_VisitorForecast extends Piwik_Plugin { }
plugins/VisitorForecast/VisitorForecast.php

Piwik_Plugin有一個抽象方法getInformation()的抽象類,我們要繼承,他的返回值為如下內容,當然也可以參考其他插件,下面內容為core/Plugin.php 內容,這個數組必須返回一個關聯數組,這個數組包含有關於這個插件相關信息。
/**
21 * Returns the plugin details
22 * - 'description' => string // 1-2 sentence description of the plugin
23 * - 'author' => string // plugin author
24 * - 'author_homepage' => string // author homepage URL (or email "mailto:[email protected]")
25 * - 'homepage' => string // plugin homepage URL
26 * - 'license' => string // plugin license
27 * - 'license_homepage' => string // license homepage URL
28 * - 'version' => string // plugin version number; examples and 3rd party plugins must not use Piwik_Version::VERSION; 3rd pa rty plugins must increment the version number with each plugin release
29 * - 'translationAvailable' => bool // is there a translation file in plugins/your-plugin/lang/* ?
30 * - 'TrackerPlugin' => bool // should we load this plugin ring the stats logging process?
31 *
32 * @return array
33 */
VisitorForeCast.php 文件的完整內容為:
<?php
class Piwik_VisitorCast extends Piwik_plugin {
public function getInformation() {
return array(
'description' => 'Provide a forecast of visits for the day',
'author' => 'Your Name',
'author_homepage' => 'http://yourwebsite.com',
'homepage' => 'http://example.com',
'license' => 'GPL v3 or later',
'license_homepage' => 'http://www.gnu.org/licenses/gpl.html',
'version' => '0.1',
'translationAvailable' => false,

);
}
}
?>
7,翻譯
Piwik可用超過45種語言,當我們想要創建我們習慣的插件的時候,我們可以利用piwik國際化的特性。如果想讓我們的插件支持轉譯(translations),我們需要 在getInformation方法中設置『translationAvailable』=true,設置完之後,Piwik將會在我們的插件的子文件夾lang/中尋找這個支持翻譯功能的字元串,無論我們想支持那種語言,我們都要准本一個用ISO(介http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes),639-1(http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes),alpha-2(http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes)命名的php文件。
每個語言文件(langle file)都要包含一個名字為:$translations的關聯數組,這個數組的鍵($key)映射到某個提供翻譯(translation)的文件。而這些鍵($keys)是所有的提供翻譯的文件之間共享的。當我們切換支持不同語言的時候,所依賴的正是這個語言文件。通常,這些鍵是用插件的名字作為前綴,例如,我們的VisitorForecast插件,如果想支持英文翻譯那麼就要命名為en.php ,完整路徑(pugins/VisitorForecast/lang/en.php),內容如下

<?php
$translations = array('VisitorForecast_PluginDescription'=>'')

?>
現在,我們給了翻譯文件一個描述行的鍵(VisitorForecast_PluginDescription),這樣一來,翻譯者工作起來就非常容易。Piwik提供了一個名為Piwik_Translate($key)方法,它將會根據(依賴)用戶選定語言返回用戶想要的轉化語言版本。

public function getInformation() { return array( 'description' => Piwik_Translate('VisitorForecast_PluginDescription'),
[..]
);
}
Plugin Information with i18n

好了,翻譯的內容基本介紹完了,有點暈。。。我們來整理下思路,如果看過wordpress的,可能會覺得有些地方有點像,都是為開發插件提供了最大的便利。便於部署,而不用動核心代碼。
現在我們已經有兩個文件。
1,Piwik_VisitorForecast.php, 它和插件的名字基本相同,只是用Piwik做為前綴,並且,他要繼承Piwik_Plugin類。它有一個方法名字叫getInformation(),它返回一個關於我們開發插件的描述信息,作者,作者的主頁,版本信息等。到現在此文件中的內容應該是如下內容

class Piwik_VisitorForecast extends Piwik_Plugin{
public function getInformation() {
$info = array(
//注意:VisitorForecast_PluginDescription'是我們在en.php文件中數組的鍵
'description' =>Piwik_Translate('VisitorForecast_PluginDescription'), 'author'=>'author_name',
'author_home'=>'home page', 'version'=>Piwik_Version::VERSION,
);
return $info;
}

}
2,en.php文件:他主要是為Piwik_Translage方法提供那個鍵,使得他獲取到en.php文件中的內容,那例子中的en.php文件中的內容就應該是下面這樣的。
命名為en.php ? 為什麼,上邊說了他要符合ISO,639-1,alpha-2的命名,具體可以看上邊三個字母後面的鏈接。就知道為什麼是en.php 而不是eng.php了。
<?php
$translations = array(
'VisitorForecast_PluginDescription'=>'Provide a forecast of visits for the day',
);
?>

8,Hooks(鉤子,wordpress中也有,我們部門經理(大牛)很提倡用wordpress哦!)
在Piwik內部,用了一個名字叫EventDispatcher(事件調度)的PHP包。我們的插件能將一個函數鉤到某個預定義的事件上,當事件觸發的時候會調用這個函數。
如果我們的插件需要注冊任何鉤子,我們就需要在我們的插件類中實現getListHooksRegistered 方法。還必須要返回一個數組,將鉤子的名稱和回調函數映射。
比如說,如果你的插件想要注意到每個新的訪問者,Piwik提供了一個叫Tracker.newVisitorInformation
鉤子,每當Piwik跟蹤到一個新的訪問者的時候,它就會被觸發。

public function getListHooksRegistered(){
return array(
'Tracker.newVisitorInformation'=>'addVisitorInformation'
);
}

public function addVisitorInformation($notification) {
//我們通過$notification參數的引用和鉤子關聯起來。
$visitorInfo = & $notification->getNotificationObject();
//獲取referrer_url
$url = $visitorInfo['referrer_url'];
//我們可以用這個url做一些事情
}

當事件觸發的時候,回調函數會取回一個對象通知,這個對象的內容取決於鉤子