MODx Snippets zum Auswerten von Piwik

von Thomas Jakobi am Mittwoch, 28. Juli 2010 um 23:56 Uhr.

Zum Auswerten von Piwik Ergebnissen habe ich ein paar kleine Snippets für MODx Evolution (1.x) zusammengeschrieben. Vielleicht können auch andere diese Snippets gebrauchen. Der Zugriff per Web-API auf Piwik ist leider etwas langsam. Je nach Hosting der MODx und Piwik-Installation sollte das Ergebnis gecacht und per Cronjob tageweise aktualisiert werden.

Das erste Snippet gibt eine Liste der meistgeklickten Dokumente aus. Der Template-Chunk zur Ausgabe lässt sich einfach anpassen.

PiwikBest.php
<?php
global $modx;
$limit = isset($limit) ? $limit : '5';
$tpl = isset($tpl) ? $modx->getChunk($tpl) : '';
$tpl = ($tpl != '') ? $tpl : '<b>[+keyword+]</b> ([+hits+] hits)<br>';
 
// Get the token on the API page inside your Piwik interface
$token_auth = '12345678991234567890123456789012';
 
$url = 'http://url.der.piwik.installation/';
$url .= '?module=API&method=Actions.getPageTitles';
$url .= '&idSite=1&period=month&date=yesterday';
$url .= '&format=PHP';
$url .= '&token_auth=' . $token_auth;
$fetched = file_get_contents($url);
$content = unserialize($fetched);
 
// case error
if (!$content) {
    return 'Error, content fetched = ' . $fetched;
}
$seiten = $modx->runSnippet('Ditto', array('tpl' => '@CODE:[+pagetitle+]|[+id+],', 'tplLast' => '@CODE:[+pagetitle+]|[+id+]', 'sortBy' => 'menuindex ASC', 'level' => '10'));
$seiten = explode(',', $seiten);
$check = array();
foreach ($seiten as $seite) {
    $seite = explode('|', $seite);
    $check[$seite[0]] = $seite[1];
}
$output = '';
$i = 1;
foreach ($content as $row) {
    $keyword = trim(urldecode($row['label']));
    $hits = $row['nb_visits'];
    if (array_key_exists($keyword, $check)) {
        $chunk = str_replace('[+keyword+]', $keyword, $tpl);
        $chunk = str_replace('[+id+]', $check[$keyword], $chunk);
        $output .= str_replace('[+hits+]', $hits, $chunk);
        if ($i++ == $limit) {
            return $output;
        }
    }
}
return $output;
 

Ein weiteres Snippet gibt die Hits zu einem per Parameter übergebenen Pagetitle aus.

PiwikHits.php
<?php
global $modx;
$pagetitle = isset($pagetitle) ? $pagetitle : '';
 
// Get the token on the API page inside your Piwik interface
$token_auth = '12345678991234567890123456789012';
 
$url = 'http://url.der.piwik.installation/';
$url .= '?module=API&method=Actions.getPageTitles';
$url .= '&idSite=1&period=year&date=yesterday';
$url .= '&filter_column=label&filter_pattern=' . urlencode($pagetitle);
$url .= '&format=PHP';
$url .= '&token_auth=' . $token_auth;
$fetched = file_get_contents($url);
$content = unserialize($fetched);
 
// case error
if (!$content) {
    return 'Error, content fetched = ' . $fetched;
}
$output = $content[0]['nb_hits'];
return $output;