今回のテーマは、プロパティの値の代入と取得です。
JavaScript のScripting Bridgeでは、プロパティの取得は
app.name() app.windows[0].tabs[0].url()
のように、メソッドとしてアクセスします。
プロパティ値の代入は
app.windows[0].tabs[0].url = "https://twitter.com/"
のように、=を付けてアクセスします。
iTunesの曲のデータをアレコレ操作する。
プロパティの一覧がいっぱいあるのは音楽ファイル。
今回は、音楽ファイルのプロパティを取得したり更新したりします。
音楽ファイルの一覧
itunesに入っている、全部の音楽ファイル
app = Application("iTunes") app.playlists["ライブラリ"].tracks
forEachでアクセスします
Array.forEach()が手っ取り早いので、Arrayにしておきます。
app = Application("iTunes") list = Array.apply(null,app.playlists["ライブラリ"].tracks) list.forEach( function(e){ console.log( e.name() ) } )
あとは、JavaScriptのArrayと同じです。
map / find / filter などと組合せてあげて、幸せになれます。
☆5のものを取り出す
app = Application("iTunes") list = Array.apply(null,app.playlists["ライブラリ"].tracks) fav = list.filter( function(e){return e.albumRating() ==100 } ) fav.forEach( function(e){ console.log( e.name() ) } )
☆4つ以上のものを取り出す
app = Application("iTunes") list = Array.apply(null,app.playlists["ライブラリ"].tracks) fav = list.filter( function(e){return e.albumRating() >= 80 } ) fav.forEach( function(e){ console.log( e.name() ) } )
☆☆☆☆☆ なのに、実際は0−100で入力されていて、ちょっと楽しいです。
10 回以上再生した曲
10回以上再生した曲を取り出す。
app = Application("iTunes") list = Array.apply(null,app.playlists["ライブラリ"].tracks) fav = list.filter( function(e){return e.playedCount() >= 10 } ) fav.forEach( function(e){ console.log( e.name() ) } )
もうね、iTunesのSearch系のコマンド使うより、JSとしてアクセするほうが楽なんですよ。
10回以上の再生は、全部☆4つにする
app = Application("iTunes") list = Array.apply(null,app.playlists["ライブラリ"].tracks) fav = list.filter( function(e){return e.playedCount() >= 10 } ) fav.forEach( function(e){ if(e.rating() < 80){ e.rating = 80 } ) } )
これで一気に☆☆☆☆をつけることが出来ました。
e.rating = 80
この部分が、書換のところです。即時反映されますね。
同じようにして、色々なプロパティををいじれます。
- 曲の再生回数をリセットしたり
- 曲の歌詞を追加したり
- 歌詞が未設定の曲を取り出したり。
- 特定の歌手の曲に絞り込んだり。
音楽ファイルに直接アクセスして書き換えること同じことが出来る。
LyricsMasterとかは、この仕組みをつかって、歌詞の未設定の曲を探して、見つけてては、歌詞を探すようなことをしていましすね。
まとめ:JavaScriptとの融合のメリット
iTunesのような、たくさんのTrackがあるアプリでも、Array.filter というJavaScriptのCoreオブジェクトで戦える。もちろんsearchXXXといったiTunesのコマンドを使ってもいいんですが、JavaScriptで書ける良さってのが、Array融合にあると思う。