2016-09-11 1 views
0

У меня есть плейлисты я предварительно произведя резервное копирование в текстовый файл, который находится в следующем формате:AppleScript для добавления нескольких дорожек из ITunes в список воспроизведения с помощью текстового файла в качестве источника

«название», "художника », "номер дорожки", "альбом"

Я создал образец файла, используя четыре из этих треков:

"Ритуал", "Chick Corea Elektric Группа II", "9", "Paint The World"
«Риск», «Дефтоны», «9», «Алмазные глаза»
«Risveglio», «Goblin», «10», «Zombi»
«Ritual», «Ashes Divide», «8», «Keep Telling Myself It's Alright»

Все треки из этого плей-листа в настоящее время находятся в iTunes. Я хочу добавить каждый из этих треков в список воспроизведения, используя AppleScript. Я был в состоянии сделать это с помощью одного элемента (например: название) со следующим AppleScript:

-- set variables 
set srcFile to "/Users/kjesso/Documents/=Scripting=/AppleScript/ipod_gym_playlist_track_names_sample.txt" 
set allRecords to paragraphs of (read srcFile as «class utf8») 
set myPlaylist to "Test" 
property okflag : false 

-- check if iTunes is running 
tell application "Finder" 
    if (get name of every process) contains "iTunes" then ¬ 
     set okflag to true 
end tell 
if okflag then 
    -- if iTunes is running then do this 
    tell application "iTunes" 
     repeat with aRecord in allRecords 
      set results to (every file track of playlist "Library" whose name is aRecord) 
      repeat with aTrack in results 
       duplicate aTrack to playlist myPlaylist 
      end repeat 
     end repeat 
    end tell 
else 
    -- if iTunes is not running do this 
    return "Unable to execute because iTunes is not running" 
end if 

Однако, если дубликат заглавного трека найден из другого художника это будет просто сделать первый трек, так как сценарий не может различать разных художников с только «заголовком» в качестве контента. Действительно ли массив существует в AppleScript?

Предполагаю, что это нужно сделать с помощью файла списка свойств? При дальнейшем чтении в Интернете, пытаясь создать массив, чтобы сделать то, что я хотел (захватить название трека, исполнителя, альбом и т. Д.), Я наткнулся на различные темы like this, заявив, что лучше использовать список свойств? Я пытаюсь добиться того же, что было сделано here, но вместо отправки вывода в файл CSV я хочу отправить его в список воспроизведения в iTunes.

Я создал следующий пример свойств списка файлов, если мне нужно использовать список свойств для достижения своей цели:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>title</key> 
    <string>"Ritual"</string> 
    <key>artist</key> 
    <string>"Chick Corea Elektric Band II"</string> 
    <key>album</key> 
    <string>"Paint The World"</string> 
</dict> 
<dict> 
    <key>title</key> 
    <string>"Risk"</string> 
    <key>artist</key> 
    <string>"Deftones"</string> 
    <key>album</key> 
    <string>"Diamond Eyes"</string> 
</dict> 
<dict> 
    <key>title</key> 
    <string>"Risveglio"</string> 
    <key>artist</key> 
    <string>"Goblin"</string> 
    <key>album</key> 
    <string>"Zombi"</string> 
</dict> 
<dict> 
    <key>title</key> 
    <string>"Ritual"</string> 
    <key>artist</key> 
    <string>"Ashes Divide"</string> 
    <key>album</key> 
    <string>"Keep Telling Myself It's Alright"</string> 
</dict> 
</plist> 

Кто-нибудь есть какие-либо идеи о том, как получить эту работу?

ответ

1

Если вы хотите, чтобы выбор был не только по имени, но и по Artist, Album ... просто добавьте такие фильтры, как в примере ниже.

Кроме того, может быть, вам не нужно проверять, открыта ли iTunes или нет. Когда скрипт будет запущен, если iTunes не будет запущен, скрипт запустит его напрямую. Поэтому, если вы действительно не хотите, чтобы он автоматически открывал iTunes, ничего не делайте.

Обычно вам не нужно ссылаться на определенный плейлист «Библиотека». Это значение по умолчанию.

set myPlaylist to "Test" 
set {theTitle, theAlbum, theArtist} to {"Ritual", "Paint The World", "Chick Corea Elektric Band II"} 

tell application "iTunes" 
set myTracks to (tracks whose (name is theTitle) and (album is theAlbum) and (artist is theArtist)) 
duplicate (item 1 of myTracks) to playlist myPlaylist 
end tell 

Я сделал предположение о том, что есть только один трек название соответствия, альбом и исполнитель (тогда я принял это первый и единственный пункт найден). Если вы не уверены, что этого достаточно, вы можете добавить что-то еще в фильтр (год, продолжительность, ...).

О plist или текстовом файле или списке записей, просто имейте в виду, что ключ заключается в том, что вы используете тот же метод для записи и чтения вашего файла. Итак, правильный вопрос: как вы пишете этот файл? (Я думаю, не вручную!)

Если вы создаете свой файл из другого сценария, гораздо легче сохранять и читать записи (одна запись = {название, альбом, исполнитель}). Вам нечего делать, кроме как читать и писать в ваших сценариях. Единственным отрицательным моментом является то, что вы не сможете прочитать файл с помощью текстового редактора ...но это необходимо?

На приведенном ниже сценарий читать текстовый файл (такой же, как ваш пример) с 1 трек в каждой строке и каждой величины, разделенных «»:

set textFile to choose file "Select your text file" 
set myText to (paragraphs of (read textFile)) 
set AppleScript's text item delimiters to {","} 
set myRecords to {} 
repeat with aParagraph in myText 
set MS to aParagraph as string 
if (count of (text items of MS)) is 4 then 
    set the end of myRecords to {text item 1 of MS, text item 2 of MS, text item 3 of MS, text item 4 of MS} 
else 
    -- skipt the record : invalid number of text item ! 
end if 
end repeat 

В результате список myRecords, каждый запись, являющаяся списком из 4 значений {title, artist, trackNo, album}

+0

Спасибо за ответ, однако, если я правильно понял ваш ответ правильно, проблема с этим я должен был бы поместить все содержимое всех треков в AppleScript, где в настоящее время все треки находятся в текстовом файле или csv-файле. Это решение было бы прекрасно, если бы это было всего лишь несколько треков, как в моем примере, но у меня на самом деле есть пара сотен, поэтому моя причина пытаться сделать это с помощью скрипта. Что касается файла plist, я создал его с помощью текстового редактора с регулярными выражениями, поэтому его было не так сложно собрать, но я мог бы также сделать это со сценарием. – KeithJ

+0

Это решение будет работать отлично, если бы был способ захватить значения для «theTitle», «the Album» и «theArtist» из исходного текста или файла csv, что возвращает это к моей исходной проблеме. – KeithJ

+0

Я просто добавляю прочитанный образец из текстового файла в свой первый ответ. – pbell

0

В итоге я нашел решение самостоятельно, используя одномерный массив (список) с помощью this post. Вот конечный результат:

set srcFile to "/Users/kjesso/Documents/=Scripting=/AppleScript/ipod_mp3s_sample.csv" 
set allRecords to paragraphs of (read srcFile as «class utf8») 
set myPlaylist to "Test" 

tell application "iTunes" 
    repeat with aRecord in allRecords 
     set AppleScript's text item delimiters to "," 
     set arrayVar to text items of aRecord 
     set results to (every file track of playlist "Library" whose name is (item 1 of arrayVar) and artist is (item 2 of arrayVar) and track number is (item 3 of arrayVar) and album is (item 4 of arrayVar)) 
     repeat with aTrack in results 
      duplicate aTrack to playlist myPlaylist 
     end repeat 
    end repeat 
end tell 

и вот исходный файл «ipod_mp3s_sample.csv» содержание:

Ritual,Ashes Divide,8,Keep Telling Myself It's Alright 
Ritual,Chick Corea Elektric Band II,9,Paint The World 
Risk,Deftones,9,Diamond Eyes 
Risveglio,Goblin,10,Zombi 
Смежные вопросы