あけましておめでとうございます。 ここ最近さぼってますが今年もよろしくお願い致します。 よし挨拶おわり。
そんなことより僕はプログラマらしく猫画像をDLしたいのです。 大概のプログラマは猫ちゃんが大好きなのです。 にゃんにゃん画像をDLしたいのです。 本当は別のにゃんにゃん画像をDLしたいのですが この場では猫画像をDLしたいことにしておきます。
というわけでよくある猫画像まとめ記事の画像をまとめてDLしたいことにします。
とりあえずそういうことなら RubyでMechanizeでも使えば作れそうな気がするけど 最近コードを書く気力に欠けているのでそれは無しってことにします。 gem入れるのだるいし。
そこでwgetなわけですよ。 やつにはページ内のコンテンツを丸ごとDLする機能があるからな。
ってことで試行錯誤した結果こんなオプションを使用することに
オプション | 追加引数 | 説明 |
---|---|---|
-p | ページコンテツを丸ごとDL | |
-H | ホストをまたいでDLする | |
-D | blog.livedoor.jp,livedoor.blogimg.jp | DL許可するドメインのリスト |
-nd | ディレクトリ作らない | |
-nH | ホストのディレクトリ作らない | |
-np | 上の階層は追い掛けない | |
-R | html | 除外する拡張子 |
-A | jpg,JPG,jpeg,JPEG | DL許可する拡張子 |
-q | お静かに | |
-N | ローカルにあるのより新しいのをDL |
というわけで実際にDLする際のコマンドはこんな感じに。
wget -p -q -N -D blog.livedoor.jp,livedoor.blogimg.jp -nd -nH -np -H -R html -A jpg,JPG,jpeg,JPEG URL
うわー長ったらしい。 そうだwgetはconfigファイルが使えた! そいつを使ってやろう!
ってことで試行錯誤した結果がこんな感じ。
page-requisites = on spanhosts = on domains = blog.livedoor.jp,livedoor.blogimg.jp cutdirs = 999 addhostdir = off noparent = on reject = html accept = jpg,JPG,jpeg,JPEG quiet = on timestamping = on
上の表のオプションと順番を一致させた感じで書いている。 domainsは多分鍛え上げる必要がある。
ちなみにwgetrc周りはあまり情報がなくって man wgetのoptionsの項目と wgetのソース内の src/init.cの124行目ぐらいあたりで定義されているcommands[]を見比べて調べる感じになってた。
で、これを ~/images.wgetrcにでも置いて
wget --config=$HOME/images.wgetrc URL
みたいに実行すると。わあい! みんな大好きにゃんにゃん画像がまとめてDLできたよお! でもどうでもいいゴミ画像もたくさんあるよう。
しょうがないから適当に10kb以下のファイルは削除しておこう。 10kbなのは割と適当。 本当はDLすらしないのが一番だがwgetにそこまでの機能はなさそうだ。
ってことでfindで10kb以下のjpg,jpeg,JPG,JPEGを探してrmすることに。
wget --config=$HOME/images.wgetrc URL ; find . -maxdepth 1 -size -10k -regex ".*[jpg|jpeg|JPG|JPEG]"|xargs rm
また長くなった。仕方ない。不慣れなshell scriptだ。
#!/bin/sh url=$1 dir="$HOME/nyan-nyan" mkdir -p $dir cd $dir wget --config=$HOME/images.wgetrc $url jpegs=`find $dir -maxdepth 1 -size -10k -regex ".*[jpg|jpeg|JPG|JPEG]"` if [ "$jpegs" != "" ]; then rm $jpegs fi
まあこれを適当に~/bin/imgdl.shにでも置いたら確かに
imgdl.sh URL
な感じでDLできるんだけど いちいちTerminalに切り替えるのはだるい。
そうだ。どうせWebブラウジングはEmacsでやるから、 Emacsからバックグラウンドでこれを呼び出せば!
(defun w3m-download-images () "現在閲覧中のページの画像をDLする。" (interactive) (apply 'start-process `("imgdl.sh" nil "imgdl.sh" ,w3m-current-url ">" "/dev/null")) (message "downloading images...")) (define-key w3m-mode-map "\C-c\ i" 'w3m-download-images)
これでemacs-w3mで閲覧中にC-c iしたら バックグラウンドで~/nyan-nyanににゃんにゃん画像を落としておけるぞ! やったね!
というわけでwgetで遊びたいだけだったのに結局少々コードを書いてしまいましたとさ。 ま、いいや。