在python里使用Scripting Bridge与iTunes交互

最近拿python脚本与iTunes交互的次数越来越多,这里就当是自己的一个笔记吧。

Apple的Scripting Bridge真的是个很不错的东西,只要某个App支持这个技术,并且开放了对应的接口之后,不需要使用DYLD注入也可以在其他程序中实现进程间通信与控制。当然,要想实现更高级的功能,还是得靠逆向与ObjC运行时。

要在python中使用Scripting Bridge,应当先把它们import进脚本中


#coding:utf-8
from Foundation import *
from ScriptingBridge import *

然后就可以通过Scripting Bridge获取到iTunes的一个实例。


iTunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes")

获取到实例之后可以干什么呢?比如我现在想导出所有专辑的封面,并以TIFF保存它们。


# 所有的封面
for track in iTunes.sources()[0].playlists()[0].tracks() :
    current = track.artworks()
    i = 1;
    for artwork in current:
        data = artwork.data()
        if isinstance(data, NSImage):
        data.TIFFRepresentation().writeToFile_atomically_(str(i)+".tiff",True)
        i+=1

又或者,我们可以输出所有还没有封面的所有专辑。


# 还没有封面的专辑名
artworks = []
for track in iTunes.sources()[0].playlists()[0].tracks() :
    current = track.artworks()
    if (len(current) == 0 and len(track.album()) > 0) :
        if (artworks.count(track.album()) == 0) :
            artworks.append(track.album())
            print(track.album())

这些对象的属性以及可调用的方法都和它们在ObjC中的一样,如果不想去查ObjC的文档的话,也可以直接print dir([object])输出这个对象的相关信息。

声明: 本文为0xBBC原创, 转载注明出处喵~

《在python里使用Scripting Bridge与iTunes交互》有2个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注