2008-08-01 23 views
65

Tengo un sitio web que reproduce archivos mp3 en un reproductor flash. Si un usuario hace clic en "reproducir", el reproductor flash automáticamente descarga un mp3 y comienza a reproducirlo.Cómo rastrear descargas de archivos

¿Hay alguna manera fácil de hacer un seguimiento de cuántas veces se ha descargado un clip de canción en particular (o cualquier archivo binario)?


es el juego enlace de un enlace al archivo real mp3 oa algún código javascript que aparece un jugador?

Si este último, puede agregar fácilmente su propio código de registro allí para rastrear el número de visitas .

Si es el primero, necesitará algo que pueda rastrear el registro del servidor web y hacer esa distinción. Mi plan de alojamiento viene con webalizer, que hace esto muy bien.

Es código de JavaScript, por lo que responde eso.

Sin embargo, sería bueno saber cómo realizar un seguimiento de las descargas utilizando el otro método (sin cambiar de host).

Respuesta

39

Lo curioso es que escribí una galería de php media para toda mi música hace 2 días. Tuve un problema similar. Estoy usando http://musicplayer.sourceforge.net/ para el jugador. Y la lista de reproducción se crea a través de php. Toda solicitud de música ir allí un script llamado xfer.php archivo = lo que

$filename = base64_url_decode($_REQUEST['file']); 
header("Cache-Control: public"); 
header("Content-Description: File Transfer"); 
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, '-_,', '+/=')); 
} 

Y cuando se llama a los archivos usar algo como:?

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

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

Si está utilizando algunos javascript o un reproductor flash (reproductor JW por ejemplo) que requiere que el enlace real sea un archivo mp3 o lo que sea, puede agregar el texto "& type = .mp3" para que el final linke sea algo así como: "www.example.com/ xfer.php? file = 34842 ffjfjxfh & type = .mp3 ". De esta manera, parece que termina con una extensión mp3 sin afectar el enlace del archivo.

+17

¡existe una vulnerabilidad de cruce de directorios en este script! Un atacante puede pasar en xfer.php? File = ../../../passwd o lo que sea que quieran! ¡¡¡Ten cuidado!!! –

+4

esto hará explotar los límites de memoria del servidor si los archivos son demasiado grandes y su tráfico es alto ... algo que yo mismo experimenté. – tmsimont

+0

cómo solucionar la "vulnerabilidad de cruce de directorios"? – anarchOi

6

¿El enlace de reproducción es un enlace al archivo mp3 real o a algún código javascript que aparece en un reproductor?

En este último caso, puede agregar fácilmente su propio código de registro para realizar un seguimiento del número de visitas.

Si es el primero, necesitará algo que pueda rastrear el registro del servidor web y hacer esa distinción. Mi plan de hosting viene con webalizer, que lo hace muy bien.

10

Incluso podría configurar una directiva Apache .htaccess que convierta solicitudes * .mp3 en la querystring dubayou con la que está trabajando. Puede ser una forma elegante de mantener la solicitud directa y aún así poder incorporar la función de registro en la respuesta.

2

¿Hay una base de datos para su biblioteca de música?Si hay algún código de servidor que se ejecuta al descargar el mp3, entonces puede agregar código adicional para aumentar el conteo de reproducciones. También podría hacer que javascript haga una segunda solicitud para incrementar el recuento de reproducciones, pero esto podría llevar a que personas/robots incrementen recuentos falsamente.

Solía ​​trabajar para un sitio de radio por Internet y utilizamos tablas separadas para rastrear la hora en que se reproducía cada canción. Nuestras transmisiones fueron impulsadas por una secuencia de comandos de perl que ejecutaba icecast, por lo que activamos una solicitud de base de datos cada vez que se comenzó a reproducir una nueva pista. Luego, para calcular el recuento de reproducciones, ejecutamos una consulta para contar cuántas veces el ID de una canción estaba en el registro de reproducción.

11

Si su archivo de canción/binario fue servido por apache, puede grep fácilmente el access_log para averiguar el número de descargas. Un script simple post-logrotate puede grep los registros y mantener sus estadísticas de conteo en un db. Esto tiene la ventaja de rendimiento al no estar en su ruta de código de solicitud en vivo. Hacer cosas no críticas como estadísticas fuera de línea es una buena idea para escalar su sitio web a una gran cantidad de usuarios.

20

Uso bash:

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

El problema que tuve con cosas como AWStats/lectura a través de los registros del servidor web es que las grandes descargas menudo se pueden dividir en fragmentos de datos dentro de los registros. Esto hace que conciliar el número exacto de descargas sea bastante difícil.

Sugeriría Google Analytics Event Tracking, ya que esto se registrará una vez por clic en un enlace de descarga.

Cuestiones relacionadas