Linuxゲリラ戦記

大量のエラい人の画像をゲットだぜ!

アイキャッチ

52.Google APIを使用した画像の取得シェルスクリプト完成版

ナックス「はいはい!!というわけで、今回はGoogle APIで画像を取得する!!の完成版を作るよ!!」

デビー君「いぇーい!!」

ナックス「ここで、今まで少しずつ作成したプログラムをざっとおさらいするよ!!」

プログラムを実行する時に検索キーワードが指定されていない場合は警告してスクリプト終了
キーワードをURLエンコード
まずは変数に0を入れて、それを元に繰り返し処理
GoogleAPIから情報を頂いて、テキストファイルに書き込む
まずはステータスをチェックして、もし200じゃ無ければ異常があるって事だから処理中断
GoogleAPIから頂いた情報を書き込んだテキストファイルを解析して画像アドレスだけ抜き出して、画像アドレスのみ書き込むテキストファイルに書き込む(追加書き込み)
繰り返し処理の最後に、もしまだ最後までページをめくっていないならページをめくる(インデックスが最後まで行っていないなら、インデックスに8を追加する)
繰り返し処理終了
繰り返し処理終了後に、画像アドレスのみ書かれたテキストファイルを利用してwgetで画像取得

ナックス「と、まあ基本はこんな感じです」

デビー君「うーむ。確かに今までやってきたことだけど、まとめて見ると難しい感じ……」

ナックス「で!!こいつを元に書いたコードがこちらだ!!」

#!/bin/sh

if [ -z $1 ]
then
        echo "検索キーワードを入れてください"
        echo "下記に例を示します"
        echo "\$ ${0} \"ペンギン 壁紙\""
        exit
fi

keyword=$1
keyword=`echo $keyword | nkf -wMQ | tr = %`

start=0

while [ $start -lt 64 ]
do
        curl -e http://www.my-ajax-site.com \
                http://ajax.googleapis.com/ajax/services/search/images?q\=${keyword}\&v\=1.0\&hl\=ja\&rsz\=large\&start\=${start}\&safe\=off\&imgsz\=xxlarge \
        | tr , \\n > result.txt

        status=`cat result.txt | grep "responseStatus" | sed -e 's/ "responseStatus": //g' -e 's/}//g'`

	if [ $status != "200" ]
        then
                exit
        fi

        cat result.txt | grep "url" | sed -e 's/"url"://g' -e 's/"//g' >> list_url.txt

        start=`expr $start + 8`
done


wget -T 30 -t 1 -i list_url.txt
rm list_url.txt
			

ナックス「こんな感じにしてみました。一番最後に」

rm list_url.txt

ナックス「を追加しました。もし画像のアドレス情報が書かれたlist_url.txtを削除しなければ、再度別の検索キーワードを使ってこのシェルスクリプトを使う際に、既にあるlist_url.txtの下に追加書き込みをしてしまい、以前に使用した検索キーワードの画像も再び取得してしまうからです」

デビー君「おー。色がついてると対応付けが分かりやすい」

ナックス「このコードを好きな名前のファイル名で保存して(getImage.shとか)、例えば以下のようにすると、画像が取得できます」

$ ./getImage.sh ネコ

ナックス「2つ以上の検索キーワードを使用したいときは""でキーワードを囲みましょう」

$ ./getImage.sh "ネコ 壁紙"

ナックス「実行しようとして"実効権限が無いよ"みたいなエラーが出るときは、おなじみchmodコマンドで、例えば以下のようにして実効権限をつけよう」

$ chmod u+x getImage.sh

ナックス「というわけで、今回で画像取得スクリプトの作成は終了です。あとは皆さんのお好きな検索キーワードで壁紙ゲットするなりエロ画像ゲットするなりグロ画像ゲットするなりしてください。改造もご自由にどうぞ」

デビー君「いやー、今回の画像取得スクリプト作成、っていうテーマは長かった!!」

ナックス「うむ。長かった!」

ナックス「しかし!これからはシェルスクリプトを一つ実行するだけで、キーワードによっては大量のエろ……」

デビー君「うぇっほん!!」

ナックス「……大量のエラい人間の画像を見ることが出来ます。この機会に歴史のエラい人の顔とか覚えましょう」

ナックス「さて、今回のスクリプト。使用すると大量の画像を取得出来てしまうので、こいつで遊んでるとファイルの数が膨大になってしまいます」

ナックス「というわけで次回はファイル圧縮コマンド!(53.tarコマンドで大量のファイルを一つにまとめよう)」

このエントリーをはてなブックマークに追加