Программирование плагинов iTunes: события перехвата

Есть ли хорошие решения для захвата событий из iTunes?

Я хотел бы создать плагин, который находится внутри iTunes и реагирует на изменения рейтинга для определенных песен. Для Windows у них есть SDK, в который я еще не вникал, но я хотел бы найти что-нибудь и для Mac.

Какие-либо предложения?


person Eddie Parker    schedule 16.11.2009    source источник


Ответы (2)


Насколько мне известно, Apple предоставляет бесплатный (бесплатный) SDK для iTunes Visual Плагины для OS X и Windows. Если вы не можете получить с помощью этого то, что вам нужно, вы можете всегда использовать интерфейс сценариев iTunes Apple Events для мониторинга посредством опроса из другого приложения OS X с использованием OSA-совместимого интерфейса, такого как AppleScript или appscript с Python, Ruby или Objective-C. Это может быть не то, что вам нужно, но это задокументировано и поддерживается.

Например, с помощью py-appscript вот как получить доступ к текущему треку и тем, которые находятся в недавно воспроизведенном смарт-листе:

>>> from appscript import *
>>> it = app('iTunes')
>>> it.current_track.rating()  # 40 == 2 stars
40
>>> len(it.playlists['Recently Played'].tracks())
80
>>> it.playlists['Recently Played'].tracks[1].rating()
40
>>> it.playlists['Recently Played'].tracks[1].rating.set(to=100)
>>> it.playlists['Recently Played'].tracks[1].rating()  # 100 = 5 stars
100

Также можно фильтровать различные поля метаданных (для просмотра откройте определение сценария iTunes.app в редакторе сценариев AppleScript):

>>> import datetime
>>> an_hour_ago = datetime.datetime.now() - datetime.timedelta(hours=1)
>>> it.playlists['Library'].tracks[its.modification_date >= an_hour_ago]()
[app(u'/Applications/iTunes.app').sources.ID(45).library_playlists.ID(49347).file_tracks.ID(72017)]

Но обратите внимание, что изменения в рейтингах не влияют на дату изменения.

person Ned Deily    schedule 16.11.2009

Mac iTunes рассылает распределенные уведомления об изменениях дорожек и некоторых других событиях, представляющих значительный интерес. Однако я сомневаюсь, что он отправляет уведомления о незначительных изменениях в информации об отслеживании. Как говорит Нед, поддержка плагинов iTunes ограничена визуализаторами, поэтому у вас могут быть другие варианты:

  1. периодический опрос из внешнего процесса, хотя это будет стоить вам и iTunes, если список воспроизведения пользователя большой

  2. возможно, стоит изучить использование PreFab UI Actions, чтобы использовать виджеты пользовательского интерфейса iTunes и запускать AppleScripts.

  3. посмотрите, можете ли вы прикрепить уведомление FSEvent к файлу iTunes Music Library.xml, который iTunes хранит в папке музыкальной библиотеки пользователя. Предполагая, что iTunes сразу же обновляет этот файл при изменении настроек, вы, вероятно, сможете понять, что изменилось с прошлого раза.

Ни один из них не идеален, но тот тип расширяемости на основе плагинов, о котором вы говорите, действительно довольно редок среди приложений Mac, поэтому вам, вероятно, придется так или иначе забивать его или переосмыслить свои потребности.

person has    schedule 18.11.2009