著作一覧 |
やっぱ、プログラミング漢(guyと振る)はこうでなきゃな。「必要なことは全部 Rubyist Magazine の記事に書いてあるから」とさらりと言うところがいいな。
車輪は2個必要だ(セグェイしかり、芝刈り機しかり、自転車しかり)。
でも、なんか違うような気もするが。両方が間違えてる可能性ってテストプログラムが間違える可能性より高いように思うんだけど。
何にも選択していないとcurrentTrackがnilになるな。
# playing.rb require 'win32ole' itunes = WIN32OLE.new("iTunes.Application") track = itunes.CurrentTrack if track.nil? puts "not playing" else puts "#{track.Artist} - #{track.Name} (#{track.Album})" endかな。
トラック名がマッチしたものをプレイリストに登録して再生するとか
require 'win32ole' if ARGV.length != 2 puts 'usage: ruby plist.rb list-name track-name' exit(1) end itunes = WIN32OLE.new("iTunes.Application") list = itunes.createPlayList(ARGV[0]) r = Regexp.compile(ARGV[1], Regexp::IGNORECASE) itunes.libraryPlaylist.tracks.each do |trk| if r.match(trk.name) list.addFile(trk.location) end end list.playFirstTrack
track#locationはファイル名(多分URLとかもあり)だった。
list#addFileのほかにlist#addUrlもある。っていうかlist#addTrackというのもあるから素直にやるなら直接トラックを追加するほうが良いかも
if r.match(trk.name) list.addTrack(trk) end
オムニバスとかも突っ込んだりしてるので重複しているエントリーがある。それを削除する危険なスクリプト。名前とアーティストと時間だけでチェックしている(というかアルバム名をチェックしたらだめだから)。ただし、このスクリプトはトラックを削除するだけ。
require 'win32ole' h = Hash.new a = [] itunes = WIN32OLE.new("iTunes.Application") itunes.libraryPlaylist.tracks.each do |trk| s = sprintf("%s %s %s", trk.name, trk.artist, trk.time) if h.key?(s) puts s a << trk else h[s] = true end end a.each do |trk| # File::unlink(trk.location) #コメントは外さないほうが良いと思うが。 trk.delete end
っていうのとは別に、動かしてわかったがファイルは削除したのにエントリーが残っているのもある(iTunes上は左端に!で示されている)。そういうのをプレイリストから削除するスクリプト。
require 'win32ole' a = [] itunes = WIN32OLE.new("iTunes.Application") itunes.libraryPlaylist.tracks.each do |trk| begin if trk.location.empty? a << trk end rescue p trk.name end end a.each do |trk| trk.delete end
途中でrescueしているのは、URLをインポートしたトラック。この場合、Track#locationはメソッド自体が存在せず、かわりにTrack#urlがあった。
ジェズイットを見習え |