Вашему внимаю предоставляется скрипт для получения количества визитов по всем счетчикам, что у вас есть в яндекс метрике.
Разрабатывался он под определенный сайт, поэтому в нем лишь берутся две переменные - это количество визитов за сегодня, а также за текущий месяц. Для того, что бы сильно не нагружать сервер, в скрипт добавлено кеширование данных.
18.03.2015 - Апдейт скрипта. Добавлена документация, изменился вызов функции, а также теперь можно поставить данный скрипт на крон
require_once $_SERVER['DOCUMENT_ROOT'].'/yandex.metrika.php';
$YandexMetrika = new YandexMetrika(TRUE); // TRUE - будет брать данные только из кеша, даже если они устарели
echo "Общее количество посещений за сутки: ".YandexMetrika->Result['TotalVisitsDay']." <br/>Общее количество посещений за текущий месяц: ".$YandexMetrika->Result['TotalVisitsMonth'];
Пример файла кеша представлен ниже, колонки по порядку слева на право: время последнего запроса (php функция time()),кол-во посещений за сутки, кол-во посещений за текущий месяц.
1394727601|25906|415263
Ну и сам скрипт (скачать можно внизу страницы):
<?php
/**
* Class YandexMetrika
* Данный класс необходим для получения статистики за сутки|месяц
*/
class YandexMetrika
{
/**
* @var string
*/
private $_token = "c32ccdf8252c44e23452343275854ec";
/**
* @var int
*/
private $_CacheTime = 3600; // 1 час
/**
* Путь к файлу кеша
* @var string
*/
private $_CacheFile = '';
/**
* @var array
*/
private $_CounterList = array();
/**
* @var int
*/
private $_TotalVisitsDay = 0;
/**
* @var int
*/
private $_TotalVisitsMonth = 0;
/**
* @var array
*/
public $Result = array();
/**
* Constructor
*
* @param bool $use_only_cache
*/
function __construct($use_only_cache = FALSE)
{
$this->_CacheFile = JPATH_BASE . DS .'cache'. DS .'yandex.metrika.cache';
if (!$this->_GetCache($use_only_cache)) {
if ($this->_GetCounterList()) {
$this->_GetCount(); //получаем сумму посещений за сутки и за месяц по каждому счетчику
$this->_SetCache(); //устанавливаем кеш
}
}
$this->Result = array(
"TotalVisitsDay" => number_format($this->_TotalVisitsDay, 0, '.', ' '),
"TotalVisitsMonth" => number_format($this->_TotalVisitsMonth, 0, '.', ' ')
);
}
/**
* Получение массива счетчиков, со статусом "ОК"
*
* @return bool
*/
private function _GetCounterList()
{
$url = "http://api-metrika.yandex.ru/counters?oauth_token=" . $this->_token;
$results_page = file_get_contents($url, false);
if ($results_page) {
$CounterList = new SimpleXMLElement($results_page);
foreach ($CounterList->children() as $CounterListChildren) {
foreach ($CounterListChildren->counter as $AllCounter) {
$site = (string)$AllCounter->site;
$code_status = (string)$AllCounter->code_status;
$id = (int)$AllCounter->id;
if ($code_status == "CS_OK") {
$this->_CounterList[$site] = array(
"id" => $id,
"site" => $site
);
}
}
}
} else {
return FALSE;
}
return TRUE;
}
/**
* Получение статистики посещений за сегодня
* Получение статистики посещений за текущий месяц по каждому сайту
*/
private function _GetCount()
{
$start_date = date("Ym01");
$now_date = date("Ymd");
foreach ($this->_CounterList as $CounterList) {
$url = "http://api-metrika.yandex.ru/stat/traffic/summary?id=" . $CounterList['id'] . "&date1=" . $start_date . "&date2=" . $now_date . "&group=day&oauth_token=" . $this->_token;
$results_page = file_get_contents($url, false);
$GetSumm = new SimpleXMLElement($results_page);
foreach ($GetSumm->data as $GetData) {
foreach ($GetData as $GetRow) {
$date = (int)$GetRow->date;
if ($date == $now_date) {
$TotalVisitsDay = (int)$GetRow->visits;
$this->_TotalVisitsDay = $this->_TotalVisitsDay + $TotalVisitsDay;
}
}
}
$TotalVisitsMonth = (int)$GetSumm->totals->visits;
$this->_TotalVisitsMonth = $this->_TotalVisitsMonth + $TotalVisitsMonth;
}
}
/**
* Получение данных из файла
*
* @param $use_only_cache
* @return bool
*/
private function _GetCache($use_only_cache)
{
if (file_exists($this->_CacheFile)) {
$Cache = file_get_contents($this->_CacheFile);
if (!empty($Cache)) {
$Cache = explode("|", $Cache);
$CacheTimeExpired = $Cache[0] + $this->_CacheTime;
if ($use_only_cache || $CacheTimeExpired > time() || ($use_only_cache && $CacheTimeExpired > time())) {
$this->_TotalVisitsDay = $Cache[1];
$this->_TotalVisitsMonth = $Cache[2];
return true;
}
}
}
return false;
}
/**
* Установка данных в файл
*
* @return bool
*/
private function _SetCache()
{
$Cache = time() . '|' . $this->_TotalVisitsDay . '|' . $this->_TotalVisitsMonth;
if (!file_put_contents($this->_CacheFile, $Cache, LOCK_EX)) {
echo "Не возможно записать кеш яндекс метрики";
return false;
}
return true;
}
}
Пример кода крона:
require_once 'yandex.metrika.php';
$YandexMetrika = new YandexMetrika();
print_r($YandexMetrika->Result);