Google画像検索の1件目をダウンロードするスクリプト

どこかで記載済みかも知れないけども、少し改変したので、改めてメモしておきます。

スクリプト

#!/bin/sh
UA=Mozilla/5
URL=http://www.google.com/images?q=$(echo $* | nkf -WwMQ | tr = %)

curl -s -A $UA $URL | sed 's/>/>\n/g' | sed 's/?/\n/g' | sed 's/&/\n/g' | sed 's/%/\n/g' | grep imgurl | sed -n 1p | cut -d'=' -f2 | wget -i - -U $UA

使い方

「gimg.sh」という名前でスクリプトを保存したとすると、以下の様に使います。

例) 「Linux」で1件目にヒットする画像をダウンロード

$ chmod u+x gimg.sh
$ ./gimg.sh Linux
--2013-03-20 17:53:08--  http://scienceblogs.com/gregladen/files/2013/02/Linux.jpg
scienceblogs.com をDNSに問いあわせています... 198.101.128.171
scienceblogs.com|198.101.128.171|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 15150 (15K) [image/jpeg]
`Linux.jpg' に保存中

100%[================================================================================================================================================================>] 15,150      40.6K/s   時間 0.4s  

2013-03-20 17:53:09 (40.6 KB/s) - `Linux.jpg' へ保存完了 [15150/15150]

終了しました --2013-03-20 17:53:09--
ダウンロード完了: 1 ファイル、15K バイトを 0.4s で取得 (40.6 KB/s)


保存する際の画像ファイルの名前は、ウェブ上の元々の画像ファイル名のままです。
上記のスクリプトでは、wgetには標準出力を抑制するオプション(-qあるいは--quiet)をつけていないので、
wgetの出力から、ダウンロードされた画像ファイル名を確認してください。
(上記の例の場合は、「Linux.jpg」という名前で保存されています。)


また、日本語キーワードや、複数キーワードにも対応しています。

例)

$ ./gimg.sh 上田
$ ./gimg.sh linus linux

補足

実際にブラウザ上で画像検索を行った場合と1件目の画像が異なる場合があります。

おそらく、curlコマンドで指定しているユーザーエージェントや、その他のヘッダ情報などが関係していると思います。
あくまでもお遊びのものなので、ここではこの程度で済ませておきます。