freebsdで、youtubeのファイルをダウンロードするports youtube_dlが便利

FreeBSDのportsの

/usr/ports/www/youtube_dl

を使うと、youtubeのflvファイルをダウンロードできる。
ffmpegと組み合わせて、プレイリストのファイルをダウンロードしたり。

#!/usr/local/bin/ruby
$KCODE=”u”
require ‘rubygems’
require ‘hpricot’
require ‘open-uri’
plist = ARGV[0].scan(/p=(\w*)/).first.first
s = open “http://www.youtube.com/view_play_list?p=#{plist}”
doc = Hpricot s.read
YOUTUBE_ADDR = “http://www.youtube.com”
i = ARGV[1].to_i || 1
doc.search(“a.video-thumb-120″).each do |l|
addr = l.to_html.scan(/href=”([^"&]*).*”/)
title = l.to_html.scan(/img title=”([^"]*).*”/).first.first.gsub(” “,””).gsub(“/”,”-”)
downaddr = YOUTUBE_ADDR + addr.first.first
filename = “#{Time.now.strftime(“%Y%m%d”) + ‘_’ + sprintf(“%04d”,i) + ‘_’ + title}”
`/usr/local/bin/youtube-dl -o #{filename}.flv #{downaddr}`
`/usr/local/bin/ffmpeg -i #{filename}.flv -acodec copy #{filename}.mp3`
i += 1
end

WWW::Mechanizeで日本語を含むURLを操作するときの注意点

だめな書き方

page = agent.get(“http://hoge.net/?c=ああああ”)
page = agent.get(“http://hoge.net/?c=#{CGI.escape(‘ああああ’)}”)

正しくは
uri URI.parse(“http://hoge.net/?c=#{CGI.escape(‘ああああ’)}”)
page = agent.get(uri)

理由は、urlに文字列を渡すとWWW::Mechanize内部で変換をしている箇所があり、そこで変な変換結果になってしまうことがあるため。

Hikiの(むりやり)UTF-8化

hikiのutf-8化
hikiは、rubyで書かれたwikiで、DBを必要としないため簡単に利用できるのがうれしい点。
ただし、現在のバージョン(0.8.7)ではUTF-8に対応していないため、UTF-8を使用すると自分で何とかする必要がある。
以下は、何とかしたときの作業ログです。
あまり推奨できるやり方では無いと思いますが、メモとして残しておきます。
前提
まっさらなところに新たにhikiをインストールするものとします。
すでにhikiを運用している場合にそのデータをUTF-8に対応させるのは本稿の対象外とします。
まずはダウンロード。
wget http://globalbase.dl.sourceforge.jp/hiki/25954/hiki-0.8.7.tar.gz
tar xvzf hiki-0.8.7.tar.gz
できたフォルダで、以下を実行して強制的にUTF-8に変換を実施
find . -name ‘*.rb’ | xargs nkf –overwrite -w;
find . -name ‘*.css’ | xargs nkf –overwrite -w;
find . -name ‘*.conf’ | xargs nkf –overwrite -w;
find . -name ‘*.cgi’ | xargs nkf –overwrite -w;
find . -name ‘*.html’ | xargs nkf –overwrite -w;
find . -name ‘*.rhtml’ | xargs nkf –overwrite -w;
つぎに、ダウンロードしたものにたいしgrepでEUC-JPと表示されている部分を
片っ端からUTF-8に置き換える。
ページタイトルをEUCで保存している処理が/hiki/command.rbにあるので、そこを修正
(おそらくこれでUTF8以外で利用できなくなっちゃってる?)
diff -r [...]

cap deploy:setup で Net::SSH::HostKeyMismatch

ログは以下
[412]% cap deploy:setup                                                                                                                                                                                       [/home/hoge/work/sbmm/trunk]
  * executing `deploy:setup’
  * executing “sudo -p ’sudo password: ‘ mkdir -p /home/www/hoge.com /home/www/hoge.com/releases /home/www/hoge.com/shared /home/www/hoge.com/shared/system /home/www/hoge.com/shared/log /home/www/hoge.com/shared/pids && sudo -p ’sudo password: ‘ chmod g+w /home/www/hoge.com /home/www/hoge.com/releases /home/www/hoge.com/shared /home/www/hoge.com/shared/system /home/www/hoge.com/shared/log /home/www/hoge.com/shared/pids”
    servers: ["hoge.com"]
D, [2008-10-10T22:33:54.682368 #25783] DEBUG — net.ssh.transport.session[1465226e]: establishing connection to hoge.com:22
D, [2008-10-10T22:33:54.997627 #25783] DEBUG — net.ssh.transport.session[1465226e]: connection established
I, [2008-10-10T22:33:54.997731 [...]