トップ «前の日記(2004-11-16) 最新 次の日記(2004-11-18)» 編集

日々の破片

著作一覧

2004-11-17

_ かっこいい

Win32OLE に触ってみる

やっぱ、プログラミング漢(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があった。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|

ジェズイットを見習え