我写了一个简单的AppleScript来自动将文件添加到iTunes中并填充元数据。当我直接从编辑器运行它时它可以运行但是从iTunes运行它我会得到“AppleEvent Timed Out”。
以下是代码:
set mainFolder to choose folder
tell application "Finder"
-- Loop through all shows
set shows to every folder of mainFolder
repeat with show from 1 to count of shows
-- Set Show Name
set showName to name of item show of shows
-- Set Artist
display dialog "Who is the artist for " & showName & "?" default answer showName
set showArtist to the text returned of the result
-- Set Genre
display dialog "What is the genre for " & showName & "?" default answer ""
set showGenre to the text returned of the result
-- Loop through all season
set seasons to every folder in item show of shows
repeat with season from 1 to count of seasons
set seasonName to name of item season of seasons
-- Set Season Number
set seasonNumber to text 1 thru ((offset of "-" in seasonName) - 2) of seasonName as integer
-- Set Year
display dialog "What year was Season " & seasonNumber & " of " & showName & " in?" default answer "2012"
set showYear to the text returned of the result
-- Set Season Name
set seasonName to text ((offset of "-" in seasonName) + 2) thru ((offset of "." in seasonName) - 1) of seasonName as text
-- Set Total Episodes in Season
set totalEpisodes to count of every file in item season of seasons
-- Loop through all episodes
set episodes to every file in item season of seasons
repeat with episode from 1 to count of episodes
set episodeName to name of item episode of episodes
-- Set Episode Number
set episodeNumber to text 1 thru ((offset of "-" in episodeName) - 2) of episodeName as integer
-- Set Episode Name
set episodeName to text ((offset of "-" in episodeName) + 2) thru ((offset of "." in episodeName) - 1) of episodeName as text
tell application "iTunes"
set newAddition to (add (item episode of episodes as alias))
tell newAddition
set video kind to TV show
set name to episodeName
set album to seasonName
set track number to episodeNumber
set track count to totalEpisodes
set disc number to "1"
set disc count to "1"
set show to showName
set season number to seasonNumber
set episode number to episodeNumber
-- Manual Entries
set artist to showArtist
set genre to showGenre
set year to showYear
-- Change episode ID based on season and episode number
if (seasonNumber < 10) then
if (episodeNumber < 10) then
set episode ID to ("S0" & seasonNumber as text) & "E0" & episodeNumber as text
else
set episode ID to ("S0" & seasonNumber as text) & "E" & episodeNumber as text
end if
else
if (episodeNumber < 10) then
set episode ID to ("S" & seasonNumber as text) & "E0" & episodeNumber as text
else
set episode ID to ("S" & seasonNumber as text) & "E" & episodeNumber as text
end if
end if
end tell -- End newAddition
end tell -- End iTunes
end repeat -- End Episode Repeat
end repeat -- End Season Repeat
end repeat -- End Show Repeat
end tell -- End Finder Repeat
答案 0 :(得分:0)
代码本身看似合理,假设您在计算文件名的偏移量和不同组件时没有任何错误。但是,我可以看到可能解决您问题的2种可能的错误来源。
首先,您的Finder告诉代码块中的iTunes告诉代码块。基本上你是告诉Finder告诉iTunes做点什么。这是可能的错误的来源。您应该将tell块彼此分开。例如,你有这个......
tell application "Finder"
-- do something
tell application "iTunes"
-- do something
end tell
end tell
当你应该这样的时候......
tell application "Finder"
-- do something
end tell
tell application "iTunes"
-- do something
end tell
其次,你的“episode id”代码中有一个带括号的错误。例如......
("S0" & seasonNumber as text)
应该是......
"S0" & (seasonNumber as text)
因此我将iTunes的内容分成了一个子程序并修复了括号。请注意,我还没有测试过这段代码。我想我把所有适当的变量都传递给了子程序,但我无法确定。我希望这会有所帮助。
set mainFolder to choose folder
tell application "Finder"
-- Loop through all shows
set shows to every folder of mainFolder
repeat with show from 1 to count of shows
-- Set Show Name
set showName to name of item show of shows
-- Set Artist
display dialog "Who is the artist for " & showName & "?" default answer showName
set showArtist to the text returned of the result
-- Set Genre
display dialog "What is the genre for " & showName & "?" default answer ""
set showGenre to the text returned of the result
-- Loop through all season
set seasons to every folder in item show of shows
repeat with season from 1 to count of seasons
set seasonName to name of item season of seasons
-- Set Season Number
set seasonNumber to text 1 thru ((offset of "-" in seasonName) - 2) of seasonName as integer
-- Set Year
display dialog "What year was Season " & seasonNumber & " of " & showName & " in?" default answer "2012"
set showYear to the text returned of the result
-- Set Season Name
set seasonName to text ((offset of "-" in seasonName) + 2) thru ((offset of "." in seasonName) - 1) of seasonName as text
-- Set Total Episodes in Season
set totalEpisodes to count of every file in item season of seasons
-- Loop through all episodes
set episodes to every file in item season of seasons
repeat with episode from 1 to count of episodes
set episodeName to name of item episode of episodes
-- Set Episode Number
set episodeNumber to text 1 thru ((offset of "-" in episodeName) - 2) of episodeName as integer
-- Set Episode Name
set episodeName to text ((offset of "-" in episodeName) + 2) thru ((offset of "." in episodeName) - 1) of episodeName as text
my addEpisodeToItunes((item episode of episodes) as alias, seasonName, seasonNumber, episodeName, episodeNumber, totalEpisodes, showName, showArtist, showGenre, showYear)
end repeat -- End Episode Repeat
end repeat -- End Season Repeat
end repeat -- End Show Repeat
end tell -- End Finder Repeat
on addEpisodeToItunes(theEpisode, seasonName, seasonNumber, episodeName, episodeNumber, totalEpisodes, showName, showArtist, showGenre, showYear)
tell application "iTunes"
set newAddition to add theEpisode
tell newAddition
set video kind to TV show
set name to episodeName
set album to seasonName
set track number to episodeNumber
set track count to totalEpisodes
set disc number to "1"
set disc count to "1"
set show to showName
set season number to seasonNumber
set episode number to episodeNumber
-- Manual Entries
set artist to showArtist
set genre to showGenre
set year to showYear
-- Change episode ID based on season and episode number
if (seasonNumber < 10) then
if (episodeNumber < 10) then
set episode ID to "S0" & (seasonNumber as text) & "E0" & (episodeNumber as text)
else
set episode ID to "S0" & (seasonNumber as text) & "E" & (episodeNumber as text)
end if
else
if (episodeNumber < 10) then
set episode ID to "S" & (seasonNumber as text) & "E0" & (episodeNumber as text)
else
set episode ID to "S" & (seasonNumber as text) & "E" & (episodeNumber as text)
end if
end if
end tell -- End newAddition
end tell -- End iTunes
end addEpisodeToItunes
答案 1 :(得分:0)
以下是我解决它的方法:
另存为应用而非脚本。
我从这里得到了解决方案: http://forums.ilounge.com/applescripts-itunes-mac/245120-need-help-add-tracks-files-via-applescript.html
我不知道为什么会这样做,我尝试过使用try-catch,超时......仍然没有用。它可以作为应用程序使用吗?!