2013年01月20日

にゃんにゃん画像をまとめてwgetしたいにゃん

あけましておめでとうございます。 ここ最近さぼってますが今年もよろしくお願い致します。 よし挨拶おわり。

そんなことより僕はプログラマらしく猫画像をDLしたいのです。 大概のプログラマは猫ちゃんが大好きなのです。 にゃんにゃん画像をDLしたいのです。 本当は別のにゃんにゃん画像をDLしたいのですが この場では猫画像をDLしたいことにしておきます。

というわけでよくある猫画像まとめ記事の画像をまとめてDLしたいことにします。

とりあえずそういうことなら RubyでMechanizeでも使えば作れそうな気がするけど 最近コードを書く気力に欠けているのでそれは無しってことにします。 gem入れるのだるいし。

そこでwgetなわけですよ。 やつにはページ内のコンテンツを丸ごとDLする機能があるからな。

ってことで試行錯誤した結果こんなオプションを使用することに

オプション追加引数説明
-pページコンテツを丸ごとDL
-HホストをまたいでDLする
-Dblog.livedoor.jp,livedoor.blogimg.jpDL許可するドメインのリスト
-ndディレクトリ作らない
-nHホストのディレクトリ作らない
-np上の階層は追い掛けない
-Rhtml除外する拡張子
-Ajpg,JPG,jpeg,JPEGDL許可する拡張子
-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で遊びたいだけだったのに結局少々コードを書いてしまいましたとさ。 ま、いいや。

posted by 麦汁 at 11:36 | Comment(2) | TrackBack(0) | emacs | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
サーバーさんかわいそうですぅ>_<
Posted by momonga at 2013年01月21日 03:33
指定したURLのHTMLとそこからimgタグで呼び出されているJPEG画像しか取得してないから普通のWebブラウザでそのページを見るより取得するコンテンツ少ないと思うんですぅ><
Posted by 麦汁 at 2013年01月21日 21:56
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/314406053
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック