Lactrik: MP3-Sammlung: Dateinamen automatisch in Datenbank schreiben?

Hallo zusammen,

ich habe jetzt von einer Band alle meine CD's als MP3 gerippt und möchte diese jetzt in eine mySQL-Datenbank eintragen. Am besten wäre es, wenn sogar korrekt Titel und Interpret (aus dem ID3-Tag der MP3) ausgelesen werden könnte und in entsprechende Spalten der Datenbank eingetragen werden.

Keine leichte Sache und ich hab nicht den Hauch einer Ahnung *g* Irgendwie muss ich ja eine Schnittstelle zwischen lokalen Dateien und meiner Datenbank herstellen (die ausschliesslich im Internet liegt, da ich keinen lokalen SQL-Server betreibe).

Hat da jemand einen kleinen Denkanstoss für mich? ;-)

Grüsse
Lars

  1. Hat da jemand einen kleinen Denkanstoss für mich? ;-)

    Hmm vielleicht keinen großen, aber Winamp2 kann eine Mp3-Liste als HTML-Datei schreiben....Das wäre dann zwar keine dynamische Liste, aber immerhin hättest du die Tags als HTML-Code.
    Ob das dir weiterhilft, weiß ich nicht.
    Mehr fällt mir auf jeden Fall nicht ein.
    Sorry

    Mfg

    Max

  2. Holladiewaldfee,

    ich hatte da mal was für die Tipps&Tricks geschrieben, ist aber wohl untergegangen.

    Ich darf Dir meinen Code einfach ungeniert hier hin klatschen, ohne Rücksicht auf Verluste?

    ------
    <?php
    $mysqldb = "mp3";
    $mp3_dir = "d:\mp3\";
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>
    <head>
     <title>mp3conv</title>
    </head>

    <body>

    <table cellspacing=0 cellpadding=2 border=1>
    <tr>
     <th>Sontitel</th>
     <th>Künstler</th>
     <th>Album</th>
     <th>Jahr</th>
     <th>Kommentar</th>
     <th>Track</th>
     <th>Songtyp</th>
    </tr>
    <?php
     @set_time_limit(0);

    $mid = mysql_connect("localhost", "root", "");
    mysql_select_db($mysqldb, $mid);

    $id3 = Array();
    $id3[0] = "Blues";
    $id3[1] = "Classic Rock";
    $id3[2] = "Country";
    $id3[3] = "Dance";
    $id3[4] = "Disco";
    $id3[5] = "Funk";
    $id3[6] = "Grunge";
    $id3[7] = "Hip-Hop";
    $id3[8] = "Jazz";
    $id3[9] = "Metal";
    $id3[10] = "New Age";
    $id3[11] = "Oldies";
    $id3[12] = "Other";
    $id3[13] = "Pop";
    $id3[14] = "R&B";
    $id3[15] = "Rap";
    $id3[16] = "Reggae";
    $id3[17] = "Rock";
    $id3[18] = "Techno";
    $id3[19] = "Industrial";
    $id3[20] = "Alternative";
    $id3[21] = "Ska";
    $id3[22] = "Death Metal";
    $id3[23] = "Pranks";
    $id3[24] = "Soundtrack";
    $id3[25] = "Euro-Techno";
    $id3[26] = "Ambient";
    $id3[27] = "Trip-Hop";
    $id3[28] = "Vocal";
    $id3[29] = "Jazz+Funk";
    $id3[30] = "Fusion";
    $id3[31] = "Trance";
    $id3[32] = "Classical";
    $id3[33] = "Instrumental";
    $id3[34] = "Acid";
    $id3[35] = "House";
    $id3[36] = "Game";
    $id3[37] = "Sound Clip";
    $id3[38] = "Gospel";
    $id3[39] = "Noise";
    $id3[40] = "AlternRock";
    $id3[41] = "Bass";
    $id3[42] = "Soul";
    $id3[43] = "Punk";
    $id3[44] = "Space";
    $id3[45] = "Meditative";
    $id3[46] = "Instrumental Pop";
    $id3[47] = "Instrumental Rock";
    $id3[48] = "Ethnic";
    $id3[49] = "Gothic";
    $id3[50] = "Darkwave";
    $id3[51] = "Techno-Industrial";
    $id3[52] = "Electronic";
    $id3[53] = "Pop-Folk";
    $id3[54] = "Eurodance";
    $id3[55] = "Dream";
    $id3[56] = "Southern Rock";
    $id3[57] = "Comedy";
    $id3[58] = "Cult";
    $id3[59] = "Gangsta";
    $id3[60] = "Top 40";
    $id3[61] = "Christian Rap";
    $id3[62] = "Pop/Funk";
    $id3[63] = "Jungle";
    $id3[64] = "Native American";
    $id3[65] = "Cabaret";
    $id3[66] = "New Wave";
    $id3[67] = "Psychadelic";
    $id3[68] = "Rave";
    $id3[69] = "Showtunes";
    $id3[70] = "Trailer";
    $id3[71] = "Lo-Fi";
    $id3[72] = "Tribal";
    $id3[73] = "Acid Punk";
    $id3[74] = "Acid Jazz";
    $id3[75] = "Polka";
    $id3[76] = "Retro";
    $id3[77] = "Musical";
    $id3[78] = "Rock & Roll";
    $id3[79] = "Hard Rock";

    // WINAMP-Extensions
    $id3[80] = "Folk";
    $id3[81] = "Folk-Rock";
    $id3[82] = "National Folk";
    $id3[83] = "Swing";
    $id3[84] = "Fast Fusion";
    $id3[85] = "Bebob";
    $id3[86] = "Latin";
    $id3[87] = "Revival";
    $id3[88] = "Celtic";
    $id3[89] = "Bluegrass";
    $id3[90] = "Avantgarde";
    $id3[91] = "Gothic Rock";
    $id3[92] = "Progressive Rock";
    $id3[93] = "Psychedelic Rock";
    $id3[94] = "Symphonic Rock";
    $id3[95] = "Slow Rock";
    $id3[96] = "Big Band";
    $id3[97] = "Chorus";
    $id3[98] = "Easy Listening";
    $id3[99] = "Acoustic";
    $id3[100] = "Humour";
    $id3[101] = "Speech";
    $id3[102] = "Chanson";
    $id3[103] = "Opera";
    $id3[104] = "Chamber Music";
    $id3[105] = "Sonata";
    $id3[106] = "Symphony";
    $id3[107] = "Booty Bass";
    $id3[108] = "Primus";
    $id3[109] = "Porn Groove";
    $id3[110] = "Satire";
    $id3[111] = "Slow Jam";
    $id3[112] = "Club";
    $id3[113] = "Tango";
    $id3[114] = "Samba";
    $id3[115] = "Folklore";
    $id3[116] = "Ballad";
    $id3[117] = "Power Ballad";
    $id3[118] = "Rhythmic Soul";
    $id3[119] = "Freestyle";
    $id3[120] = "Duet";
    $id3[121] = "Punk Rock";
    $id3[122] = "Drum Solo";
    $id3[123] = "A capella";
    $id3[124] = "Euro-House";
    $id3[125] = "Dance Hall";

    function list_dir($dirname)
    {
     if($dirname[strlen($dirname)-1]!='\')
      $dirname.='\';
     static $result_array=array();
     $handle=opendir($dirname);
      while (false !== ($file = readdir($handle)))
     {
      if($file=='.'||$file=='..')
       continue;
      if(is_dir($dirname.$file))
       list_dir($dirname.$file.'\');
      else
       $result_array[]=$dirname.$file;
     }
     closedir($handle);
     return $result_array;
    }

    $ta = list_dir($mp3_dir);

    for($i=0, $j=count($ta); $i<$j; $i++)
    {
     $fp = fopen($ta[$i], "rb");
     fseek($fp, -128, SEEK_END);
     $isid3 = fread($fp, 128);
     if(substr($isid3, 0, 3)=="TAG")
     { $songtitle = str_replace("#", "", trim(substr($isid3, 3, 30)));
      $artist = str_replace("#", "", trim(substr($isid3, 33, 30)));
      $album = str_replace("#", "", trim(substr($isid3, 63, 30)));
      $year = str_replace("#", "", trim(substr($isid3, 93, 4)));
      $comment = str_replace("#", "", trim(substr($isid3, 97, 28)));
      $track = ord(trim(substr($isid3, 126, 1)));
      $songtype = (int)ord(trim(substr($isid3, 127, 1)));
      echo "<tr><td>".$songtitle."</td><td>".$artist."</td><td>".$album."</td><td>".$year."</td><td>".$comment."</td><td>".$track."</td><td>".$id3[$songtype]."</td></tr>";
     }
     else
     { $ta2 = explode("-", basename($ta[$i]), 2);
      $songtitle = str_replace("#", "", trim(substr($ta2[1],0,strlen($ta2[1])-4)));
      $artist = str_replace("#", "", trim($ta2[0]));
      if($songtitle == "")
      { $songtitle = $artist;
       $artist = ""; }
      $album = ""; $year = ""; $comment = ""; $track = ""; $songtype = "";
      echo "<tr><td>".$songtitle."</td><td>".$artist."</td><td></td><td></td><td></td><td></td></tr>";
     }
     fclose($fp);
     $query = "INSERT INTO mp3 VALUES ("", "".addslashes($songtitle)."", "".addslashes($artist)."", "".addslashes($album)."", "".addslashes($year)."", "".addslashes($comment)."", "".addslashes($track)."", "".addslashes($songtype)."", "".str_replace("#", "", addslashes(dirname($ta[$i])))."", "".str_replace("#", "", addslashes(basename($ta[$i])))."")";
     mysql_query($query);
    }
    mysql_close();
    ?>

    </table>
    </body>
    </html>
    -------

    Natürlich solltest Du ihn vorher noch an Deine Gegebenheiten anpassen ;-)

    Ciao,

    Harry

    --
      Man weiß erst was man hatte, wenn man es verloren hat.
      Intelligenz ist nicht zwingend etwas positives.
    1. Holladiewaldfee,

      kleiner Nachtrag noch:
      Das Teil kann nur ID3-Tags Version 1.0 und 1.1 verarbeiten.

      Hier noch der SQL-Code für die Tabelle:

      Tabellenstruktur für Tabelle mp3

      CREATE TABLE mp3 (
        id bigint(20) NOT NULL auto_increment,
        songtitle varchar(30) default NULL,
        artist varchar(30) default NULL,
        album varchar(30) default NULL,
        year int(4) default NULL,
        comment varchar(28) default NULL,
        track smallint(3) default NULL,
        songtype smallint(3) default NULL,
        basepath blob,
        filename varchar(255) default NULL,
        PRIMARY KEY  (id),
        KEY id (id)
      ) TYPE=ISAM;

      Ciao,

      Harry

      --
        Man weiß erst was man hatte, wenn man es verloren hat.
        Intelligenz ist nicht zwingend etwas positives.
      1. Hallo,

        super, das ist genau das, was ich gesucht hab :D

        Bekomme hier allerdings die Meldung:

        Warning: opendir(C:\mp3test) [function.opendir]: failed to open dir: No such file or directory in /home/www/web9/html/netradio/test.php on line 165

        Das ist aber kein Wunder - denn der SQL-Server läuft einem Webserver und dort gibt es kein C:\mp3test.

        Daher muss ich es hinbekommen, dass er auf meine lokale Platte zugreift... gibt's dafür irgendeine einfache Möglichkeit? Wahrscheinlich nicht, wäre ja ne riesige Sicherheitslücke... für das PHP-Script bin ich ja nur ein Client wie jeder andere... *grübel*

        Oder wenn ich einen FTP-Server auf meinem Rechner installiere und darüber den Zugriff mache?

        Hmm... naja mal schauen, wenn jemand einen Vorschlag, her damit ;)

        Auf jedenfall besten Dank, deine Lösung ist genial :)

        Grüsse
        Lars

        1. Holladiewaldfee,

          Das ist aber kein Wunder - denn der SQL-Server läuft einem Webserver und dort gibt es kein C:\mp3test.

          Hmm... naja mal schauen, wenn jemand einen Vorschlag, her damit ;)

          Jep: Installier Dir schnell nen lokalen Apache mit PHP und 'ner MySQL-DB. Die können dann beide auf Deine Dateien zugreifen. Anschließend exportiers Du die Datenbank und importierst sie auf dem anderen Server wieder :)

          Auf jedenfall besten Dank, deine Lösung ist genial :)

          Danke :)
          Wenn Du Lust hast kannst Du ja noch die Unterstützung für ID3v2.0 einbauen ;)

          Ciao,

          Harry

          --
            Man weiß erst was man hatte, wenn man es verloren hat.
            Intelligenz ist nicht zwingend etwas positives.
          1. Danke :)
            Wenn Du Lust hast kannst Du ja noch die Unterstützung für ID3v2.0 einbauen ;)

            Das werd ich mir auf jedenfall ansehen und evtl. auch tun - könnte ich nämlich auch gut gebrauchen. Ich sag dir dann Bescheid ;)

            Grüsse
            Lars

            1. Holladiewaldfee,

              Wenn Du Lust hast kannst Du ja noch die Unterstützung für ID3v2.0 einbauen ;)

              Das werd ich mir auf jedenfall ansehen und evtl. auch tun - könnte ich nämlich auch gut gebrauchen. Ich sag dir dann Bescheid ;)

              http://www.id3.org/

              Was ich eigentlich noch erklären wollte:
              Das Script öffnet alle MP3-Dateien im angegebenen Ordner und versucht den ID3-Tag auszulesen. Findet es keinen, versucht es Künstler und Songtitel aus dem Dateinamen zu erraten, da der ja meistens in der Form "Künster - Lied.mp3" aufgebaut ist :)

              Ciao,

              Harry

              --
                Man weiß erst was man hatte, wenn man es verloren hat.
                Intelligenz ist nicht zwingend etwas positives.
  3. Hallo Lactrik,

    Hat da jemand einen kleinen Denkanstoss für mich? ;-)

    Nur einen Link ;) http://www.php-faq.de/q/q-scripte-mp3-tags.html

    Gruss, Thoralf

    --
    Sic Luceat Lux!