Der Spezialist in Sachen AppleScript und iTunes ist unbestritten Doug mit seiner Webseite Doug’s AppleScripts for iTunes. Trotz intensiver Suche konnte ich bei ihm aber keine Lösung finden, um alle Dateinamen einer iTunes-Mediathek zu erhalten. Oder habe ich an der falschen Stelle bei ihm gesucht?
Egal. Hier ist meine Lösung um in AppleScript eine Liste mit allen Dateinamen der iTunes Mediathek zu erhalten:
tell application "iTunes"
set all_iTunesFilesList to {}
set allTracksList to file tracks of library playlist 1
repeat with singleTrack in allTracksList
set trackFile to the location of singleTrack
set all_iTunesFilesList to all_iTunesFilesList & (trackFile as list)
end repeat
end tell
get count of all_iTunesFilesList
get all_iTunesFilesList
Die beiden letzten Befehle sind natürlich nicht mehr wirklich relevant. Sie sorgen nur dafür, dass im Ergebnisbereich des ScriptEditors ein paar Werte zur Kontrolle angezeigt werden. Genauer gesagt, zeigt get count of all_iTunesFilesList die Anzahl aller Tracks der aktuellen Mediathek an und get all_iTunesFilesList zeigt die Liste mit den Dateinamen in alias-Form an.

am 18.02.2008 um 17:40 Uhr:
Bei einer grossen Anzahl an Musikdateien auf der Festplatte, kann sich so ein AppleScript allerdings schon leicht einmal totlaufen, denn es werden in der repeat-Schleife ja ständig Anfragen an iTunes geschickt.
Es wäre daher besser, direkt die XML-Library von iTunes zu parsen, um an diese Informationen zu kommen:
/Users/yourname/Music/iTunes/iTunes Music Library.xml
Ein Skript in Python/Perl/Ruby/C++ läuft da wesentlich schneller. Nach dieser Methode arbeiten z.B. auch Programme, die die iTunes-Bibliothek als HTML-Katalog exportieren, z.B.:
http://www.macupdate.com/info.php/id/16301/itunes2web
Beste Grüße aus Bielefeld
Martin
am 18.02.2008 um 22:45 Uhr:
Keine Frage, Martin, die Performance ist schon bei über funfhundert Tracks alles andere als berauschend. Ich war auf der Suche nach einer generische Methode, so in Richtung “FallBack” oder “Kompatibilitätsmodus” falls Apple etwas ändert.
Im konkreten Fall kam der Impuls von ganz anderer Seite: Es waren die iCal-Änderungen bei Leopard, die u.a. dafür sorgen, dass gcalsync momentan Schwierigkeiten hat. Damit einem das mit iTunes und AppleScript nicht passiert, wollte ich eine Methode finden, die man im Notfall als Workaround, wenn auch mit großen Geschwindigkeitsverlusten, anwenden kann.
Und danke für den Tipp mit dem WebExporter. Das sieht sehr, sehr interessant aus.
am 19.02.2008 um 14:10 Uhr:
Hallo Thomas,
als Notlösung verstanden, will ich natürlich nichts gesagt haben
Die XML-Library von iTunes ist sowieso ein interessantes Datenlager. Da die Datei auch die Pfadangabe sowie die eindeutige ID jeder lokalen Musikdatei in iTunes enthält, lässt sie sich auch für (legale) FileSharing-Aktivitäten nutzen. Ich habe das schon einmal hier in Englisch beschrieben:
Marvellous MusicMailer
Die Grundidee hinter dieser AppleScript -Lösung ist, daß sich aus der iTunes-XML-Library relativ leicht ein Webkatalog der eigenen Musikstücke erstellen lässt, welcher unter anderen Angaben auch die eindeutige ID für den jeweiligen Track enthält.
Ein kleines Script könnte so einen Musikkatalog in bestimmten Zeitabständen kreieren und in den geschützten/passwortgesicherten Bereich eines Webservers hochladen.
Für jeden Musikstück-Eintrag in diesem HTML-Katalog könnte man wiederum einen Link generieren, der beim Anklicken eine eMail mit einer speziell formatierten Betreffzeile erstellt, die die eindeutige ID des gewählten Tracks enthält.
Auf dieser Art könnten berechtige Besucher (Familienmitglieder) durch den iTunes-Webkatalog surfen und bei Interesse Musik-Anfragen per eMail an den eigenen Mac senden. Dört könnte ein an eine Regel angehängtes AppleScript die speziell formatierte Bereffszeile auslesen, in einer Textdatei nachschauen, ob der Addresat tatsächlich für den Musikempfang berechtigt ist und iTunes mittels der eindeutigen Track-ID fragen, wo die Datei liegt.
Schließlich würde das AppleScript die gefundene Datei als Anhang einer eMail an den Addressaten senden.
Wenn ich etwas Zeit hätte, würde ich das Projekt in Angriff nehmen. Ich habe aber im Moment leider keine Zeit
Beste Grüße aus Ostwestfalen
am 19.02.2008 um 18:48 Uhr:
Alle Achtung, Martin. So langsam bekomme ich das Gefühl, dass ich hier gerade ganz großes Kino erlebe.
Mein Problem geht allerdings in eine etwas andere Richtung: Es geht um die gemeinsame (legale) Nutzung einer Festplatte, auf der die Tracks abgelegt werden. Von Haus aus bekommt man aber in iTunes nicht mit, dass es in dem gemeinsam genutzten Verzeichnis etwas Neues gibt.
Schön wäre es, wenn es in der eigenen iTunes-Mediathek eine temporäre Playlist mit den neuen Tracks geben würde. So kann man leicht reinhören und entscheiden, ob man die Tracks in seine Mediathek übernehmen will. Alles was in der temporären Playlist bleibt, wird dann nach einiger Zeit automatisch wieder entfernt.
Ich habe zwar einige Lösungsansätze für mein Problem gefunden, aber gefallen tun sie mir alle nicht so richtig. Also heisst es selber schreiben.
Wenn da nicht das Problem mit der Zeit wäre …