個人的には人気アプリケーションは、
- iTunes
- Safari
- Finder
だと思います。人気アプリケーションといっても AppleScript の話題で触れられることの多いアプリケーションです。AppleScript で検索するとよく見る話題が上記のアプリケーション関連。このサイトでは触れることのないアプリケーションともいえます。既に書かれているのにわざわざ書くこともないよな...と思って触れることがなかったのでした。同様に知っていても書かない話題は多数あります。例えば、AppleScript の日本語問題とか。
が、ちょっと考えを改めました。気づいたというか。これだけ書かれているということは、要求があるんだということに。そこで、少しは、軟派な話題でも取り扱ってみるか、と(エラソーに...)。
で、iTunes。iTunes 7 になってからアートワークを自動でダウンロードして取得できるようになりました。取得したアートワークは ~/Music/iTunes フォルダ(デフォルト)の中にある Album Artwork フォルダの階層深いところに保管されているようです。
このダウンロードされたアートワークをファイルに書き出すのが目的です。まずは、iTunes で現在再生中の曲のアートワークを取得してみます。
tell application "iTunes"
try
set thisTrack to current track
on error errMsg number errNum
-- 再生中でないと current track は取得できないので
return
end try
tell thisTrack
if exists artworks then
return artworks -- アートワークの取得
end if
end tell
end tell
最初のエラートラップは、ちゃんと調べるのが面倒だから仕掛けているだけでたいした意味はありません。現在再生中の曲を取得して、その曲のアートワークを調べています。一つの曲に複数のアートワークを設定できるので複数形です。アートワークが設定されているかどうかは exists で調べることができます。
AppleScript から調べている限り、ダウンロードされたアートワークか、自分で設定したアートワークかといったことはあまり気にする必要がないようです。どちらのアートワークでも data 属性を取得できるようですし。つまり、アートワークが設定されているかどうかを調べればいいだけで、ダウンロードされて保管されている拡張子 itc のファイルにアクセスする必要はないのです。もちろん、itc から画像を取得したいとなると別ですが、その場合は、こちらの記事を参照するといいと思います。
アートワークのファイルタイプが JPEG や PNG でも data 属性で取得できるのは picture、つまり、PICT 形式です。だから、ファイルタイプはなにかといったことも気にする必要がなく、単純に write 命令でファイルに書き出せばいいようです。
tell application "iTunes"
try
set thisTrack to current track
on error errMsg number errNum
-- 再生中でないと current track は取得できないので
return
end try
tell thisTrack
if exists artworks then
set thisArtist to artist
set thisAlbum to album
set desktopFolder to path to desktop as Unicode text
repeat with i from 1 to count artworks
set fileName to thisArtist & "_" & thisAlbum & "_" & (i as string)
set theFile to (desktopFolder & fileName & ".pict") as Unicode text
set theResult to my saveAsPICT(theFile, data of artwork i)
if theResult then
my openWithPreview(theFile)
end if
end repeat
end if
end tell
end tell
on saveAsPICT(theFile, theData)
try
set fh to open for access file theFile with write permission
set eof of fh to 512
write theData to fh starting at 513
close access fh
return true
on error errMsg number errNum
try
close access fh
end try
log {errNum, errMsg}
return false
end try
end saveAsPICT
on openWithPreview(theFile)
tell application "Finder"
set theFile to document file theFile
set file type of theFile to " "
set creator type of theFile to " "
end tell
end openWithPreview
ただ、書き出せばいいといってもいくつか注意点があります。AppleScript の write 命令で書き出されたファイルはクリエータータイプが ttxt、ファイルタイプが TEXT になります。これをそのまま開こうとすると TextEdit で開こうとします。今回は画像ファイルを書き出すのですから TextEdit で開こうとしても開けません。そこで、ファイルタイプとクリエータータイプを変更(具体的には両方とも半角スペース 4 つ)し、プレビューで開くようにします。
もう一点。artwork クラスの data 属性は picture(PICT)を返します。これをそのままファイルに書き出しても開くことができないファイルになります。AppleScript の write 命令で picture を書き出すには eof を 512 バイトに設定し、513 バイト目から書き出す必要があります。
PICT で書き出すことができたら、後は煮て食おうが焼いて食おうがお気に召すままに。
0 件のコメント :
コメントを投稿