Пожалуй напишу небольшой пост про недавнее нововведение на
Давно была идея сделать онлайн просмотр на сайте. Даже есть рабочий прототип, но так не смогли определиться в каком виде все-таки его оформить чтобы было удобно. В общем решили сделать это путем добавления видео прямо в релиз.
Видео берется из VK. Собственно встал вопрос о логах/просмотрах. Я люблю логи и стараюсь их делать везде где нужно и не нужно 🙂
В данном случае мне помог плагин , так как он уже стоял для просмотра скриншотов в релизах, я использовал его и для того чтобы показывать фрейм с видео из Вконтакта. Вот и дошло дело до статистики. Как оказалось у ЛайтБокса есть обработчики для таких событий как открытие и закрытие окна. А если еще точнее то 4 обработчика: перед открытием, после открытия, перед закрытием(на кнопку) и после закрытия соответственно. Решил плюсовать просмотр к видео после открытия.
С вопросом когда писать лог разобрались, дальше вопрос «как?«.
А тут все очень просто — AJAX, пару строк говнокода для ajax обработчика и вот статистика уже лежит в базе и ждет пока её кто-нибудь прочитает.
А теперь перейдем ближе к телу(функции) 🙂
Вызов функции из ЛайтБокса
| 
					 1  | 
						data-lyte-options="afterStart:video_view"  | 
					
Функция для отправки данных на ajax обработчик
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						function video_view() { 	$.ajax({ 		url: encodeURI("./ajax.php"), 		cache: !1, 		type: 'post', 		data: {video: $("input[name=video]").val(), uid: $("input[name=uid]").val()}, 		dataType: 'json', 		success: function(data) {} 	}); }  | 
					
А вот и сам обработчик ajax.php
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32  | 
						<?php 	$config = array( 'hostname' => 'localhost', 'username' => 'root', 'password' => 'root', 'dbname' => 'database' ); 	if( !mysql_connect($config['hostname'], $config['username'], $config['password']) ) 	{ 		exit();  	} 	if( !mysql_select_db($config['dbname']) ) 	{ 		exit(); 	} 	mysql_query("SET NAMES 'utf8'");  	Header("Cache-Control: no-cache, must-revalidate"); 	Header("Pragma: no-cache"); 	Header("Content-Type: text/javascript; charset=utf-8");  	$video = (int)$_REQUEST["video"]; 	$uid = (int)$_REQUEST["uid"]; 	if(empty($uid)) { $uid = $_SERVER['REMOTE_ADDR']; } 	if(empty($video)) { echo "0"; } 	else 	{ 		mysql_query("INSERT INTO `video_views` (`uid`, `video`, `time`) VALUES ('{$uid}', '{$video}', '" . time() . "')"); 		echo "1"; 	} ?>  | 
					
Теперь немножко про сами логи. Что же мы записываем в базу?
| 
					 1 2 3 4 5 6 7 8  | 
						CREATE TABLE IF NOT EXISTS `video_views` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `uid` varchar(11) NOT NULL DEFAULT '0',   `video` int(11) NOT NULL,   `time` int(11) NOT NULL,   PRIMARY KEY (`id`),   UNIQUE KEY `unique_view` (`uid`,`video`) ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;  | 
					
Пишем мы туда
идентификатор пользователя — ID(если авторизирован) или IP(если гость)
ID видео/релиза — integer
Время просмотра — UNIX timestamp
IP записываем для гостей потому что просмотр разрешен всем, даже без регистрации
И буквально пару слов про уникальность дабы не плодить овер9000 просмотров, был создан уникальный индекс в таблице состоящий из полей video и uid, что сводит статистику к более точным показателям.
За 5 дней с момента запуска набралось порядка 1000 просмотров. Судя по статистике «старички» которые уже были зарегистрированы предпочитают релизы скачивать, а не созерцать в онлайне.
Ах да еще, чтобы логи были не просто так добавил в профиль информацию что человек смотрел(опять же для авторизированных пользователей) 🙂
Еще пару скриншотов: