Статистика переходов по рекламе: Пример реализации
В этой статье мы рассмотрим, как можно эффективно организовать учет переходов с помощью PHP и SQL, основываясь на нашем коде. Мы будем использовать таблицу statistics_ads для записи информации о переходах по рекламным объявлениям и добавим улучшения, позволяющие отслеживать больше данных о пользователях.
1. Основная функция для рекомендации
Основной метод suggestedAction отвечает за обработку кликов пользователей на рекламные блоки. Давайте рассмотрим, как она работает:
public function suggestedAction() {
// Получаем алиас из маршрута
$alias = $this->route['alias'] ?? '';
$url = null; // url empty default
$isProgramClick = 1; // is default program click
$isRandomClick = 0; // is default random click
$tableName = 'suggested'; // default table name
// Запрос для получения URL программы по алиасу
if (!empty($alias)) {
// Попробуем получить URL из основной таблицы, если задан alias
$url = R::getRow('SELECT suggested.id,suggested.program_url FROM suggested WHERE suggested.program_alias = ?', [$alias]);
}
// Проверка на пустой URL и попытка получить URL из другого источника
if (empty($url) && !empty($alias)) {
// Если не нашли в основной таблице и alias задан, проверяем таблицу popup
$url = R::getRow('SELECT suggested_popup.id,suggested_popup.program_url FROM suggested_popup WHERE suggested_popup.program_alias = ?', [$alias]);
if (!empty($url)) $tableName = 'popup';
}
// Если все еще нет URL, получаем случайный
if (empty($url)) {
// Если ни в одной из таблиц не нашли, выбираем случайный URL из основной таблицы
$url = R::getRow('SELECT suggested.id,suggested.program_url FROM suggested ORDER BY RAND() LIMIT 1');
$isProgramClick = 0;
$isRandomClick = 1;
}
// Получаем информацию о переходе
$programId = $url['id']; // ID программы
$ipAddress = get_ip(); // Получаем IP-адрес пользователя
$userAgent = $_SERVER['HTTP_USER_AGENT']; // Получение user agent
$referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; // Получение реферала
// Записываем клик по программе
$this->recordTransition($programId, $ipAddress, $userAgent, $referrer, $isProgramClick, $isRandomClick, $tableName);
redirect($url['program_url']); // Редирект на URL программы
}
2. Функция записи перехода
Функция recordTransition отвечает за запись переходов и обработку существующих записей:
public function recordTransition($programId, $ip, $userAgent, $referrer, $isProgramClick, $isRandomClick, $tableName) {
// Проверка существования записи по IP и программному ID
$existingRecord = R::getRow("SELECT * FROM statistics_ads WHERE guest_ip = ? AND program_id = ? LIMIT 1", [$ip, $programId]);
$cookieName = 'program_click_' . $programId; // Уникальное имя куки для программы
if ($existingRecord) {
// Обновляем данные в зависимости от клика
if (!isset($_COOKIE[$cookieName])) {
$this->setProgramClickCookie($programId); // Установка куки для первого клика
} else {
if (!empty($isProgramClick) && empty($isRandomClick)) {
// Увеличиваем program_click, если isProgramClick - 1 (true)
R::exec("UPDATE statistics_ads SET random_click = random_click + 1 WHERE id = ?", [$existingRecord['id']]);
} else {
// Увеличиваем random_click, если isRandomClick - 1 (true)
R::exec("UPDATE statistics_ads SET program_click = program_click + 1 WHERE id = ?", [$existingRecord['id']]);
}
}
} else {
// Записываем новый переход
R::exec("INSERT INTO statistics_ads (program_id, program_click, random_click, referrer, guest_ip, user_agent, table_name) VALUES (?, ?, ?, ?, ?, ?, ?)", [$programId, $isProgramClick, $isRandomClick, $referrer, $ip, $userAgent, $tableName]);
$this->setProgramClickCookie($programId); // Установка куки для нового клика
}
}
3. Установка куки
Установка куки для уникального идентификатора программы:
private function setProgramClickCookie($programId) {
$cookieName = 'program_click_' . $programId; // Уникальное имя куки для каждой программы
setcookie($cookieName, 'clicked', time() + 3600, '/'); // Хранение куки 1 час
}
В файле function.php (или другом вспомогательном файле) можно создавать пользовательские функции в PHP одна из них будет get_ip();
/*
Function for determining the client's IP address:
*/
function get_ip()
{
$value = '';
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$value = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$value = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (!empty($_SERVER['REMOTE_ADDR'])) {
$value = $_SERVER['REMOTE_ADDR'];
} return $value;
}
Заключение
Ваша система учета переходов благодаря вышеописанному коду становится более эффективной и гибкой. Мы добавили возможность отслеживания кликов, учитывая IP-адреса и пользовательские агенты, что даст вам дополнительные возможности для анализа рекламных кампаний. Если возникнут вопросы или нужна помощь с доработкой, обращайтесь!
Добавить комментарий или задать вопрос ツ
Комментариев нет