MP3-Sammlung: Dateinamen automatisch in Datenbank schreiben?
Lactrik
- php
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
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
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
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:
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
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
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
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
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 ;)
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
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