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

    Добавляя музыку в 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!

    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 14

      +12
      Возможно, достаточно переконвертировать таги в UTF-8?
        0
        Проблема была не в кодировке. Именно, что вместо тегов были знаки вопроса. Я тоже вначале думал кодировка.
          –1
          Да, а винамп святым духом в таком случае пишет все правильно? Сколько раз iTunes наблюдал эти вопросики и при этом в других прогах был нормальный текст
            0
            я посмотрел в нескольких программах, все показывали '?'.
              0
              Это они после iTuns показывали — а до запуска этой чудо проги там были нормальные теги
      • НЛО прилетело и опубликовало эту надпись здесь
          0
          Сделано. К сожалению ломается форматирование.
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              не помогло, хотя в предпросмотре habraeditor все было нормально. табы съедаются кем то.
              • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  Клево. Сработало.
          +1
          Представляю вашему вниманию программу Song Genie
          или бесплатный кросплатформенный аналог Picard Tagger
            0
            Или более универсальный (хотя менее красивый) MediaRage
              0
              Сейчас попробовал PicardTagger на одном файле (Король и Шут — Герои и Злодеи — Дед на свадьбе). Он мне вернул примерно 50 потенциальных совпадений, не одно из которых не подошло. Там есть опция Convert File Names to Tags, которая решает проблему только если вся информация зашифрована в имени файла. У меня инфа об артисте и альбоме скрыта в названиях папок.
              Song Genie понравилась. И с задачей справилась. Определила теги.

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое