AppleScript アップルスクリプト 質問、発表 2

このエントリーをはてなブックマークに追加
940911:2008/10/01(水) 15:59:00 ID:mBUwXnHE0
まことに図々しいですが、

放り込んだファイルを同一フォルダ内にコピーしてから
"指定したファイル名.xxx"に変更するようなスクリプトは可能でしょうか?

xxx.jpgをドロップすると同一フォルダにコピーされファイル名がalbum.jpgに変更される。
同一フォルダなので名称が同じだとコピーできないし、
かといってコピー後のファイル名を指定してからコピー実行するするソフトなんてありませんよね。。
941名称未設定:2008/10/01(水) 16:24:28 ID:yi5Sd2MW0
コピーしてリネーム+再度コピー とか書けば出来ね?
942名称未設定:2008/10/01(水) 16:28:19 ID:tBb3TrH/P
>>938
すべてのアルバム名.jpgとアルバム名.txtを
album.jpg、album.txt等に置換してから
スクリプトを実行してください。
それでtxtのほうは登録できるはずです。
jpgのほうは何故か登録できないのは前述のとおりです。
943名称未設定:2008/10/01(水) 16:47:02 ID:v/4GSQ4F0
自分がAppleScriptでjpgからアートワーク追加したときは
http://forums.ilounge.com/archive/index.php/t-96368.html
を参考にした。
ちょっとめんどくさいけどそのまま使えるサンプルコードが書いてあるので助かった。
書き込みが古いので、もし今ではjpgのまま追加できるようになってるなら知りたいな。
944名称未設定:2008/10/01(水) 17:06:51 ID:tBb3TrH/P
>>931
『選択した曲と同一フォルダ内にある「.txt」の付いたファイルを歌詞へ登録』
ってのはカンベンしてください。そもそも Apple Script ってそおゆうの苦手なんです。
grep とか perl とかを併用すれば出来るんでしょうが、ちょっとおいらの手には余ります。

『選択した曲と同一フォルダ内にある「アルバム名.txt」の付いたファイルを歌詞へ登録』
だったら先のスクリプトをちょちょいと変更すれば出来ますよ。見比べてみてください。

tell application "iTunes"
if selection of front browser window is {} then
display alert "歌詞ファイルをコピーする曲を選択して下さい。" buttons {"OK"}
else
set TID to AppleScript's text item delimiters -- text item delimiters を保存
set FI to fixed indexing -- fixed indexing を保存
set fixed indexing to true -- fixed indexing を true にセット
set selectedTracks to selection -- 選択中のトラックを取得
945名称未設定:2008/10/01(水) 17:09:57 ID:tBb3TrH/P
>>944の続き

try
repeat with aTrack in selectedTracks
tell aTrack
set file_location to (the location of aTrack) -- 処置するトラックの場所を取得
set AppleScript's text item delimiters to ":" -- テキストを : で分割するように設定
set file_list to text items of (file_location as string) -- ファイルの完全パスをフォルダ名毎に分割
set (the item (the count of file_list) of file_list) to album & ".txt" -- ファイル名を「アルバム名.txt」に変更
set text_filename to file_list as string -- テキストファイルの完全パスを構築する
set text_file to (open for access file text_filename) -- テキストファイルを開く
set lyrics to read text_file -- 歌詞欄にテキストファイルを読み込む
close access text_file -- テキストファイルを閉じる
end tell
end repeat
end try
set fixed indexing to FI -- fixed indexing を保存した値に戻す
set AppleScript's text item delimiters to TID -- text item delimiters を保存した値に戻す
display alert "作業を完了しました。" buttons {"OK"}
end if
end tell
946名称未設定:2008/10/01(水) 17:18:46 ID:fST5XOHc0
スレが活発になるのは結構だけど、もっと当人の努力が必要と思うんだがなあ。
947名称未設定:2008/10/01(水) 17:23:59 ID:tBb3TrH/P
>>944-945
で、このスクリプトの該当箇所を下のようにちょちょいと変更すれば

set (the item (the count of file_list) of file_list) to album & ".jpg" -- ファイル名を「アルバム名.jpg」に変更
set art_filename to file_list as string -- 画像ファイルの完全パスを構築する
set art_file to read (open for access file art_filename) as picture -- 画像ファイルを開く
set data of artwork 1 to art_file -- アートワークに画像ファイルを読み込む
close access art_file -- 画像ファイルを閉じる

『選択した曲と同一フォルダ内にある「アルバム名.jpg」のファイルをアートワークへ登録』
ってのもできるかなと思ったんですけど全く動かないんですよ。JPEGだとダメなのかな…

>>946
お騒がせしてすいません。そろそろ引っ込みますんで…
948名称未設定:2008/10/01(水) 18:39:13 ID:RcrQAxy30
>944
>『選択した曲と同一フォルダ内にある「.txt」の付いたファイルを歌詞へ登録』
tell application "iTunes"
if selection is {} then error "えらんでください"
set sndFileList to location of selection
repeat with aFile in sndFileList
tell application "Finder"
set theFolder to folder of aFile
set textFilePath to (files of theFolder where (its name ends with ".txt"))
-- textFilePath に拡張子が".txt"のfileの参照のリストが入る。
-- ファイルがなかったとき{}。
-- 複数あったときの処理はどうする?
set jpegFilePath to (files of theFolder where (its name ends with ".jpg"))
-- jpegについても同様
end tell
end repeat
end tell

>>947
ここまでしてもらったら、引っ込む前にアブストラクトくらい書いてってね。>>944
949名称未設定:2008/10/01(水) 18:39:54 ID:RcrQAxy30
さいごの>>944は編集ミスです。すみません
950911:2008/10/01(水) 20:21:15 ID:mBUwXnHE0
>>946
本当にすみません。Applescriptのサイトを見ながらいじってるんのですが。。

選択した曲と同一フォルダ内にある「album.txt」を歌詞へ登録』
tell application "iTunes"
if selection of front browser window is {} then
display alert "歌詞ファイルをコピーする曲を選択して下さい。" buttons {"OK"}
else
set TID to AppleScript's text item delimiters -- text item delimiters を保存
set FI to fixed indexing -- fixed indexing を保存
set fixed indexing to true -- fixed indexing を true にセット
set selectedTracks to selection -- 選択中のトラックを取得
try
repeat with aTrack in selectedTracks
tell aTrack
set file_location to (the location of aTrack) -- 処置するトラックの場所を取得
set AppleScript's text item delimiters to ":" -- テキストを : で分割するように設定
set file_list to text items of (file_location as string) -- ファイルの完全パスをフォルダ名毎に分割
set (the item (the count of file_list) of file_list) to "album.txt" -- ファイル名を album.txt に変更
set text_filename to file_list as string -- テキストファイルの完全パスを構築する
set text_file to (open for access file text_filename) -- テキストファイルを開く
set lyrics to read text_file -- 歌詞欄にテキストファイルを読み込む
close access text_file -- テキストファイルを閉じる
end tell
end repeat
end try
set fixed indexing to FI -- fixed indexing を保存した値に戻す
set AppleScript's text item delimiters to TID -- text item delimiters を保存した値に戻す
display alert "作業を完了しました。" buttons {"OK"}
end if
end tell
951911:2008/10/01(水) 20:31:01 ID:mBUwXnHE0
上記スクリプトのどの部分を入れ替えると
『選択した曲と同一フォルダ内にある「.txt」の付いたファイルを歌詞へ登録』
になるのかな。。
tell application "iTunes"
if selection is {} then error "えらんでください"
set sndFileList to location of selection
repeat with aFile in sndFileList
tell application "Finder"
set theFolder to folder of aFile
set textFilePath to (files of theFolder where (its name ends with ".txt"))

確かにこれでアルバム内のテキストファイルが認識されていますが、
ここから選択して内容をコピペまでつながらない。。
952名称未設定:2008/10/01(水) 23:41:42 ID:IwApV4SV0
本人的にはもう関係無いんだろうけど、
個人的に>>922見てて気が付いたのでメモ

read と close access はエイリアスかファイル参照を渡さないと動作しないけど、
open for access はパス文字列だけでも動作する

普段は参照番号で処理する習慣が付いてたから、
これは気がつかなかった
953名称未設定:2008/10/02(木) 00:51:50 ID:pD8dBPUg0
>>943
一個しか試してないけど read ... as JPEG picture でいけた。

-116エラーってのが memSCErr (サイズチェックに失敗)のことなら、使った画像がたまたま
良かっただけかもしれないけど。
954名称未設定:2008/10/02(木) 01:00:50 ID:pD8dBPUg0

OS X 10.4.11
iTunes 8
画像はAmazon.co.jpから
955名称未設定:2008/10/02(木) 01:49:14 ID:QZEVtUq70
>>953
情報サンスクです。
まだver7使ってるのですがver7だと
>iTunes でエラーが起きました:パラメータのエラーです。
ってでました。8以降の機能なのかな。それとも別の間違いでもしてるのかな。
ちなみに一回8にしたけど、ある仕様が気に入らなかったので7に戻しました。
956名称未設定:2008/10/02(木) 09:22:07 ID:pkJiZDghP
911さん、それでは当方の提示するサンプルスクリプトは
『選択した曲と同一フォルダ内にある「アルバム名.txt」を歌詞へ登録』
という仕様の>>944-945ってことで後はご自分で改良してください。

読み込むファイル名を指定している箇所のキモだけ解説しますと
 set file_location to (the location of aTrack)
ここで処置する曲(トラック)のファイルの場所のフルパスをfile_locationに入れて
 set AppleScript's text item delimiters to ":"
 set file_list to text items of (file_location as string)
ここでfile_locationを":"で区切ってバラバラにしたものをfile_listに入れて
 set (the item (the count of file_list) of file_list) to album & ".txt"
ここでfile_listの最後の項目を「その曲(トラック)のアルバム名.txt」に変更して
 set text_filename to file_list as string
ここでバラバラにfile_listを":"で区切ったフルパスに戻してtext_filenameに入れてます。

『選択した曲と同一フォルダ内にある「.txt」の付いたファイルを歌詞へ登録』
という仕様に改良したければ、>>948さんのスクリプトを参考に考えてみてください。

さらにJPEGファイルをアートワークに登録するスクリプトに改良したければ、
>>947>>943さん及び>>953さんのアドバイスを参考にしてください。

ということで当方は引っ込みます。ご健闘をお祈り致します。

(つーか、おいらはもうちょっとちゃんと勉強しないと付いていけそうにない)orz
957911:2008/10/02(木) 11:07:52 ID:lwqv0cYu0
みなさま有り難うございます。

先程OSX10.5+iTunes8環境で『テキストを歌詞に登録』を実行してみたところ
テキストの冒頭がTo the...なのですが,登録された歌詞を見てみると
oT
とだけ登録されてました..冒頭の二文字だけでしかも逆になってる??
10.5だとまた違うんでしょうね。

>>948さんの.txtを含む書類を認識させたスクリプトを何とか間に入れたいですがまだ成功せず。。
アートワークは何故登録されないんでしょうかね。
>>943のサイトを見ると
set art_file to read (open for access file art_filename) as picture
set data of artwork 1 to art_file
なぜこれでペーストされないんでしょうね。。
プレビューで開いてアートワークにコピペでは貼り付けれるのに。。
958名称未設定:2008/10/02(木) 17:20:17 ID:hhYzJcgE0
>oT
>とだけ登録されてました..冒頭の二文字だけでしかも逆になってる??

違うファイルを参照しちゃってるんだと思うけど…

>アートワークは何故登録されないんでしょうかね。

>>953さんのアドバイスは無視?
959911:2008/10/02(木) 17:58:10 ID:lwqv0cYu0
>>956
いろんな箇所をいじってみたら
set art_file to read (open for access file art_filename) as JPEG picture
set data of front artwork to art_file
でアートワークが登録されました!
アドバイス有り難うございました。

しかし..
複数曲選択で実行しましたが冒頭曲しか登録されません。
歌詞の時はreadの位置を変えることで冒頭曲のみ登録だったのを
一括登録できるようになりましたがjpgに関してはreadの位置を変えると読み込みできません。

今だits name ends with ".txt"のような
txtを含むとかタイプがTXTを選択するというような記述ができず。。

album.txtに変更してしまった場合、
親フォルダ名を参照にalbum.txtやalbum.jpgを
親フォルダ名.txtに変更なんてスクリプトも書けるんでしょうね。。
960名称未設定:2008/10/02(木) 18:28:21 ID:OwJW0Ia30
>>959
人の話を聞けカス。
961911:2008/10/02(木) 21:14:12 ID:8DYrr/i80
OSX 10.5+ iTunes8環境ではアートワーク登録できましたが
OSX 10.4 +iTunes7.6環境ではできませんでした。。
バージョンによって命令の仕方が違うんですね。
もう少し調べてみます。。

>>960
何か話したの?どした?
962名称未設定:2008/10/02(木) 21:25:08 ID:iJDcQlaU0
煽るような返事しか出来ないならスルーしろよ…
963名称未設定:2008/10/02(木) 21:36:25 ID:OMqx/TBj0
>>961
自分の立場をわきまえてレスした方がいいよ
元々ここは丸投げするスレじゃないからね

たまたま善意で教えてくれた人がいただけでさ
多少言われたぐらいでそんな態度だと皆もう相手しないよ

つーかここまでしつこいのもはじめてみたな
本来ならこっちでしょ
Macのこんなソフト・アプリを探してます Part 33
http://pc11.2ch.net/test/read.cgi/mac/1222904774/
964名称未設定:2008/10/02(木) 21:48:24 ID:/X+G3ORz0
やっぱ皆ムカムカしながらROMってたんだなw
965911:2008/10/02(木) 22:24:33 ID:8DYrr/i80
皆様ご迷惑おかけしました。アートワークは諦めます。。
せめて登録するテキストを同一フォルダ内の「".txt"が含まれているもの」にする記述を教えていただけないでしょうか?
set sndFileList to location of selection
repeat with aFile in sndFileList
tell application "Finder"
set theFolder to folder of aFile
set textFilePath to (files of theFolder where (its name ends with ".txt"))
どうやってこれを入れたらいいやら。。
966名称未設定:2008/10/02(木) 22:52:20 ID:sNrWIH2q0
吊り棚
967名称未設定:2008/10/02(木) 22:52:21 ID:z7a4biKZ0
mp3ならアートワークと歌詞を埋め込るcuiツールがあった気がする
968名称未設定:2008/10/02(木) 23:54:34 ID:lAv5R8+20
なんだか細切れになってきて,どこでつまづいているのかわかりにくくなってきた。
ここまでのスクリプトの全文をさらして味噌?
969名称未設定:2008/10/02(木) 23:59:12 ID:NSw/yxPz0
> ここまでのスクリプトの全文をさらして味噌?

それは止めてくれ〜。せめてどこかにうpで。

>>965
・ファイルは必ずある、
・幾つあっても、先頭の一つを選ぶ、
として、とりあえずこれ加えとけば?

set textFile to first item of textFilePath as alias

open/read/closeにはtextFileを指定。
文字コードのこととか、改行コードのこととか、
気になることはあるけど。
970911:2008/10/03(金) 00:18:26 ID:BxHiaM1G0
『選択した曲と同一フォルダ内にある"album.txt"を歌詞へ登録』

tell application "iTunes"
if selection of front browser window is {} then
display alert "歌詞ファイルをコピーする曲を選択して下さい。" buttons {"OK"}
else
set TID to AppleScript's text item delimiters -- text item delimiters を保存
set FI to fixed indexing -- fixed indexing を保存
set fixed indexing to true -- fixed indexing を true にセット
set selectedTracks to selection -- 選択中のトラックを取得
try
repeat with aTrack in selectedTracks
tell aTrack
set file_location to (the location of aTrack) -- 処置するトラックの場所を取得
set AppleScript's text item delimiters to ":" -- テキストを : で分割するように設定
set file_list to text items of (file_location as string) -- ファイルの完全パスをフォルダ名毎に分割
set (the item (the count of file_list) of file_list) to "album.txt" -- ファイル名を album.txt に変更
set text_filename to file_list as string -- テキストファイルの完全パスを構築する
set text_file to (open for access file text_filename) -- テキストファイルを開く
set lyrics to read text_file -- 歌詞欄にテキストファイルを読み込む
close access text_file -- テキストファイルを閉じる
end tell
end repeat
end try
set fixed indexing to FI -- fixed indexing を保存した値に戻す
set AppleScript's text item delimiters to TID -- text item delimiters を保存した値に戻す
display alert "作業を完了しました。" buttons {"OK"}
end if
end tell

OSX 10.4+iTunes7.6.2
971911:2008/10/03(金) 00:24:46 ID:BxHiaM1G0
アートワークに関しては頑張ってみますのでこれだけ書かせてください。。

フォルダ内には必ず一つだけ.txtがあります。

作成していただいた上記スクリプトに>>969さんらの
tell application "Finder"
set theFolder to folder of aFile
set textFilePath to (files of theFolder where (its name ends with ".txt"))
set text_file to textFilePath as alias
をどこかの行と置換して
set text_file to (open for access file text_filename)
set lyrics to read text_file
close access text_file
ここ辺りに繋げるようにすればいいんですよね。。
972969:2008/10/03(金) 00:46:34 ID:Q91v2H9C0
>>969のあの一行は、>>965の最後にくっつけてくれれば良いと思って書いた。

>>971で当てはめると、
set text_file to textFilePath as alias の代わりに
set text_file to first item of textFilePath as alias

だけど、>>971のそれ以下はなんか変だな。
そいじゃ。24はじまるw
973名称未設定:2008/10/03(金) 06:09:14 ID:WsB/GY8t0
finderのファイル操作のスクリプトって、
返り値がリストになってるのを気づかずに、
うっかり右往左往することがままある。
974名称未設定:2008/10/03(金) 06:38:31 ID:72drazYo0
プログラムの用語解説ってホント不親切だよね
975911:2008/10/03(金) 11:51:03 ID:auVKhvGG0
難しいですね・・
tell application "iTunes"
set sndFileList to location of selection
repeat with aFile in sndFileList
tell application "Finder"
set theFolder to folder of aFile
set textFilePath to (files of theFolder where (its name ends with ".txt"))
set text_file to first item of textFilePath as alias
end tell -----ここまででフォルダ内の.txtが指定されてますが・・
tell application "iTunes"
set text_file to (open for access file text_file) -- テキストファイルを開く
set lyrics to read text_file -- 歌詞欄にテキストファイルを読み込む
close access text_file -- テキストファイルを閉じる
end tell
end repeat
display alert "作業を完了しました。" buttons {"OK"}
end tell

iTunesに命令後,Finderに命令しファイルを指定,またiTunesに戻って開いて登録して終了.
これで実行するとiTunesでエラーがおき、
"指定できた.txt"のタイプをfile specificationに変換できません。となります。
こんなに簡単な記述じゃダメですね・・
976名称未設定:2008/10/03(金) 11:59:22 ID:tLWIRrdA0
>>975
set lyrics to
ってそもそも曲を指定してない
977名称未設定:2008/10/03(金) 12:39:50 ID:R8MWYzkdP
>>975
あと、なんでiTunesに2回もtellしてんの?
978名称未設定:2008/10/03(金) 13:11:05 ID:DIk5F5g70
勉強中な振りをしているだけの丸投げ君だからだろ
979911:2008/10/03(金) 15:29:07 ID:auVKhvGG0
リネームソフトを使えば親フォルダを参照にファイル名を戻せそうなので
「曲と同じフォルダ内にある"指定したファイル名"を歌詞に登録」でやってみます。。
本当にお騒がせしました。
980名称未設定:2008/10/03(金) 16:23:55 ID:Wq0mDsqs0
iTunesスレや他スレでも見かけたけど、AppleScript以外のが楽で速いだろ。
参考にするヒト以外は。
981911:2008/10/03(金) 16:50:26 ID:auVKhvGG0
>>980
希望通りのソフトがあればここの皆さんのご迷惑にはならなかんですが・・
今はiTunes7とにらめっこしてアートワークの埋め込みに格闘してます。。
982名称未設定:2008/10/03(金) 17:07:55 ID:R8MWYzkdP
繰り返し処理で1回めはOKで2回目以降はNGってのは
ファイルのopen,close処理の間違いかなって気もするけど
おいらも詳しいことは分かんないんでアドバイスはできません
983名称未設定:2008/10/03(金) 18:16:17 ID:auVKhvGG0
アートワークの登録は何とかreadしてset dataまで行ったんですが結果、登録できないです・・
close accessがあるとset fixed indexing to trueになり削除するとfalstになります。
readでJPEGが開き、やっと
set data of artwork 1 of file track id 2166 of user playlist id 1580 of source id 39 to <data
まで来たんですが登録されないんですよね。。

tell application "iTunes"
set TID to AppleScript's text item delimiters -- text item delimiters を保存
set FI to fixed indexing -- fixed indexing を保存
set fixed indexing to true -- fixed indexing を true にセット
set selectedTracks to selection -- 選択中のトラックを取得
try
repeat with aTrack in selectedTracks
tell aTrack
set file_location to (the location of aTrack) -- 処置するトラックの場所を取得
set AppleScript's text item delimiters to ":" -- テキストを : で分割するように設定
set file_list to text items of (file_location as string) -- ファイルの完全パスをフォルダ名毎に分割
set (the item (the count of file_list) of file_list) to "album.jpg" -- ファイル名を album.jpg に変更
set art_filename to file_list as string -- 画像ファイルの完全パスを構築する
set artworkData to read (open for access file art_filename) as JPEG picture -- 画像ファイルを開く
set data of artwork 1 to artworkData -- アートワーク欄に画像ファイルを読み込む
end tell
end repeat
end try
set fixed indexing to FI -- fixed indexing を保存した値に戻す
set AppleScript's text item delimiters to TID -- text item delimiters を保存した値に戻す
end tell
984名称未設定:2008/10/03(金) 18:22:09 ID:wWHL/Vu90
質問もいいが、もう少し自分のなかで整理して、
ある程度まとまってから書き込んでくれんかな。
それと次スレに持ち越したりしないようにな。
985名称未設定:2008/10/03(金) 18:33:28 ID:tSXcssW/0
ひとついっていい?
こんだけあーだこーだ悩んでる暇があれば、手動で貼付けたほうが(ry
986名称未設定:2008/10/03(金) 18:40:01 ID:CvHFs6fU0
手段が目的化するのってAppleScriptの醍醐味じゃん
987名称未設定:2008/10/03(金) 18:43:54 ID:Abs+u1Ko0
988名称未設定:2008/10/03(金) 20:32:14 ID:qWh+Cs9X0
>>986
ありすぎて困る
989名称未設定
open for accessしてclose accessしないのは
ウンコした後にケツを拭かないようなもの。