flvpop

一部のブログ記事の影響で動画サイトの利用頻度が増えつつあるため,作業しながら視聴しやすいようにプレイヤだけポップアップさせるのを書いた。

class FlvPop
  @usg = 'usage: flvpop url [width [height]]'
  @dic = {
    'youtube.com/(?:watch\?v=|v/)([-\w]+)' =>
    'src="http://www.youtube.com/v/\1"',
    
    'youku.com/v_show/id_([^.]+)' =>
    'src="http://player.youku.com/player.php/sid/\1/v.swf"',
    
    'mofile.com/([^/]+)' =>
    'src="http://tv.mofile.com/cn/xplayer.swf" FlashVars="v=\1&autoplay=0"',
  }
  
  def self.pop url = getclip, w = 480, h = 400
    unless url
      echo @usg
      return false
    end
    url = url.sub(%r[^\w*://], '')
    if prm = match(url)
      system %[mshta "about:#{<<-HTA.tr!("\"\n","' ")}"]
      <head><title>flvpop - #{url}</title>
      <style>body { margin: 0px; padding: 0px }</style></head>
      <body scroll="no"><embed type="application/x-shockwave-flash"
      #{prm} quality="high" width=#{w} height=#{h} /></body>
      <script>resizeTo(#{w + 12},#{h + 30})</script>
      HTA
      true
    else
      echo "error: no match for #{url}", @usg
      false
    end
  end
  
  def self.match url
    s = url.clone
    @dic.each_pair{|r, t| return s if s.sub!(/^.*#{r}.*$/,t) }
    nil
  end
    
  def self.echo *msgs
    msgs = msgs.map{|m|"echo #{m.gsub(/[&()\[\]{}^=;!'+,`~]/,'^\&')} &&"}*' '
    system "cmd /c #{msgs} pause"
  end
  
  def self.getclip
    `mshta "javascript:#{<<-JS.gsub!(/\n/,'')}"`
    new ActiveXObject('Scripting.FileSystemObject')
    .getStandardStream(1)
    .write(clipboardData.getData('text'));
    close()
    JS
  end
end

FlvPop.pop *$* if $0 == __FILE__

WIN32OLEでIEを操ってとか考えてスクリプトにしたが結局mshtaに頼り切り。
そもそもHTAで作るべきだったか…。