Способ вправо для получения информации о свойствах сценариев приложения - открыть его словарь с помощью редактора AppleScript.Это представляет все в соответствующем контексте, вместе с документацией.
Однако иногда нам не важен правильный способ сделать что-то, мы просто хотим Python Кстати, хм?А в Python (через PyObjC) вы можете проверять множество классов во время выполнения с помощью таких инструментов, как .__dict__
и dir
.Таким образом, вы можете сравнить атрибуты объекта приложения iTunes с ванильным SBApplication
объектом или атрибуты любого случайного сценария с ванильным SBObject
, и вот что вы получите:
>>> from ScriptingBridge import SBObject, SBApplication
>>> iTunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes")
>>> (list(set(dir(iTunes)) - set(dir(SBApplication))))
['fullScreen', 'selection', 'mute', 'visuals', 'setSoundVolume_',
# ...
'setVisualSize_', 'currentStreamURL', 'setFixedIndexing_']
>>> (list(set(dir(iTunes.currentTrack())) - set(dir(SBObject))))
['rating', 'databaseID', 'setUnplayed_', 'lyrics', 'show', 'releaseDate',
# ...
'setSkippedCount_', 'skippedCount', 'setSeasonNumber_', 'sampleRate']
Как оказалось, «голова игрока» является атрибутом приложения (вы можете воспроизводить только одну песню за раз), а не текущей дорожкой (которая фактически является тем же объектом «дорожки», который вы получили бы, даже если быt тот, который воспроизводился, просто представлял метаданные, а не состояние воспроизведения).И it, и атрибут «duration» трека выражены в секундах, поэтому вы можете вычислить (например) процентное содержание песни:
>>> "{0:0.0f}%".format((iTunes.playerPosition() / iTunes.currentTrack().duration()) * 100)