上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

--/--|スポンサー広告||TOP↑

現在の環境: Mac OS X 10.4.7

参考: テキストの扱い - do shell script in AppleScript

set x to (the clipboard) as Unicode text
do shell script "echo " & quoted form of x & " | tr '\\r' '\\n' | grep 'www' &"

次のように tr した結果を変数に入れるとダメなんですよね。

set x to (the clipboard) as Unicode text
set x to (do shell script "echo " & quoted form of x & " | tr '\\r' '\\n'")
do shell script "echo " & quoted form of x & " | grep 'www' &"

これでハマって諦めかけたのでここに書いときます。
(Web ブラウザによっては連続した円記号が表示されますが、すべてバックスラッシュに置換する必要があります。)


スポンサーサイト
09/22|AppleScriptコメント(0)トラックバック(2)TOP↑

現在の環境:
Mac OS X 10.4.7
iTunes 7.0

iTunesAppleScript 用語 artwork に新しく追加されたプロパティ downloaded によって、曲のアートワークがダウンロードされてキャッシュされたものか、ファイルに埋め込まれたものかを判別できるようになったようです。(どの程度正確に判別できるかは不明)
以下のスクリプトを実行すると三つのプレイリストが作成され、アートワークが

なし
キャッシュ
埋め込み

の別に曲を振り分けます。

G3 iBook の場合で、1曲あたり
アートワークがある曲なら1~3秒
アートワークなしなら0.5秒~1秒
ほどかかります、計ったわけじゃないけど。


ちょい修正。(060917)
削除もするようにしました。
例えば、アートワークを持たないトラック A がプレイリスト"artwork none"に入っているとします。
このトラック A にアートワークを埋め込んだ後に選択状態にして再びスクリプトを実行すると、トラック A はプレイリスト"artwork embedded"に追加され、"artwork none"からは削除されます。

また、前回はプレイリストに追加するのに

set trackLoc to (location of curTrack)
add trackLoc to noArtwork


という書き方をしていましたが、

duplicate curTrack to noArtwork

に改めました。
一曲ごとにトラックの location を取得しなくてよくなった分、実行速度がほんの少しあがったんじゃないかと。

スクリプト形式で保存して、~/Library/Scripts/iTunes に置き、スクリプトメニューから実行するのがもっとも速いようです。
5838曲までは問題なく処理できることを確認済みですが、曲数が多すぎるとエラー出るかも。各プレイリストの曲数がいくら待っても増えていかず、完了のダイアログも出なかったらたぶんエラーで止まってます。


また修正。(060918)
トラックが選択されていない状態で"選択した曲を対象に"ボタンを押した場合、前回はキャンセルになりましたが、一番上のブラウザウインドウまたはプレイリストウインドウで表示中のプレイリストの全曲を対象にするかどうか尋ねるダイアログを出すようにしました。

--スクリプトここから

tell application "iTunes"

activate

set text1 to "以下のプレイリストを作成します。" & return & "同名のプレイリストが既にある場合はそこにトラックを追加します。" & return & return & "アートワークが..." & return & "1. ないファイルトラック \"artwork none\"" & return & "2. 埋め込まれていないファイルトラック \"artwork cached\"" & return & "3. 埋め込まれているファイルトラック \"artwork embedded\"" & return & return & "※同名のプレイリストを別用途に使用している場合は、スクリプトを書き換えるか、既存のプレイリスト名を書き換える必要があります。" & return & "※「\"ミュージック\"の全曲を対象に」ボタンは、ライブラリ > ミュージックに分類された全ての音楽トラックを対象とします。"
displayDialog(text1, {"キャンセル", "\"ミュージック\"の全曲を対象に", "選択した曲を対象に"}, "選択した曲を対象に") of me

if button returned of result is "選択した曲を対象に" then
if not (selection as list) is {} then
set targetTracks to (every item of (selection as list))
else
set theWindow to {}
repeat with i from 1 to (number of every window)
if (class of item i of every window) is browser window or (class of item i of every window) is playlist window then
if (class of view of item i of every window) is user playlist or (class of view of item i of every window) is folder playlist then
set theWindow to (item i of every window)
exit repeat
end if
end if
end repeat
if theWindow is not {} then
set curPlaylistName to (name of (view of theWindow))
displayDialog("トラックが選択されていません。" & return & "表示中のプレイリスト" & return & "\"" & curPlaylistName & "\"" & return & "に含まれる全ての曲を対象にしますか?", {"キャンセル", "OK"}, "OK") of me
set thePlaylist to (view of theWindow)
set targetTracks to (every track of thePlaylist)
else
displayDialog("トラックが選択されていません。", {"キャンセル"}, "キャンセル") of me
end if
end if
else
set targetTracks to every track of (item 1 of (every playlist whose special kind is Music))
end if

if not (exists playlist "artwork cached") then
set artworkCached to (make new playlist with properties {name:"artwork cached"})
else
set artworkCached to playlist "artwork cached"
end if

if not (exists playlist "artwork none") then
set noArtwork to (make new playlist with properties {name:"artwork none"})
else
set noArtwork to playlist "artwork none"
end if

if not (exists playlist "artwork embedded") then
set artworkEmbedded to (make new playlist with properties {name:"artwork embedded"})
else
set artworkEmbedded to playlist "artwork embedded"
end if

set recentPlaylist to {}
set curFixedIndexing to fixed indexing
set fixed indexing to true
repeat with curTrack in targetTracks
if (class of curTrack is file track) then
set trackID to (database ID of curTrack)
if (every artwork of curTrack is {}) then
if (every track of noArtwork whose database ID is trackID) is {} then duplicate curTrack to noArtwork
try
delete (every track of artworkEmbedded whose database ID is trackID)
end try
try
delete (every track of artworkCached whose database ID is trackID)
end try
set recentPlaylist to noArtwork
else if not (downloaded of artwork 1 of curTrack) then
if (every track of artworkEmbedded whose database ID is trackID) is {} then duplicate curTrack to artworkEmbedded
try
delete (every track of artworkCached whose database ID is trackID)
end try
try
delete (every track of noArtwork whose database ID is trackID)
end try
set recentPlaylist to artworkEmbedded
else
if (every track of artworkCached whose database ID is trackID) is {} then duplicate curTrack to artworkCached
try
delete (every track of artworkEmbedded whose database ID is trackID)
end try
try
delete (every track of noArtwork whose database ID is trackID)
end try
set recentPlaylist to artworkCached
end if
end if
end repeat
set fixed indexing to curFixedIndexing

activate

--set visible of browser window "iTunes" to true
if recentPlaylist is not {} then set view of browser window "iTunes" to recentPlaylist

displayDialog("完了", {"OK"}, "OK") of me

end tell


on displayDialog(aText, btns, defbtn)

tell application "iTunes"
activate
display dialog aText buttons btns default button defbtn giving up after 118 with icon path to resource "iTunes.icns" in bundle (path to application "iTunes")
end tell

end displayDialog


09/16|AppleScriptコメント(0)トラックバック(0)TOP↑

現在の環境:
Mac OS X 10.4.7
iTunes 7.0

iTunes がバージョン 7.0 になって、アルバムのアートワークをダウンロードする機能がつきました。
ダウンロードしたアートワークは
~/Music/iTunes/Album Artwork
にキャッシュのような形で保存され、曲ファイルには埋め込まれないようです。

しかしどうしても必要ならば、「iTunes 7 の機能を使用してアートワークを取得したトラック」を、ひとつまたは複数選択してから以下のスクリプトを実行すれば、画像を曲ファイルに埋め込むことができるようです。
ただし、取得したアートワークはサイズが大きいため、無駄に曲ファイルの容量が増えます。通常の使用であれば iTunes 7 の仕様に従って埋め込まずに表示した方がよいと思われます。
また、曲ファイルそのものに変更を加えるスクリプトですから、バックアップを取った上で自己責任で実行してください。
何度か試してみて、画像を埋め込めることは確認済みですが、弊害の有無までは保証できませんので。

tell application "iTunes"

activate
display dialog "選択中のトラックから取得したアートワークデータを" & return & "data of artwork 1 として曲ファイルに埋め込みます。"

set selectedTracks to (selection as list)

repeat with curTrack in selectedTracks
if (class of curTrack is file track) and (every artwork of curTrack is not {}) and (downloaded of artwork 1 of curTrack is true) then
set artworkData to (data of artwork 1 of curTrack) as picture
set data of artwork 1 of curTrack to artworkData
end if
end repeat

display dialog "完了" buttons {"OK"} default button 1

end tell


09/13|AppleScriptコメント(0)トラックバック(0)TOP↑

現在の環境:
Mac OS X 10.4.7
OmniOutliner 3.6.1

reveal ってこういうの。

tell application "Finder"
activate
reveal (path to preferences folder)
end tell

「画面上の見える所まで項目を持ってきて、選択してみせる」といった捉え方でいいんでしょうか。

OmniOutliner が用意している AppleScript 用語にはこの reveal がないんですね。けっこう需要あると思うんですが。
以下のスクリプトでは、作成した新しい子が画面の外に隠れていても、スクロールして表示します。

tell application "OmniOutliner"

activate
set expanded of section 1 of document 1 to true
set newChild to (make new child at beginning of section 1 of document 1 with properties {topic:"test"})

select newChild

tell application "System Events"
if name of (path to frontmost application) is "OmniOutliner.app" then
key code 53 --esc key
end if
end tell

--select newChild
--save document 1

end tell


09/13|AppleScriptコメント(0)トラックバック(0)TOP↑

Mac OS X 10.4.7 上の話。

tell application "System Events" to every application process でプロセスを見ると AppleScript のアプレットは名前が applet か droplet になってしまい、区別がつきません。
こう書けばいいみたいです。

tell application "System Events"
(title of (every application process whose name is "applet")) contains "アプレット名"
--ドロップレットの場合
--(title of (every application process whose name is "droplet")) contains "アプレット名"
end tell

true か false が返ります。


09/08|AppleScriptコメント(0)トラックバック(0)TOP↑
プロフィール

AquaBowler

  • Author:AquaBowler
  • 現在の Mac 環境:
    iBook Late2001
    Mac OS X 10.4.11
フリーエリア
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
ブログ内検索
RSSフィード
リンク
del.icio.us
feed meter

RSS feed meter for http://kotoerisan.blog16.fc2.com/

FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。