matomo-utf16-converter/convert.php

56 lines
2.0 KiB
PHP

<?php
// config
$row_delimiter = "\n";
$col_delimiter = ",";
$date_keyword = "Date";
// Matomo API settings
$site_id = 1;
$auth_token = "your matomo auth token here";
$csv_url_prefix = "https://tracking.example.com/index.php";
$csv_url_suffix = "&filter_limit=-1&format=CSV&format_metrics=0&idSite=".$site_id."&language=en&module=API&token_auth=".$auth_token."&translateColumnNames=1";
// init variables
$csv_url = '';
$row_counter = 0;
$date_col_index = -1;
global $date_col_index;
//$csv_date_range = "2020-06-01,2020-06-30";
$csv_date_range = $_GET['range'];
switch ($_GET['type']) {
case 'events':
$csv_url = $csv_url_prefix."?date=".$csv_date_range."&method=Events.getAction&period=day&flat=1".$csv_url_suffix;
break;
case 'custom_event':
$csv_url = $csv_url_prefix."?date=".$csv_date_range."&method=Actions.getPageUrls&period=month&flat=1&filter_pattern_recursive=eventname".$csv_url_suffix;
break;
case 'visits':
default:
$csv_url = $csv_url_prefix."?date=".$csv_date_range."&method=API.get&period=day".$csv_url_suffix;
break;
}
$csv_string = file_get_contents($csv_url);
$csv_string = $s = iconv('UTF-16', 'UTF-8', $csv_string); // convert Matomo's UTF-16 to UTF-8
$data = str_getcsv($csv_string, $row_delimiter); // parse rows
foreach($data as &$row) {
if ($row_counter == 0) { // header row
$row = str_getcsv($row, $col_delimiter); // parse columns
$date_col_index = array_search($date_keyword, $row); // find Date column index
$row = implode($col_delimiter, $row); // combine colums
} else { // content row
if ($date_col_index >= 0) { // date column has been found
$row = str_getcsv($row, $col_delimiter); // parse columns
$row[$date_col_index] = date("Y-m-d", strtotime($row[$date_col_index])); // modify date format
$row = implode($col_delimiter, $row); // combine colums
}
}
$row_counter++;
}
$data = implode($row_delimiter, $data); // combine rows
echo $data