2012-10-19 25 views
5

का उपयोग करके आईट्यून्स प्लेलिस्ट में ट्रैक जोड़ने के लिए मैंने पिछले प्रश्न में प्लेलिस्ट कैसे बनाएं, लेकिन अब मैं यह नहीं समझ सकता कि इसमें ट्रैक कैसे जोड़ें। अभी मेरे पास है:पायथन और स्क्रिप्टिंग ब्रिज

tracks.sort(key=lambda tup: tup[0]) 
i = 0 
for trackList in generatePlaylists(tracks,10): 
    i += 1 
    playlistname = str(i) 
    p = {'name': playlistname} 
    playlist = iTunes.classForScriptingClass_("playlist").alloc().initWithProperties_(p) 
    iTunes.sources()[0].playlists().insertObject_atIndex_(playlist, 0) 

    # Find the playlist I just made 
    for playlist in iTunes.sources()[0].playlists(): 
     if playlist.name() == playlistname: 
      newPlaylist = playlist 

    # Add the tracks to it 
    for track in trackList: 
     print track[1].name() 
     iTunes.add_to_(track[1],newPlaylist) 

मेरे पटरियों tuples tracks, जहां टपल के पहले तत्व स्कोर है और दूसरा वास्तविक ट्रैक वस्तु है की एक सूची में हैं। generatePlaylists एक पुनरावर्तक है जो सभी लाइब्रेरी ट्रैक को 10 सूचियों में विभाजित करता है।

उपरोक्त कोड त्रुटि के बिना चलता है, लेकिन आईट्यून्स में प्लेलिस्ट खाली हैं।

उत्तर

7

सबसे पहले, यहाँ संक्षिप्त उत्तर है:

track.duplicateTo_(newPlaylist) 

समस्या iTunes.add_to_add आदेश है, जो एक फ़ाइल (उपनाम) और एक प्लेलिस्ट में यह आयात लेता है भेजता है है; आप duplicate कमांड भेजना चाहते हैं, जो किसी ऑब्जेक्ट को लेता है और ऑब्जेक्ट की दूसरी प्रति बनाता है। आपके पास फ़ाइल नहीं है, आपके पास एक ट्रैक है। (आप track.location() के माध्यम से एक फ़ाइल प्राप्त कर सकते हैं, लेकिन आप फ़ाइल को फिर से आयात नहीं करना चाहते हैं, बस ट्रैक को कॉपी करें।)

इसके अलावा, इस मामले में, आपको ट्रैक पर विधि को कॉल करने की आवश्यकता है, बल्कि इसे ऐप पर कॉल करने और ट्रैक को पार करने से।

आईट्यून्स ऑब्जेक्ट मॉडल (और इसके नीचे एई मॉडल) की ठोस समझ के बिना इसका पहला भाग समझाना मुश्किल है। लेकिन आपको इसे समझने की ज़रूरत नहीं है। ज्यादातर मामलों में, आईट्यून्स स्क्रिप्टिंग डिक्शनरी (ऐप्पलस्क्रिप्ट संपादक में) और परीक्षण और त्रुटि (ऐप्पलस्क्रिप्ट संपादक या पीई-ऐपस्क्रिप्ट के साथ) को देखकर आप इसे वही समझ सकते हैं जो आप चाहते हैं। (बस सुनिश्चित करें कि आप स्क्रैप लाइब्रेरी पर काम कर रहे हैं, या बैकअप लें ...) इस मामले में, संभवतः यह केवल add, copy, duplicate, या , या move, केवल उन सभी को आज़माएं और देखें कि वे क्या करते हैं । या, वैकल्पिक रूप से, dougscripts पर जाएं और नमूने का एक गुच्छा डाउनलोड करें और जो भी आप चाहते हैं उसे ढूंढें।

इस के दूसरे भाग में, स्क्रिप्टिंग ब्रिज में अनुवाद करने का तरीका जानने के लिए ... अच्छी तरह से, मैं इसे एसबी पर लंबे समय तक रुकने के बिना समझा नहीं सकता (जो कि आप मुझसे बेहतर करना चाहते हैं, अगर आप एक से पढ़ना चाहते हैं) । लेकिन मूल बातें ये हैं: जहां तक ​​आईट्यून्स का संबंध है, duplicate एक आदेश है। यदि आप इसे प्रत्यक्ष वस्तु देते हैं (tell application "iTunes" to duplicate theTrack to thePlaylist) यह इसका उपयोग करेगा; यदि नहीं, तो आप विषय को डुप्लिकेट करने के लिए कह रहे हैं (tell theTrack to duplicate to thePlaylist)। यह बिल्कुल अंग्रेजी की तरह काम करता है। लेकिन एसबी एक ऑब्जेक्ट उन्मुख मॉडल पर जोर देती है, जहां duplicate कुछ ऑब्जेक्ट पर एक विधि है। तो, उन दो रूपों में से केवल एक ही काम करने जा रहा है। आम तौर पर, आप यह देख सकते हैं कि dir(iTunes) और dir(track) पर यह देखने के लिए कि किसके पास एक आदेश है जो आपको इच्छित आदेश की तरह दिखता है।

जैसा कि आप उपर्युक्त से बता सकते हैं, यदि आप कुछ भी जटिल करने की कोशिश कर रहे हैं तो आपको बहुत से परीक्षण और त्रुटि मिल गई है। शुभकामनाएँ, और पूछते रहो।

पीएस, मुझे नहीं पता कि आपका कोड चुपचाप क्यों विफल रहता है। स्पष्ट रूप से add_to_ विधि को कमांड में अनुवाद करना चाहिए -1708 त्रुटि (जैसे ऐपस्क्रिप्ट iTunes.add(track, to=newPlaylist) या ऐप्पलस्क्रिप्ट add theTrack to newPlaylist दोनों ...)।

+0

उन्हें कॉम्बो उत्तरों के लिए आपको बोनस देना चाहिए! धन्यवाद। 'iTunes.add_to_' एक लाल हेरिंग था, मैंने कहीं और नहीं देखा था लेकिन अब जब आप इसे समझाते हैं, तो यह समझ में आता है। – abroekhof

संबंधित मुद्दे