Piwik網(wǎng)站統(tǒng)計(jì)平臺(tái)是一套基于PHP5+MySQL技術(shù)構(gòu)建的開源網(wǎng)站訪問統(tǒng)計(jì)系統(tǒng),前身是phpMyVisites。Piwik可以給你詳細(xì)的統(tǒng)計(jì)信息,比如網(wǎng)頁瀏覽人數(shù),訪問最多的頁面,搜索引擎關(guān)鍵詞等等流量分析功能。此外,它還采用了插件擴(kuò)展及開放API架構(gòu),可以讓用戶根據(jù) 自已的實(shí)際需求創(chuàng)建更多的功能。
軟件說明
最近為了給自己的web系統(tǒng)添加一個(gè)運(yùn)營(yíng)數(shù)據(jù)分析和展示的功能,本打算自己純手工打造,但是發(fā)現(xiàn)成本太高,時(shí)間和精力方面不允許。在網(wǎng)上查閱了一些資料,發(fā)現(xiàn)目前有許多開源的web數(shù)據(jù)分析系統(tǒng),所以拿來主意,決定找一個(gè)合適的開源web分析工具。最終選擇了piwik,理由如下:
Piwik采用LAMP開發(fā),我的系統(tǒng)也是,所以可以復(fù)用運(yùn)營(yíng)環(huán)境。
Piwik的架構(gòu)設(shè)計(jì)比較通用,可以開發(fā)插件進(jìn)行擴(kuò)展。
Piwik的數(shù)據(jù)顯示比較強(qiáng)大,至少看上去如此。例如有曲線圖,直方圖,餅圖,標(biāo)簽云等等。插件可以通過拖拽的方式任意布置。
開源,免費(fèi),并且有相對(duì)完整的文檔。
經(jīng)過了一段時(shí)間的摸索,我終于將開發(fā)插件的流程梳理清楚了,記錄于此,作為備忘。目前使用的Piwik是當(dāng)前最新版本,這點(diǎn)很重要。Piwik的部分接口不向前兼容,以至于很多基于早期版本開發(fā)的插件在當(dāng)前版本無法使用。本文的主要內(nèi)容如下:
Piwik工作原理
安裝部署Piwik
安裝Piwik插件
Piwik插件結(jié)構(gòu)
Hello World,你懂的!
Piwik模版
Piwik圖形視圖
待了解的地方 ……
工作原理
Piwik是一個(gè)web系統(tǒng),主要用于web運(yùn)營(yíng)分析。它會(huì)部署在你自己的apache和mysql中,這樣運(yùn)營(yíng)數(shù)據(jù)都在你自己的服務(wù)器里!安裝好Piwik后,它會(huì)提供一段js代碼,你只需要將這些代碼嵌入到你web中的每個(gè)網(wǎng)頁中(如果你的系統(tǒng)是用模版開發(fā)的,具有相同的footer模版,那么這里最適合放入這段代碼),那么每當(dāng)這些網(wǎng)頁被訪問時(shí),這些數(shù)據(jù)就會(huì)傳回給Piwik服務(wù)器。這里會(huì)有個(gè)問題,由于數(shù)據(jù)收集代碼放在html中,那么異步請(qǐng)求無法被統(tǒng)計(jì)到,因?yàn)檫@些請(qǐng)求不會(huì)返回完整的頁面,而是部分頁面或數(shù)據(jù)。不要緊,piwik提供web日志分析的功能(具體配置見這里),這樣就可以統(tǒng)計(jì)出所有的訪問數(shù)據(jù)。
使用說明
安裝部署Piwik
安裝Piwik的確很簡(jiǎn)單:下載開發(fā)包,解壓到apahce服務(wù)器web根目錄,配置piwik。Piwik在第一次訪問時(shí),提供了一個(gè)非常簡(jiǎn)介的安裝向?qū),指?dǎo)你一步一步的配置好piwik,具體步驟見這里。
安裝Piwik插件
插件的安裝也很簡(jiǎn)單,只需要將插件拷貝到piwik_src/plugins目錄下面,然后去piwik配置頁面啟用插件。具體步驟,參見這里。
Piwik插件結(jié)構(gòu)
Piwik源代碼目錄下的plugins目錄中是Piwik官方插件,其實(shí)官方插件是最好的學(xué)習(xí)參考。要?jiǎng)?chuàng)建你自己的第一個(gè)插件,首先需要給插件取一個(gè)響亮的名稱,這里就姑且稱之為“BourneliPlugin”吧!然后創(chuàng)建目錄piwik_src/plugins/BourneliPlugin。接下來,需要在此目錄下,創(chuàng)建兩個(gè)比較重要的文件:
BourneliPlugin.php:定義插件的基本信息、插件的位置
Controller.php:插件的CGI方法,可以理解為Web MVC模式中的Controller,Piwik框架會(huì)將插件相關(guān)的Url映射到Controller.php中的方法。
Hello World,你懂的!
按照上面的目錄結(jié)構(gòu),你的第一個(gè)插件的基本骨架就搭建成功了,現(xiàn)在我們來寫點(diǎn)什么,實(shí)現(xiàn)我們的第一個(gè)“Hello World”吧。先看看BourneliPlugin.php代碼,如下:
上面的代碼主要定義的插件的基本信息和插件掛接的位置,需要注意一下幾點(diǎn):
類的名稱必須是Piwik_BourneliPlugin并且繼承類Piwik_Plugin。聰明的你可能已經(jīng)發(fā)現(xiàn)類名的規(guī)律:Piwik_<YourPluginName>(大小寫不敏感)。確實(shí),<YourPluginName>代表插件目錄和插件文件的名稱。如果不按照這個(gè)約定,piwik是無法找到插件。
需要實(shí)現(xiàn)getInformation函數(shù),此函數(shù)返回插件描述信息,方便在Piwik的插件管理器中找到我們的插件。
實(shí)現(xiàn)postLoad方法,在此方法中掛接插件。此方法有四個(gè)參數(shù),分別是,widgetCategory,widgetName,ControllerName和ControllerAction,前面兩個(gè)主要是顯示作用,用于在主界面的widget管理器中找到你的插件。第三個(gè)方法是控制器方法,對(duì)應(yīng)Controller.php中的類,第四個(gè)參數(shù)是第三個(gè)參數(shù)對(duì)應(yīng)類中的具體方法,用于響應(yīng)用戶的請(qǐng)求。
接下來看看Controller.php中的代碼:
對(duì),你沒有看錯(cuò),Controller.php中的代碼就是這么簡(jiǎn)單!需要注意一下幾點(diǎn)
類的名稱遵循這個(gè)規(guī)律:Piwik_<YourPluginName>_Controller,否則Piwik_AddWidget的第三個(gè)參數(shù)無法找到對(duì)應(yīng)類。
類繼承Piwik_Controller類
helloWorld方法對(duì)應(yīng)Piwik_AddWidget函數(shù)的第四個(gè)參數(shù),輸出將直接顯示在widget的面板中。
OK,寫完了代碼,現(xiàn)在可以將BourneliPlugin整個(gè)目錄拷貝到piwik_src/plugins目錄下,看看效果了。
首先,進(jìn)入插件管理頁面,如下圖:
對(duì)應(yīng)導(dǎo)航:setting à Plugings à BourneliPlugin。可以看到description這一欄中顯示的文本就是在getInformation函數(shù)中對(duì)應(yīng)的字段輸出的信息。點(diǎn)擊最右邊的“Active”,啟用插件(否則不會(huì)出現(xiàn)在widget面板中)。
接下來,去widget面板中打開我們的“hello world”插件。如下圖:
可以看到Piwik_AddWidget函數(shù)中的第一個(gè)和第二個(gè)參數(shù)出現(xiàn)在哪里?最后點(diǎn)擊“hello world”,可以到我們的插件出現(xiàn)在Dashboard中,如下圖:
Piwik模版
使用PHP開發(fā)web,一般都會(huì)使用模版機(jī)制,這樣可以將view和model分開。Piwik也提供模版功能,Piwik沒有自己造車,而是直接使用了smarty模版庫,所以使用過smarty的同學(xué)一定不會(huì)陌生。即時(shí)沒有使用過,smarty的官方文檔比較完備,可以網(wǎng)上搜索查閱。接下來演示一個(gè)例子,看看如何在插件中使用模版。首先,在BournliPlugin目錄下添加一個(gè)templates目錄,并且在templates目錄中添加文件myTpl.tpl,內(nèi)容如下:
(寫這篇文章的時(shí)候天氣真的很糟。
然后在Controller.php中添加下面的代碼(前面例子中出現(xiàn)的代碼備省略了):
添加的函數(shù)是一個(gè)新的插件函數(shù),用于模版調(diào)用,可以看到第一行使用Piwik的視圖工廠,加載一個(gè)視圖對(duì)象,并將此對(duì)象與模版綁定。然后直接將字符串“okkkkkkkkkkkkkk”賦值給模版中的變量myString,最后渲染并輸出。
還沒完,雖然寫了這個(gè)函數(shù),但是沒有將其掛接到Piwik的widget面板中(即時(shí)不掛接面板,也可以訪問,有興趣的讀者可以通過抓包看看如何訪問),在BourneliPlugin.php中添加下面的代碼:
為了突出重點(diǎn),前面相同的代碼已經(jīng)省略。我們來看看效果,如下:
Piwik圖形視圖
Piwik內(nèi)置了一些圖形視圖,比如趨勢(shì)圖,直方圖,餅圖,云圖等。并且提供了十分簡(jiǎn)單的API供我們調(diào)用,我們所做的只是提供數(shù)據(jù)。先來看看幾種圖形:
感覺是不是很拉風(fēng)!使用上面的功能很簡(jiǎn)單,可以通過Piwik_src/plugins/ExampleUI這個(gè)插件來了解具體的使用,此插件專門用作demo。我在這里簡(jiǎn)要說名一下步驟:
首先在BourneliPlugin目錄下創(chuàng)建名為API.php的文件,在此文件中創(chuàng)建名為Piwik_BourneliPlugin_API的類,命名規(guī)則為Piwik_YourPluginName_API。需要注意,此類必須實(shí)現(xiàn)單一模式。
Piwik_BourneliPlugin_API中的方法主要是用于獲取數(shù)據(jù)并將你的數(shù)據(jù)填充到名為Piwik_DataTable的容器中,該類是Piwik自定義類,用于統(tǒng)一數(shù)據(jù)格式。
最后在Controller中的CGI方法中將對(duì)應(yīng)視圖與API中的數(shù)據(jù)提供方法鏈接起來,就可以完成數(shù)據(jù)展示了。
這里提供實(shí)驗(yàn)的完整例子,讀者也可以查看Piwik官方提供的ExampleUI這個(gè)例子中的源代碼,相信會(huì)更好,因?yàn)楸救艘彩菂⒄者@個(gè)例子完成實(shí)驗(yàn)的。同時(shí),不要忘記直接查看Piwik的源代碼,這樣會(huì)更直接。