Pull to refresh

Автоматизируем iTunes

Reading time 4 min
Views 867
Добавляя музыку в iTunes я столкнулся с тем, что большое число песен не имеют правильно прописанных тегов. Выглядит это примерно так

image

Детальный осмотр показал, что это не проблема кодировок. Теги в треках именно, что были забиты знаками '?'.


Как оказалось не все потеряно, так как имя файла, а также каталога, в котором этот файл находится содержит всю необходимую информацию, такую как имя исполнителя, альбом, год, название и номер трека

image

Поправить треки в iTunes можно просто взяв путь к файлу, выделить из него интересующие нас куски и прописать их в соответствующие теги. Для этой задачи решено было использовать AppleScript. Исчерпывающую документацию по нему можно найти тут AppleScript Guide, а примеры работающих скриптов тут Doug's Scripts

Засучив рукава, запускаем Script Editor

image

В меню Windows > Library выбираем интересующее нас приложение iTunes

image

Это откроет нам описание объектов приложения досупных для скриптинга

image

AppleScript, в отличие от остальных языков программирования очень похож на английский язык

image

Некоторые программы на AppleScript неотличимы от записок ученика средней школы. Минус — тем кто программировал на других языках придется поначалу довольно туго. Впрочем, есть и плюс — помимо возможности автоматизации приложений в Mac OS X, программирование на AppleScript дает хорошую практику в английском языке.

Есть две возможности посмотреть результаты работы скрипта: через использовние return и консоль Result,

image

либо через использование log на панели Event Log

image

Есть еще такая штука как display dialog, но это уже для продвинутых пользователей.

Возвращаясь к нашей проблеме парсинга имени файла. Делается это несколько неочевидно

image

впрочем если вчитаться, то все понятно. Английская грамматика вплоть до притяжательно склонения. Обратите внимание, что возвращается список строк text items of filename. Чтобы получить элемент этого списка, нужно просто указать номе нужного элемента (нумерация с единицы)

image

и не забываем о грамматике text item 5 of filename. Непонятно почему разработчики AppleScript не пошли дальше и не заменили, скажем, цифры соответствующими словесными обозначениями.
Вообще работа со строками в AppleScript несколько неуклюжа на неанглоязычный взгляд, с другой стороны быстро привыкаешь и порой не зная как записать ту или иную конструкцию, просто пишешь по-английски. Получается работающая программа.

Итоговый разбор имени файла на интересующие нас части выглядит примерно так

image

Треки будем обрабатывать в iTunes. Для этого будем работать в цикле со списком выделеных треков. Список выделенных треков получим используя selection.

image

Интересующие нас свойства (теги) можно подсмотреть в документации, которую мы открыли раньше

image

Итоговый скрипт выглядит вот так

image

tell application "iTunes"
    if selection is not {} then -- there ARE tracks selected...
        set sel to a reference to selection
        repeat with aTrack in sel
            set filename to location of aTrack as text
            set AppleScript's text item delimiters to ":"
            set artst to text item 5 of filename as text
            set albm to text item 6 of filename as text
            set title to text item 7 of filename as text
            set AppleScript's text item delimiters to ""
            -- work on album and year
            set dashIdx to offset of "-" in albm
            set yr to items 1 thru (dashIdx - 1) of albm as text
            set albm to items (dashIdx + 1) thru -1 of albm as text
            -- work on title
            set dashIdx to offset of "-" in title
            set trackNo to items 1 thru (dashIdx - 1) of title as text
            set title to items (dashIdx + 1) thru -4 of title as text
            set year of aTrack to (yr as integer)
            set artist of aTrack to artst
            set name of aTrack to title
            set track number of aTrack to (trackNo as integer)
            set album of aTrack to albm
        end repeat
    end if
end tell


* This source code was highlighted with Source Code Highlighter.



Обратите внимание на приведение типов (as text, as integer) во время установки или получения свойств объекта.

После этого достаточно выделить трек в iTunes и запустить скрипт

image

Вуаля, как говорится.

Осталось только сохранить скрипт в ~/Library/iTunes/Scripts и он будет доступен под тем именем, под которым вы его сохранили, в меню iTunes

image

Happy Scripting!

Tags:
Hubs:
+10
Comments 14
Comments Comments 14

Articles