Hi,
ich habe mich eine Weile mit Apache2Piwik auseinander gesetzt und kam sehr schnell an die Grenzen des kleinen Programms. Nun bin ich am entwickeln eines eigenen Piwik Plug Ins.
Das Ziel ist das Einlesen verschiedener Datein (.log, .csv, .xml etc) die LogDaten verschiedener Server beinhalten. Die LogDaten können in unterschiedlicher Form vorliegen, dh. Standard Apache Log Format, IIS Log File Format, selbst zusammen gestelltes Format etc pp. In späterer Version soll das Einlesen auch von einem Cronjob übernommen werden können. … kurzum: ich hab noch viel vor xD
Apache2Piwik liest ein LogFile und tragt es direkt in die Piwik Datenbank ein. Der Vorgang ist schnell, hat aber den Nachteil, dass bei eventuellen Änderungen von Piwiks internen Aufbau A2P unbrauchbar wird.
Daher wollte ich eine andere Lösung suchen und fand die PiwikTracker.php. Mit deren Hilfe habe ich angefangen ein bissel rumzuspielen und komme im Moment leider nicht weiter : (
Das PlugIn hat den Namen LogFile2Piwik (jaja… ein bissel geklaut ist der Name schon xD). Aktuell habe ich im Controller eine LogZeile. Diese formatiere ich zu einem Array (das geht). Anschließend übergebe ich die Werte dem PiwikTracker.
Problem hierbei: der Log ist aus der Vergangenheit. Damit das getrackt wird, muss ich mein Super User token_auth mit geben. Dieses trage ich aber nicht als Wert ein, sondern bekomme es aus meiner getTokenAuth() Funktion. Wenn ich die $piwikTracker->setTokenAuth Zeile auskommentiere, und auf die Overview Seite meines PlugIns gehe, wird alles mit der aktuellen Server Zeit getrackt. Wenn ich die Zeile nicht auskommentiere, passiert nichts… Wenn ich mein TokenAuth direkt eingebe per $piwikTracker->setTokenAuth(‘AAA000AAA000’) passiert ebenfalls nichts. Wo ist der Fehler? o.O
Zweite Frage: Die Funktion $piwikTracker->doTrackPageView(’…’) gibt einen String zurück. Dieser ist immer(!) GIF89a�!�,D; wtf? was sagt mir das?
public function overview() {
// Einbinden der overview.tpl
$view = Piwik_View::factory('overview');
$this->parseLogs();
echo $view->render();
}
protected function parseLogs() {
// FORUMINFO: Log wurde von mir aus Sicherheitsgründen geändert
$logPageTitel = 'PAGETITLE';
$logString = '01.001.001.01 - - [18/Dec/2011:20:40:43 +0000] "GET /URL.URL/FILE?PARAMETER HTTP/1.1" 200 2658 "https://URL.URL/FILE?PARAMETER" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" "-"';
// FORUMINFO: Der LogParser formatiert den String zu einem netten Array. Das funktioniert!
$logArray = LogParser::formatLine($logString);
$piwikTracker = new PiwikTracker( 1, Piwik::getPiwikUrl() );
$piwikTracker->setTokenAuth( $this->getTokenAuth() ); // auskommentiert: geht, nicht auskommentiert: es passiert nichts... o.O'
$piwikTracker->setIp( $logArray['ip'] );
$piwikTracker->setForceVisitDateTime( $this->parseDateTimeToUNIX ($logArray['date'], '/', $logArray['time'], ':') ); // geht auch
$piwikTracker->setUrlReferrer( $logArray['referer'] );
$piwikTracker->setUserAgent( $logArray['agent'] );
$response = $piwikTracker->doTrackPageView( $logPageTitel ); // return GIFbinärzeichen, wieso?
}
protected function getTokenAuth() {
if ( !Piwik::isUserIsSuperUser() ) {
Piwik::exitWithErrorMessage('User must be Super User or Admin.');
}
$tokenAuth = Piwik::getCurrentUserTokenAuth();
if( $this->checkTokenAuth($tokenAuth) ) { // macht ein preg_match mit '/^([a-zA-Z0-9]){32}$/'
return $tokenAuth;
}
}
Ich hoffe jemand findet meinen Fehler : ) und entschuldigt das es schonwieder soviel Text wurde.
Gruß nana