ブログで使う画像を収集する方法

google
この前、アニメ関連の記事を書いた時、画像を探すのがあまりに面倒だったので...。

photo-credit: IconAarchive


Google Image Search API


Googleが提供するAPIを使います。


JSONのデータを扱うため、 jq をインストールしておきます。

sudo port install jq



function img-search () {
# URL Encode
word=`echo $1 | ruby -r cgi -ne 'puts CGI.escape $_.chomp'`
# Google Image  Search API
url=`curl "http://ajax.googleapis.com/ajax/services/search/images?q=$word&v=1.0&safe=active&imgsz=xxlarge" | jq '.responseData.results [0] .url'`

# HTML
echo $url | sed -e 's/^/<img src=/g' | sed -e 's/$/ width="640" height="380">/g' | pbcopy && pbpaste
# URL
echo $url
}



最初の画像だけURLを取得し、タグを付けるようにしました。以下の様なコマンドで検索をかけられます。


$ img-search 中二病




なお、タグは、クリップボードに保存されます。Macです。


解説



URL エンコード



日本語文字はそのままでは、URLとして使えません。よって、変換します。変換するためのワンライナーが以下のものになります。

echo あ | ruby -r cgi -ne 'puts CGI.escape $_.chomp'


http://hydrocul.github.io/wiki/others/oneliner.html


検索設定



内容 URL
アダルトの排除(強) &safe=active
サイズ(中) &imgsz=xxlarge
数(8) &rsz=large


http://www.garunimo.com/program/linux/linux43.xhtml


JSONデータの要素取得



以下の部分ですが、 [0][] にすると、よりたくさんの画像を取得できます。これは、括弧内の全範囲を意味します。

jq '.responseData.results [0] .url'

jq '.responseData.results [] .url'



それぞれの大小関係を把握し、抜き出したい情報のある部分を引数で指定します。


http://dev.classmethod.jp/tool/jq-manual-japanese-translation-roughly/


ここでは、各要素の一番下にある urlだけを抜き出したいため、 .大.中 [] .小という感じになります。


全範囲は、 jq .です。大きい要素から狭めて実行していくと、分かりやすいです。


具体的には、jq .responseDatejq .responseDate.results みたいな順ですね。


その際は、 echoを使ってイメージしてみましょう。


echo '{"foo": 42, "bar": "less interesting data"}' | jq '.foo'