▼ 2009/04/08(水) Rubyで画像収集でも
Rubyのhpricotを使って画像系のサイトにアクセスして、HTMLの解析をして画像を保存するスクリプトを書いてみた。おかげで画像系のサイトを徘徊するのが便利になったので晒しておきます。サイトを徘徊ってか、ローカルに画像を保存しちゃうから徘徊しなくなって便利になったってことだけど・・・それにどうせ徘徊して手動で保存なんてするよりはスクリプトで一気にやっちゃえみたいな。ちょっとグレーなツールな気もする・・・
#!/usr/bin/env ruby
require 'rubygems'
require 'hpricot'
require 'open-uri'
require 'kconv'
base_path = '/Users/chibi/img/'
urls = [
"",
]
$stdout.sync = true
def get_image(url, path)
puts url
puts path
open(path, 'wb') do |file|
open(url) do |data|
file.write(data.read)
end rescue return false
end
end
urls.each do |url|
image_urls = []
doc = Hpricot(open(url).read)
title = (doc/:title).inner_html.toutf8.strip
#puts title
save_path = File.join(base_path, title)
Dir.mkdir(save_path) unless File.exist?(save_path)
(doc/"a[@href$='.jpg']").each do |link|
#image_title = link.inner_html.toutf8
image_url = link[:href]
image_urls << image_url
#print image_title, "¥t", image_url, "¥n"
end
image_urls.each do |image_url|
save_file = File.join(save_path, File.basename(image_url))
if not File.exist?(save_file) then
get_image(image_url, save_file)
elsif File.zero?(save_file) then
get_image(image_url, save_file)
#else
#puts "skip"
end
end
end
__END__
urlsの中に画像を収集したいサイトのURIを記述すればおk。もちろん複数の指定もおk。これはMacで使ってるんだけど、/Users/chibi/imgというディレクトリに指定したサイトの名前のディレクトリを作って、そこにガツガツそのサイトの画像を保存していく。もちろんこのツールを1日に何回も実行することになると思うので、既に画像が保存済みの場合はスキップするようにしてある。また画像の保存にたまに失敗することもあるので、サイズが0なものとかは次の実行時にもう1度取りに行くようにしてある。なお、HTMLの解析は、.jpgなリンクだけをターゲットにしてる。
基本的には問題無いんだけどlivedoorとかに対しては失敗に終わってるんだよな・・・アクセス制御かけられたみたいな挙動になる。このスクリプト回した後、取得に失敗してるから直接その画像のURIにブラウザからアクセスするとアクセス制御かけられてるような挙動になってる。何か違う問題な気もするけどまだ解決してない。しかしRubyなんてすげー久しぶりに使ったな。たまには書いておかないと忘れるなってことで。僕はPerlとPythonが好きなのでRubyって全然使わないんです。
参考サイト
- TB-URL http://chibilog.name/0357/tb/
▼ 2009/04/08(水) MacBookのキーボードが効かなくなったww
DoubleCommandってゆーキーリマップソフトをインストールしたらキーボードが何も反応しなくなったw てか、悪いのDoubleCommandじゃなくて、他にもキーリマップのソフトをインストールしていたので、こいつと干渉したっぽい。そう僕が悪いんです・・・とりあえず、キーボードが何も効かないのはマズイので、Windowsで困った時はリブートってのが定石だし、Macも似たようなもんだろうって思ってリブートしてあげました。でもキーボードが効かない・・・更に状況は悪化していて、ログインすら出来ない。そうログイン画面でユーザとパスワードを入れないといけないんだけど、打てない・・・
まぁ、スクリーンキーボードで打てばいいやって思ってたら無いし。じゃあSSHで繋ぐかって思ったら、立ち上がって無いみたいだし・・・ここまで来てようやく危機的状況ってことに気づきましたよ。本当にこれやばいんじゃね?ってマジで思った。でも待てよ、Mac様ってUnixだしシングルユーザモードとかあんだろ。セーフモードとか何でもいいけど、要はDoubleCommandさえ有効にならなければ、キーボードはちゃんと効いてくれるわけで。それで調べてみたところ、Shiftキーを押しながら電源を入れればセーフモードで立ち上げられるとのこと。よし先ずはこいつに託すか。
林檎マークのところで5分くらい待たされたけど、無事にセーフモードで立ち上がりました。ログイン画面が出てきて恐る恐るキー入力してみたところちゃんと反応してくれた。勝った・・・勝ったぞー!ふぉぉぉおーーー!!みたいな雄叫びをあげてログインしました。ログイン後は先ずターミナルを立ち上げて以下のようにDoubleCommandを削除。
$ sudo rm -rf /Library/PreferencePanes/DoubleCommandPreferences.prefPane $ sudo rm -rf /Library/StartupItems/DoubleCommand $ sudo rm -rf /Library/Receipts/DoubleCommand-1.6.8.pkg
まぁ、これで大丈夫だろうってことでリブート。今度は通常通りの立ち上げ。見事にキーボードはちゃんと効くようになってくれた。その後は、システム環境設定のパネルからDoubleCommandが削除されていることを確認っと。あとは、今後の為にということで、Applejackをインストール。備えあれば憂いなし。これで無事に復旧してくれました。
とりあえず、DoubleCommandだけど、ちゃんとキーリマップソフトが他に入ってる場合は絶対に入れないでみたいなことが書いてあるらしい。僕は当然ながら何も読まない主義なので知らなかったけど。まぁ、普通に考えてキーリマップソフトを何個も入れるってのは危険だよね。本当、READMEとかマニュアルって読むの大嫌いだからな・・・もっとREADMEとかマニュアルも今風にならないかね。2次元の萌えなロリコンキャラクターが漫画で解説してくれる感じで。これなら確実に読む。
