Ich such mir mein Cover – Script
Ich habe eine gut geordnete Musiksammlung:
Ein Musikordner, darin Interpretenordner und darin widerum Albenordner. Die meisten Lieder haben vollständige Metatags. Darauf lege ich Wert! Mein Lieblingsaudioplayer Foobar2000 kommt auch super damit klar, das einzige was mir fehlte waren die Albumcover, davon hatte ich nur wenige. Aber ich will doch das es so schön aussieht wie hier da rechts ->
Es gibt ja genug Coverdatenbanken im Internet, bei 20 Cover hab ich das noch gemacht, aber dann hatte ich auch kein Bock mehr. Der Vorgang muss sich doch irgendwie Automatisieren lassen… Ein Bashscript muss her, aber nein ich sitze hier an ner Windowsbüchse. Erstmal muss der Linux-Emulator Cygwin her. Wieso nehm ich keine Batch oder die super Windows Powershell? Erstens: Ich kenn mich damit nicht so gut aus und Zweitens: mich würd’s wundern, wenn da die Tools bei sind die ich brauche…
Also “schwubs” zwei “einfache” Befehle in die Cygwinbash geklatscht und ab gehts:
find /cygdrive/f/Music/ -maxdepth 2 -mindepth 2|cut -d/ -f5-6|sed {'s#/#:#g'}|sed {'s#\ #_#g'} > /cygdrive/c/User/Daniel/Desktop/output.txt
for i in $(cat output.txt); do artist=$(echo $i|sed {'s#_#\ #g'}|cut -d: -f1);album=$(echo $i|sed {'s#_#\ #g'}|cut -d: -f2); ID=$(lynx -source "cover-paradies.to/?Module=ExtendedSearch&SearchString=$(echo $album|sed 's#.[0-9].##g')" | grep "ViewEntry&ID=" | grep -v -m1 "Tooltip" | cut -d\" -f 2 | sed {'s#?Module=ViewEntry&ID=##g'}); echo -e "$artist:$album:$ID\n";mkdir "cover/$artist"; mkdir "cover/$artist/$album"; cd "cover/$artist/$album"; wget $(lynx -source "http://cover-paradies.to/?Module=ViewEntry&ID=$ID"|grep -m1 Test.JPG|cut -d\" -f10|sed {'s#./res/#http://cover-paradies.to/res/#g'});cd "/cygdrive/c/Users/Daniel/Desktop/"; done
Was tut das Scriptchen? Nochmal langsam und zum mitschreiben:
Suche im Verzeichnis f:\Music\ recursiv alles (find), gib mir aber nur Interpreten- und Albumverzeichnis aus (cut), dann mach aus dem “/” ein ” : ” und aus dem ” ” ein “_” (sed (da die for-Schleife nur zusammenhängende Zeichketten parsed, ersetze ich die Leerzeichen mit Unterstrichen)), zu guter Letzt gib mir die Informationen nicht hier sondern in “output.txt” aus…
find /cygdrive/f/Music/ -maxdepth 2 -mindepth 2|cut -d/ -f5-6|sed {'s#/#:#g'}|sed {'s#\ #_#g'} > /cygdrive/c/User/Daniel/Desktop/output.txt
Wir wollen den Interpreten und das Album wiederhaben um damit zu arbeiten, aber nur das was in der output.txt steht!
for i in $(cat output.txt)
Den jeweiligen Artisten und das dazugehörige Album in Variablen übergeben…
artist=$(echo $i|sed {'s#_#\ #g'}|cut -d: -f1);
album=$(echo $i|sed {'s#_#\ #g'}|cut -d: -f2);
Jetz muss man ja irgendwie schon an ein Cover kommen, ich hab mich entschieden die Coverdatenbank cover-paradies.to zu benutzen, weil es ne relativ einfache Schnittstelle hat um Cover zu suchen, nämlich direkt über die Adresse. Was ich bekomme sind mehrere Suchergebnisse oder auch keines, einfachheitshalber nehme ich einfach das erst beste (ja ich weiß, unelegant!) und ziehe mir die ID der Page raus. Manche Albenordner haben bei mir das Erstelldatum mit dran, zum Beispiel “[2007]“, das muss auch noch für die suche weg! lynx ist ein Textbasierter Webbrowser, mit dem man sie direkt den Sourcecode einer Seite ansehen kann.
ID=$(lynx -source "cover-paradies.to/?Module=ExtendedSearch&SearchString=$(echo $album|sed 's#.[0-9].##g')" | grep "ViewEntry&ID=" | grep -v -m1 "Tooltip" | cut -d\" -f 2 | sed {'s#?Module=ViewEntry&ID=##g'});
Ich erstelle im Verzeichnis “cover” wieder die Interpretenordner und dadrin die Albenordner und “gehe” da auch schon rein…
mkdir "cover/$artist"; mkdir "cover/$artist/$album"; cd "cover/$artist/$album";
Mit der ID kommt man zur Seite, wo man Front-, Back-, CD-Cover laden kann. Netterweise haben die von Coverparadies eine Vorschaufunktion, wo man auf eine Lupe klickt und sich wunderschön animiert das Cover in Großformat präsentiert. Das mache ich mir zunutze, ich suche nach dem relativen Pfad dieser Vorschau, mache daraus ne volle URL und lad es mit wget direkt in das Verzeichnis, wo ich eben noch reingegangen bin.
wget $(lynx -source "http://cover-paradies.to/?Module=ViewEntry&ID=$ID"|grep -m1 Test.JPG|cut -d\" -f10|sed {'s#./res/#http://cover-paradies.to/res/#g'});
Zu guter letzt wieder zurück in mein Stammverzeichnis wo sich das “cover”-Verzeichnis drinne befindet und dann kann die Schleife auch schon wieder von vorne beginnen….
cd "/cygdrive/c/Users/Daniel/Desktop/"; done
Und jetzt noch eine Demonstration was passiert, wenn man das erstbeste Ergebnis nimmt
Er sollte ein Cover von dem The Hives Album “Barely Legal” suchen, das erste Ergebnis war allerdings nicht von The Hives:
