Remote ID3 función

Agregar a favoritos

4 Comentarios

Posteado hace 140 días en:

Ayer echando un vistazo a muxtape, un servicio muy minimalista y sencillo me di cuenta que subiendo la canción ya obtenía el titulo y el arista. La verdad es que me llamo la atención y estuve jugando un poco con las funciones ID3, pero al probar en un archivo remoto me decía que nanai de la china. Estuve buscando y encontré unas clases que usaban fseek y claro tampoco me valían.Al final por phpclassess di con una que buscaba en archivos remoto, pero como ya tenia el gusanillo decidí crear una función.

function ID3($mp3='') {
    //etiquetas ID3
    $ID3 = array(
        'title' => 'TIT2', 
        'artist' => 'TPE1', 
        'album' => 'TALB'
    );
    //miramos si es un archivo mp3
    if(substr($mp3, -3, 3) != 'mp3') return false;
    //abrimos parte del archivo y leemos
    $fp = fopen($mp3, 'r'); 
    $data = fread($fp, 3000); 
    fclose($fp);
    //comprobamos que tiene ID3
    if(substr($data, 0, 3) != 'ID3') return false;
    //parseamos los tags
    foreach($ID3 as $type => $key) {
        //existe el tag?
        if(strpos($data, $key)) {
            //existe entre tags o es el ultimo?
            if(!preg_match('!'.$key.'(.*)[A-Z]{3}[A-Z1-4]{1}!Us', $data, $tag)) $tag = explode($key, $data);
            //algo raro pasa con los caracteres asi que limpiamos
            $info = $tag[1];
            $info = str_replace(' ', '...', $info);
            $info = preg_replace('![^A-Za-z0-9\./\'\(\)]+!','',$info);
            $info = str_replace('...', ' ', $info);
            $ID3[$type] = $info;
        } else {
            //si no lo encontramos lo borramos
            $ID3[$type] = '';
        }
    }
    //devolvemos el nuevo array
    return $ID3;
}

//print_r(ID3('http://algunaweb.com/mp3.mp3'));

La función devuelve el titulo, el artista y el álbum de la canción, en caso de no poder parsear devuelve false. He tenido bastantes problemas dando con la solución para arreglar un poco los textos, asi que es posible que más de una vez te encuentres con 7 o caracteres extraños.