2009-10-28 23 views
0

J'essaie de capturer des illustrations à partir d'un fichier pict et de les intégrer dans une piste sur iTunes en utilisant python appscript. je fait quelque chose comme ceci:Appscript pour écrire des illustrations iTunes

imFile = open('/Users/kartikaiyer/temp.pict','r') 
data = imFile.read() 
it = app('iTunes') 
sel = it.current_track.get() 
sel.artworks[0].data_.set(data[513:]) 

Je reçois une erreur OSError: -1731 MESSAGE: Objet inconnu

Code AppleScript similaires ressemble à ceci:

tell application "iTunes" 
    set the_artwork to read (POSIX file "/Users/kartikaiyer/temp.pict") from 513 as picture 
    set data of artwork 1 of current track to the_artwork 
end tell 

J'ai essayé d'utiliser ASTranslate mais il n'instancie jamais 'the_artwork' et renvoie une erreur quand il y a une référence à the_artwork. Quelqu'un peut-il aider. Je suis nouveau sur appscript et python en général.

Répondre

0

En bref, les références Appscript, comme les références AppleScript, utilisent l'indexation 1 et non l'indexation zéro comme les listes Python. Donc, vous avez probablement besoin d'écrire:

it.current_track.artworks[1].data_.set(...)

(Soit dit en passant, la commande get supplémentaire dans votre script original est inutile, mais inoffensif dans ce cas.)

En ce qui concerne ASTranslate, vous devez activer la Case à cocher «Envoyer des événements à l'application» si vous souhaitez réellement envoyer des commandes aux applications et aux ajouts de scripts et recevoir leurs résultats. En règle générale, il est préférable de désactiver cette option afin de ne pas avoir d'accidents malheureux lors de la traduction de commandes potentiellement destructrices telles que set ou delete, donc seulement pour l'activer si vous en avez vraiment besoin, et faites attention au code que vous utilisez tu fais.

+0

Appscript utilise l'indexation zéro car c'est Python, pas AppleScript. – wbg

+0

Appscript utilise l'indexation unique car c'est ce qu'utilise Apple Event Manager. Le code Appscript peut sembler Pythonic, mais la ressemblance est assez superficielle - juste une fine couche de sucre syntaxique autour des API Apple Event Manager, qui déterminent la sémantique réelle. – has

0

La commande read fait partie de Scripting Additions, que ASTranslate ne traduit pas. Utilisez ASDictionary pour créer une colle pour les ajouts de script, en cliquant sur "Choisir les ajouts de scripts installés" Dans le menu Dictionnaire, puis en sélectionnant "Ajout de scripts" dans la liste.

3

Il s'agit d'une question plus ancienne, mais comme j'avais de la difficulté à faire la même chose maintenant, j'ai décidé de poster ma solution au cas où quelqu'un d'autre pourrait en bénéficier.

selected = appscript.app('iTunes').selection.get() 

for t in selected: 
    myArt = open(/path/to/image.jpg,'r') 
    data = myArt.read() 
    t.artworks[1].data_.set(data) # no need to remove header but one-indexed as has said earlier 
    myArt.close() 

Espérons que cela aide.

+0

Vous devrez peut-être ajouter un type de données explicite: 't.artworks [1] .data_.set (AE :: AEDesc.new (KAE :: TypeJPEG, données))' – crishoj