2015-04-05 1 views
0

Я совершенно новый для Applescript. Мне нужен сценарий, который будет перечислять художник и количество песен в папке этого исполнителя. Я хотел бы сделать это только для художников, чьи имена начинаются с A. Когда я буду готов, я получаю список для исполнителя, чьи имена начинаются с буквы B, и так далее. Я нашел этот пост: «Какой самый быстрый способ в iOS получить количество песен для конкретного исполнителя?» Возможно, этот скрипт будет работать, но я не знаю, как изменить эту строку «if (artistName! = Nil)», чтобы получить то, что я хочу. Кроме того, я не знаю, где хранится информация, поэтому я могу ее восстановить »// хранить новый счет [artist setObject: [NSNumber numberWithInt: numSongs] forKey: artistName]; О, и я не использую iOS, я буду использовать OSX. Возможно, я мог бы изменить этот сценарий, который я нашел. Он получает количество альбомов художника.Подсчитайте количество песен iTunes от Artist с именем, начинающимся с буквы

MPMediaQuery *albumQuery = [MPMediaQuery albumsQuery]; 
NSArray *albumCollection = [albumQuery collections]; 
NSCountedSet *artistAlbumCounter = [NSCountedSet set]; 
[albumCollection enumerateObjectsUsingBlock:^(MPMediaItemCollection *album, NSUInteger idx, BOOL *stop) { 
NSString *artistName = [[album representativeItem] valueForProperty:MPMediaItemPropertyArtist]; 
[artistAlbumCounter addObject:artistName]; 
}]; 
NSLog(@"Artist Album Counted Set: %@", artistAlbumCounter); 

Я признателен за любую помощь, которую вы можете предложить. Спасибо!

ответ

1

Это не имеет никакого смысла для посмотрите на код iOS и ObjectiveC, чтобы выяснить, что вы должны делать с Applescript! В любом случае, вот что вы хотите.

tell application "iTunes" 
    # Get playlist currently selected 
    set myPlayList to view of window 1 

    set s to (every track in myPlayList whose artist begins with "g") 
    repeat with t in s 
     log name of t 
    end repeat 
    log (count of s) 
end tell 
+0

Спасибо, Вик! Я не был уверен, что я смотрю, как вы так правильно указали. Мне определенно нужен Applescript. –

+0

Используйте 'set trackNames (имя каждого трека в myPlayList, чей художник начинается с« g »)'. Если у вас значительное количество дорожек, это будет намного быстрее, поскольку он получает всю информацию в одной команде, вместо того, чтобы отправлять дополнительное событие Apple для каждого найденного трека. – foo

+0

foo, Будет ли код выглядеть так? 'Сказать приложение«ITunes» # Получить плейлист выбранный набор myPlayList для просмотра окна 1 набор tracknames (имя каждого трека в myPlayList которого художник начинает с«г») журнала (кол-tracknames) конец tell' –

1

В этом случае используется selected playlist (или, если это происходит по какой-либо причине, вся библиотека) и идет от A до Z. Замените код log кодом. Чтобы увидеть, как это работает, убедитесь, что в Script-Editor он показывает Log и для лучшего обзора выберите Messagestab. Обработаны только file tracks.

tell application "iTunes" 
    try 
     set selectedPlayList to view of window 1 
    on error 
     beep 
     set selectedPlayList to (container of browser window 1) -- whole library (I think) 
    end try 
end tell 

set totalItems to 0 

repeat with i from (id of "A") to (id of "Z") 

    set thisLetter to (character id i) 

    log "-----------------------------------------------------------" 

    tell application "iTunes" 
     try 

      set currentItems to (file tracks in selectedPlayList whose artist begins with thisLetter) 
      set countItems to number of items in currentItems 
      set totalItems to totalItems + countItems 

      set s to "s" 
      if countItems = 1 then set s to "" 
      log (countItems as text) & " item" & s & " for artists starting with the letter " & quoted form of thisLetter 
      log "-----------------------------------------------------------" 

      repeat with i from 1 to countItems 
       set thisItem to item i of currentItems 

       tell thisItem -- this is like "tell file track x". Shortens the code because we can use "artist" instead of "artist of thisItem" 

        log (i as text) & ". " & quoted form of (get artist) & " | " & quoted form of (get name) & " [ " & time & " ] " 

       end tell 

      end repeat 


     on error the error_message number the error_number 
      beep 
      display dialog "Error: " & the error_number & ". " & the error_message buttons {"OK"} default button 1 
      return 
     end try 

    end tell 

end repeat 


log "-----------------------------------------------------------" 
log "Items: " & totalItems as text 
+0

Это потрясающе! Я боюсь делать А до Я (все сразу), потому что есть 55 000 песен, и я не знаю, сколько времени это займет. Может быть, я могу настроить его. –

+0

Да, используйте только те части, которые вы хотите. Добавьте «if i> 50 then exit repeat» после «tell thisItem» -block (после «end tell»), чтобы делать только 50 элементов на букву. Но ... это не очень хороший способ просмотреть все треки, потому что имена художников, начинающиеся не с буквы, пропущены, а имена, начинающиеся с «The», как «The Beatles», все под «T». –

+0

Прохладный. Я думаю, что странно, что The Beatles (и другие группы, начинающиеся с «The») находятся под «T». Apple должна это исправить. Вы не увидите этого в библиотечных каталогах, библиотекари подумали, что это было давно. –