第2世代Apple TVを使っているのですが、Macに保存している音楽や動画を再生する為にはそれらがiTunesライブラリに入っている必要があります。
しかし、iTunesが動いているのがMac miniで、動画ファイルはMacBook Airからネットワーク越しでMac miniへコピーしていると、わざわざMac miniを操作してiTunesライブラリへそれらを転送するのを思わず忘れてしまったりします。
そこで特定のフォルダとその中のサブフォルダに入っているファイルを検索し、それらをiTunesライブラリに追加するApplescriptを作ってみました。
iTunesはデフォルトで追加するファイルをライブラリフォルダにコピーしてしまうので大きな動画ファイルを扱う場合は、予めiTunesの設定でライブラリフォルダへファイルをコピーしない様に設定した方が良いかもしれません。
次の様な動作をします。
- 変数strRootPathで設定したフォルダ内に存在するサブフォルダを検索し、それら全てに入っているファイルを見つけ、iTunesライブラリへ追加。
- 過去にこのスクリプトで追加したファイルを除外する為、変数strLogFullNameで定義されたログファイルに書き込まれているファイル名は処理しない。
という事で、スクリプト本体はこんな感じです。
かなり遠回りな処理をしている気もしますし、まともなエラー処理を行っていないので、利用される際は自己責任でお願いします。
set strRootPath to “USB HDD:Movie” — 検索する親フォルダ。
set LogFullName to “USB HDD:AddedFile.txt” –ログファイル。予め存在している必要有り。
— ログファイルを開き、含まれる内容を変数へ代入、ファイルを閉じる。
set FileHanderLog to open for access LogFullName
try
set ConvertedFiles to read FileHanderLog as string
end try
close access FileHanderLog
try
— 親フォルダに入っているサブフォルダを検索。
tell application “Finder”
tell folder strRootPath
set strSubFolderList to a reference to (every folder)
end tell
end tell
— 各サブフォルダを処理する為のループを開始。
set strSubFolderNameList to name of strSubFolderList
repeat with i from 1 to count of strSubFolderList
set strSubFolderName to (item i of strSubFolderNameList) as string
set strSubFolderPath to strRootPath & “:” & strSubFolderName
— サブフォルダ内に入っているファイルを検索。
tell application “Finder”
tell folder strSubFolderPath
set strFileList to (a reference to (every file))
end tell
end tell
— 処理中のサブフォルダに入っている各ファイルを処理する為のループを開始。
set strFileNameList to name of strFileList
repeat with j from 1 to count of strFileNameList
set strFileName to (item j of strFileNameList) as string
set strVideoFile to strSubFolderPath & “:” & strFileName
— ログファイルの内容を保持した変数内に現在処理中のファイル名があるか判断。
if (offset in ConvertedFiles of strFileName) ≤ 0 then
— iTunesに処理中のファイルを追加。
tell application “iTunes”
add strVideoFile
— ログファイルを開き、処理したファイル名を追加書き込みし、ファイルを閉じる。
set FileHanderLog to open for access LogFullName with write permission
set aEOF to get eof of FileHanderLog
try
write (strFileName & return) starting at (aEOF + 1) to FileHanderLog
end try
close access FileHanderLog
end tell
end if
end repeat
end repeat
end try
自動化するのであれば、これをアプリケーションとして保存してcrontab等で実行すれば決めた時刻や曜日に自動で処理をさせる事が出来ます。