在OSX上访问iTunes中的音乐专辑和元数据? (MPMediaQuery等价)

时间:2012-03-17 06:14:22

标签: macos itunes media

不可否认,在OSX开发方面,我是一个完整的菜鸟。但是,我一直在寻找几个小时,找不到任何帮助或提示。我正在寻找一种从OSX(而非iOS)上的iTunes资料库查询专辑,歌曲,艺术家等的方法。类似于iOS中的MPMediaQuery类,但适用于OSX。可以这样做吗?你能指点我一个班级参考吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

在Mac上访问iTunes元数据的传统方式是通过AppleScript(或其他语言等价,如py-appscript)使用其Apple Events界面。有许多引用将iTunesAppleScriptappscript结合使用,例如this one。您可以使用AppleScript Editor.app查看iTunes的脚本字典。以下是在Python中使用appscript的查询的简单示例:

>>> from appscript import *
>>> itunes = app('iTunes')
>>> for track in itunes.file_tracks[its.album == 'Bridge Over Troubled Water']():
...   print(track.name())
... 
Bridge Over Troubled Water
El Condor Pasa (If I Could)
Cecilia
Keep The Customer Satisfied
So Long, Frank Lloyd Wright
The Boxer
Baby Driver
The Only Living Boy In New York
Why Don't You Write Me
Bye Bye Love
Song For The Asking
Feuilles-O
Bridge Over Troubled Water (Demo Take 6)

使用Apple Events界面要求iTunes.app正在运行。另一种方法是解析iTunes自动创建的iTunes Music Library.xml文件,并在更改元数据时更新。该文件是iTunes元数据的一个大部分的文档化界面,该元数据完整地保存在未记录的内部数据库中。 xml文件实际上是一个plist文件,因此Python plistlib模块可以轻松读取它:

>>> import os.path, plistlib
>>> lib = plistlib.readPlist(os.path.expanduser('~/Music/iTunes/iTunes Music Library.xml')) 
>>> list(lib.keys())
['Minor Version', 'Playlists', 'Features', 'Major Version', 'Library Persistent ID', 'Music Folder', 'Application Version', 'Tracks', 'Show Content Ratings', 'Date']
>>> lib['Tracks']['42527']
{'Album': 'Bridge Over Troubled Water', 'Persistent ID': 'E1C66D8F01C44BD8', 'Track Number': 1, 'Location': 'file://localhost/CD%20Cache/music/aac/Simon%20&%20Garfunkel/Bridge%20Over%20Troubled%20Water/01%20Bridge%20Over%20Troubled%20Water.m4a', 'File Folder Count': 6, 'Disc Number': 1, 'Total Time': 295826, 'Sample Rate': 44100, 'Track Count': 13, 'Genre': 'Rock', 'Bit Rate': 128, 'Kind': 'AAC audio file', 'Name': 'Bridge Over Troubled Water', 'Artist': 'Simon & Garfunkel', 'Disc Count': 1, 'File Type': 1295270176, 'Date Added': datetime.datetime(2011, 12, 13, 10, 5, 47), 'Date Modified': datetime.datetime(2008, 10, 28, 5, 59, 20), 'Library Folder Count': 5, 'Composer': 'Paul Simon', 'Year': 1970, 'Track ID': 42527, 'Size': 4941116, 'Track Type': 'File'}

然后可以进行内省或转换为更方便的数据结构进行搜索。