Как отслеживать загрузки файлов

У меня есть веб-сайт, на котором можно проигрывать mp3 во флеш-плеере. Если пользователь нажимает кнопку «Воспроизвести», флэш-плеер автоматически загружает mp3 и начинает его воспроизведение.

Есть ли простой способ отследить, сколько раз была загружена конкретная песня (или любой двоичный файл)?


Ссылка на воспроизведение - это ссылка на настоящий mp3-файл или на какой-то код javascript, который открывает проигрыватель?

В последнем случае вы можете легко добавить туда свой собственный код регистрации, чтобы отслеживать количество обращений к нему.

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

Это код javascript, который отвечает на этот вопрос.

Однако было бы неплохо узнать, как отслеживать загрузки другим методом (без переключения хостов).

Ответов (8)

Решение

Самое смешное, что 2 дня назад я написал медиа-галерею на php для всех своих музыкальных произведений. У меня была похожая проблема. Я использую для плеера http://musicplayer.sourceforge.net/ . А плейлист построен через php. Все запросы на музыку отправляются в скрипт с именем xfer.php? File = WHATEVER

$filename = base64_url_decode($_REQUEST['file']);
header("Cache-Control: public");
header('Content-disposition: attachment; filename='.basename($filename));
header("Content-Transfer-Encoding: binary");
header('Content-Length: '. filesize($filename));

//  Put either file counting code here, either a db or static files
//
readfile($filename);  //and spit the user the file

function base64_url_decode($input) {
    return base64_decode(strtr($input, '-_,', '+/='));
}

И когда вы вызываете файлы, используйте что-то вроде:

function base64_url_encode($input) {
     return strtr(base64_encode($input), '+/=', '-_,');
}

http://us.php.net/manual/en/function.base64-encode.php

Если вы используете какой-то JavaScript или flash-плеер (например, JW-плеер), для которого требуется фактическая ссылка на файл mp3 или что-то еще, вы можете добавить текст «& type = .mp3», чтобы окончательная ссылка стала чем-то вроде: «www. example.com/xfer.php?file=34842ffjfjxfh&type=.mp3 ". Таким образом, похоже, что он заканчивается расширением mp3, не затрагивая ссылку на файл.

Используйте свои файлы журнала httpd. Установите http://awstats.sourceforge.net/

Используйте bash:

grep mp3 /var/log/httpd/access_log | wc

Проблема, с которой я столкнулся с такими вещами, как AWStats / чтение журналов веб-сервера, заключается в том, что большие загрузки часто могут быть разделены на блоки данных в журналах. Это затрудняет согласование точного количества загрузок.

Я бы предложил отслеживание событий Google Analytics , так как оно будет регистрироваться один раз при каждом нажатии на ссылку для загрузки.

Вы даже можете настроить директиву Apache .htaccess, которая преобразует запросы * .mp3 в строку запроса, с которой работает dubayou. Это может быть элегантный способ сохранить прямой запрос и по-прежнему иметь возможность добавлять функцию журнала в ответ.

Ссылка на воспроизведение - это ссылка на настоящий mp3-файл или на какой-то код javascript, который открывает проигрыватель?

В последнем случае вы можете легко добавить туда свой собственный код регистрации, чтобы отслеживать количество обращений к нему.

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

Есть ли база данных для вашей музыкальной библиотеки? Если есть какой-либо серверный код, который запускается при загрузке mp3, вы можете добавить туда дополнительный код, чтобы увеличить счетчик воспроизведения. Вы также можете сделать так, чтобы javascript сделал второй запрос для увеличения счетчика воспроизведения, но это может привести к тому, что люди / роботы будут ложно увеличивать счетчики.

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

Если ваша песня / двоичный файл обслуживается apache, вы можете легко просмотреть access_log, чтобы узнать количество загрузок. Простой сценарий post-logrotate может собирать журналы и сохранять статистику вашего счета в базе данных. У этого есть преимущество в производительности, поскольку он не находится в вашем пути кода живого запроса. Выполнение некритических вещей, таких как статистика в автономном режиме, - хорошая идея для масштабирования вашего сайта для большого количества пользователей.