Статьи

pChart пересматривается с помощью Google Analytics

Еще в декабре SitePoint опубликовал вводную статью, которую я написал для PHP-библиотеки pChart , которая создает привлекательные сглаженные диаграммы. Читатель предположил, что другие статьи могут последовать с дополнительными примерами, и поэтому я решил написать эту статью с помощью удобного устройства для визуальной проверки статистики веб-сайта с помощью Google Analytics .

API Google Analytics

Как известно большинству людей, Google Analytics — это инструмент отслеживания Google, который собирает такие данные, как количество посетителей, количество уникальных посетителей, количество страниц за посещение и страна посетителей вашего сайта. Добавление Google Analytics требует только создания учетной записи, профиля для каждого веб-сайта и добавления некоторого кода JavaScript на страницах, которые вы хотите отслеживать. Если вы новичок во всем этом, посетите справочный центр Google Analytics, чтобы узнать больше о настройке учетных записей и получении кода отслеживания. Как только отслеживание будет развернуто в течение короткого времени, вы можете посетить веб-сайт Google Analytics и просмотреть текущую статистику для вашего сайта (сайтов).

Кроме того, в Google Analytics есть API, который ваш скрипт может вызывать из запроса GET и получать в качестве ответа строку JSON. Эта строка после декодирования предоставляет данные, которыми может манипулировать серверный язык, такой как PHP. Например, если вы хотите регулярно и регулярно проверять статистику трафика для нескольких своих сайтов, вы можете создать в PHP персональную панель мониторинга, которая собирает необходимые данные через API-интерфейс Google Analytics и отображает их.

Хотя код отслеживания довольно прост в настройке и использовании, API немного сложнее. К счастью, Google и другие разработчики предоставляют ряд клиентских библиотек, таких как GAPI, интерфейс Google Analytics PHP5, который прост в использовании:

<?php
$ga = new gapi(USERNAME, PASSWORD);
$ga->requestReportData(REPORT_ID, DIMENSIONS, METRICS);

Первая строка выше создает объект gapi Требуемый адрес электронной почты и пароль совпадают с тем, который вы использовали для входа и создания учетной записи Google Analytics. Вторая строка вызывает метод, который правильно захватывает данные. Он имеет три обязательных аргумента: идентификатор профиля, измерения и метрики. Идентификатор профиля можно получить из панели управления Google Analytics, той же, которую вы использовали для создания учетной записи. Нажмите на значок настройки в правой части строки меню, выберите профиль и нажмите «Настройки профиля». Идентификатор профиля находится под заголовком General Information.

Размеры определяют тип отчета, который вы хотите. Например, измерение «дата» будет разбивать все результаты по дате. Метрики — это информация, которую вы ищете, в данном случае «посетители» и «новые посещения», причем последняя представляет собой процент посетителей, впервые посетивших сайт, по отношению к общему посещению. См. Документацию API для полного списка измерений и метрик.

Графические посещения

Предположим, я хочу отследить три сайта: castleofargh.com, knightsofni.com и thecamelotfollies.com. Предполагая, что отслеживание настроено для каждого сайта, мы начинаем создавать приложение панели мониторинга, собирая последнюю версию GAPI со страницы загрузки и извлекая содержимое zip-файла на сервер, на котором будет размещена панель мониторинга. Как только это будет сделано, я могу написать скрипт, который стал еще проще благодаря pChart.

Давайте начнем с включения необходимого стороннего кода:

 <?php
session_start();
define("PCHART_PATH", "/srv/www/lib/pChart");
define("GAPI_PATH", "/srv/www/lib/gapi");

set_include_path(get_include_path() . PATH_SEPARATOR . PCHART_PATH);
set_include_path(get_include_path() . PATH_SEPARATOR . GAPI_PATH);
require_once "class/pData.class.php";
require_once "class/pDraw.class.php";
require_once "class/pImage.class.php";
require_once "class/pPie.class.php";
require_once "gapi.class.php";

Обратите внимание, что pChart должен быть включен после открытия сеанса и перед отправкой чего-либо в браузер, в противном случае могут возникнуть ошибки «заголовки уже отправлены …».

После этого нам нужно будет настроить некоторые данные конфигурации и инициализировать некоторые полезные массивы. Я начал с массива, который содержит имена и идентификаторы профилей трех веб-сайтов, для которых мы будем отображать информацию, а затем инициализировал массивы для хранения названий доменов, количества посещений и количества новых посетителей.

 <?php
$trackedDomains = array(
    "castleofargh.com" => "56400824",
    "knightsofni.com" => "56418404",
    "thecamelotfollies.com" => "56417539");
$domainNames = array_keys($trackedDomains);
$domainVisits = array();
$domainNewVisits = array();

Так как мы следим за тремя сайтами, нам было бы лучше обернуть логику сбора данных в цикл:

 <?php
$ga = new gapi(USERNAME, PASSWORD);
$startDate = $endDate = strftime("%Y-%m-%d");
foreach ($trackedDomains as $domainName => $profileID) {
    $ga->requestReportData($profileID, array("date"),
        array("visits", "newvisits"), null, null,
        $startDate, $endDate);
    foreach($ga->getResults() as $result) {
      $domainVisits[] = $result->getVisits();
      $domainNewVisits[] = $result->getNewVisits();
    }
}

Строка выше запрашивает API для всех посещений и новых посетителей на сегодняшний день. Два нулевых параметра предназначены для фильтрации и сортировки форматов и требуются здесь только потому, что они предшествуют ограничениям даты в операторе определения функции.

reportRequestData () возвращает объект с одним массивом на каждый день отчета. Поскольку нас интересует только одна дата (значения $startDate$endDate

На данный момент у нас есть все три массива, заполненные соответствующими данными. Мы получим интересную часть использования pChart для создания круговой диаграммы, показывающей процентную долю каждого из трех веб-сайтов в общем количестве посещений за день.

Последующие строки определяют «точки» графика — которые для круговой диаграммы выражаются в виде угла каждого сектора его круга — и названия каждого веб-сайта, которые будут отображаться в виде меток. Обратите внимание, что хотя цифры представлены в виде абсолютных значений, в дальнейшем pChart будет отображаться в процентах.

 <?php
$myPieData = new pData();
$myPieData->addPoints($domainVisits, "Visits");
$myPieData->addPoints($domainNames, "Names");
$myPieData->setAbscissa("Names");

Эта последняя инструкция необходима для использования доменных имен в качестве меток.

Объект диаграммы можно представить как прозрачный холст, на котором мы можем записывать и наносить данные, и он создается и получает видимую границу следующим образом:

 <?php
$myPiePicture = new pImage(700,490, $myPieData);
$myPiePicture->drawRectangle(1,1, 699,489,
    array("R" => 0, "G" => 0, "B" => 0));
$myPiePicture->setGraphArea(50,50, 650,440);

Холст был определен как 700 пикселей в ширину и 490 пикселей в высоту, и на него будут наноситься данные из набора данных $ myPieData. Граница помещается в один пиксель внутри холста. Собственно область графика была определена с полем в 50 пикселей относительно холста объекта изображения.

Затем создайте строку для хранения заголовка изображения и сгенерируйте соответствующий текст:

 <?php
$title = "Visitation Distribution Among Websites - " . 
    strftime("%m/%d/%Y", strtotime($today));
$myPiePicture->drawText(350,3, $title, array(
    "R" => 0, "G" => 0, "B" => 0,
    "FontName" => PCHART_PATH . "/fonts/calibri.ttf",
    "FontSize" => 15,
    "Align" => TEXT_ALIGN_TOPMIDDLE));
$myPiePicture->drawFilledRectangle(50,50, 650,440, 
    array("R" => 200, "G" => 200,"B" => 200));

Метод drawText () помещает прямоугольный прямоугольник, «прикрепленный» к холсту, в x пикселях слева и y от верхней стороны области объекта диаграммы. Положение на поле, где он будет закреплен, задается атрибутом align. Выше, текстовая область с дескриптором графика ($ title) имеет среднюю точку своей верхней границы, расположенную в точке 350 пикселей слева и в 3 пикселях от верхней границы холста. Я также добавил сероватый фоновый прямоугольник с границами в 50 пикселей от границ холста.

Теперь давайте определим хороший шрифт и создадим объект круговой диаграммы. Позже это будет отображено как изображение PNG:

 <?php
$myPiePicture->setFontProperties(array(
    "FontName" => PCHART_PATH . "/fonts/calibri.ttf",
    "FontSize" => 11));
$myPieChart = new pPie($myPiePicture, $myPieData);

pChart позволяет нам определять цвета кусочков пирога. Давайте сделаем их красными, зелеными и синими:

 <?php
$myPieChart->setSliceColor(0, array("R" => 128, "G" => 0, "B" => 0));
$myPieChart->setSliceColor(1, array("R" => 0, "G" => 128, "B" => 0));
$myPieChart->setSliceColor(2,array("R" => 0, "G" => 0,"B" => 128));

Метод draw3DPie сделает $ myPieChart визуализированным как наклонный пирог в 3d. Здесь я использовал радиус 200 пикселей, что создаст довольно большой график:

 <?php
$myPieChart->draw3DPie(350,245, array("Radius"=>200,
    "DrawLabels" => true,"Border" => true,
    "WriteValues" => PIE_VALUE_PERCENTAGE));

Все, что нам нужно сделать сейчас, это визуализировать изображение с круговой диаграммой:

 <?php
$myPiePicture->Render("myPieChart.png");

В дополнение к круговой диаграмме я хочу, чтобы гистограмма с накоплением визуально показывала количество новых посетителей по отношению к общему количеству посещений. Следующие строки должны быть просты для понимания, но, пожалуйста, обратите внимание, что теперь у нас есть 2 ряда данных, один для посещений (как для круговой диаграммы), а другой для новых посетителей:

 <?php
$myBarData = new pData();
$myBarData->addPoints($domainVisits, "Visits");
$myBarData->addPoints($domainNewVisits, "New Visits");
$myBarData->addPoints($domainNames, "Names");
$myBarData->setAbscissa("Names");
$myBarPicture = new pImage(700,490, $myBarData);
$myBarPicture->drawRectangle(1,1, 699,489,
    array("R" => 0,"G" => 0, "B" => 0));
$myBarPicture->setGraphArea(50,50, 650,440);
$title = "Visits and New Visits - " . 
    strftime("%m/%d/%Y", strtotime($today));
$myBarPicture->drawText(350,3, $title, 
    array("R" => 0, "G" => 0, "B" => 0, 
    "FontName" => PCHART_PATH . "/fonts/calibri.ttf",
    "FontSize" => 15,
    "Align" => TEXT_ALIGN_TOPMIDDLE));
$myBarPicture->drawFilledRectangle(50,50, 650,440,
    array("R" => 200,"G" => 200, "B"=>200));
$myBarPicture->setFontProperties(array(
    "FontName" => PCHART_PATH . "/fonts/calibri.ttf",
    "FontSize" => 11));
$myBarPicture->drawScale(array("DrawSubTicks" => false,
    "Mode" => SCALE_MODE_ADDALL));

Здесь мы создаем столбчатую диаграмму с накоплением и ее легенду, которая будет взята из определения ряда с помощью addPoints ():

 <?php
$myBarPicture->drawStackedBarChart(array("DisplayValues" => true,
    "DisplayColor" => DISPLAY_AUTO, "Rounded" => true,
    "Surrounding" => 60));
$myBarPicture->drawLegend(510,205, array("FontSize" => 12,
    "Mode" => LEGEND_HORIZONTAL));

Опять же, все, что мы должны сделать сейчас, это визуализировать гистограмму и…

 <?php
$myBarPicture->Render("myBarChart.png");

Резюме

Демонстрационный код для этой статьи доступен на GitHub для вас, чтобы поиграть и поэкспериментировать. pChart может использоваться для создания приложения, такого же простого, как и эти, но также и для полноценной панели управления для управления любым видом процесса, который можно измерить и представить с помощью API. Используйте любой механизм обновления (например, перезагрузку JavaScript или мета-обновление), и созданный вами скрипт может постоянно отображать обновленную статистику.

Изображение через Alaris / Shutterstock