PythonとBing Search APIで画像検索、あと画像ファイルのダウンロード

投稿日:2016年4月18日 更新日:

こんにちは、okuzawatsです。
Python、楽しいですね。
最近は、Pythonでいろいろやって遊んでいます。

今回は、Pythonで画像検索をしたかったのでBing Search APIを使ってみました。
GoogleよりもBingの検索用APIの方が使いやすいみたいですね。
BingのAPIは無料で月5,000回までリクエストできます。
Googleについては良くわかりません。

無料で使える画像検索APIとリクエスト数制限まとめ - Qiita

Bing Search API | Microsoft Azure Marketplace

Bing Search APIのドキュメントは探しにくかったので、色々なブログの記事を参考にさせていただきました。

Bing Search APIを使ってWeb検索を行うには(Json編) | garicchi.com

PythonでBing Search APIを使って画像を検索する | BTY備忘録

Using Bing Search API in Python | A Blog for Life

今回書いたPythonのソースコードはGitHubに公開しました。
Pythonは2系です。

okuzawats/bing-image-search-api: BingのSearch APIを叩いて画像検索結果を取得するスクリプトです。

Bing Search APIのアカウントキーの入手

bing search api

Bing Search APIを使うために、Microsoftから発行されるキーが必要になるので作ります。
Azure Marketplaceにアクセスして、アカウントが無い場合はアカウントの作成、アカウントが有ればログインします。

Azure Marketplace | Microsoft Azure

bing search api

ログイン後、アカウント情報の画面を開きます。
Bing Search APIを叩く時、ここに表示されている「プライマリアカウントキー」が必要になるので、どこかにメモしておきましょう。

bing search api

5,000トランザクション/月の月額0円のやつにサインアップします。
5,000トランザクションを超えても勝手に課金されずに動かなくなるだけ…だと思いますが未確認です。

これで取得したプライマリアカウントキーが有効になりました。
このキーを使ってBing Search APIを叩いていきます。

PythonでBing Search APIを叩く

Pythonを使ってBing Search APIを叩いていきます。
スクリプト全体はGitHubに公開したので、とりあえずポイントだけ書いておきますね。

リクエスト用のURLを作って、Authオブジェクトと共にrequests.get()に渡してあげれば検索結果が返ってきます。

いろいろ検索オプションがあるんですが、Marketでは言語、Adultではエロコンテンツのフィルタリングを設定できます。
topは結果の件数を指定できます。
最大50件までです。
下位の結果を得るためには、skipを使うのだと思います(ドキュメントを探して読んでください)。

requests.auth.HTTPBasicAuth()に先ほど作成したプライマリアカウントキーを渡してあげると認証されます。
あらかじめ、BING_API_KEY="hogehoge"みたいな感じで変数を作っておきましょう。
検索結果はJson形式にデコードします。
jsonモジュールをインポートしておけば一発ですね。

ちなみに、PythonでJsonを使う方法はここに書きました。

PythonでJSON形式のデータを読み込む

Pythonの標準ライブラリ"JSON" PythonでJSON形式のデータを読み込んでみるテスト。Pythonでは、標準ライブラリ"json"を使ってJSON(JavaScript Object N ...

続きを見る

次に、検索結果から画像URLを抽出します。
リストの['d']['results']の中に各々のデータがあるので、MediaUrlという要素を一件一件探していきます。

最後に、抽出した画像URLを使って画像ファイルをダウンロードします。
requests.get()で画像をとってきて、名前をつけて保存する作業をファイルの数だけ繰り返し。

os.path.splitext()のところは、拡張子を切り分けてます。
これだけだと.jpg?w=600みたいになっているファイルに対応できないので、もう少し工夫したいですね。

これで、Pythonを使ってBing Search APIを叩けるようになったと思います。

PythonでBing Search APIを叩くスクリプト

完成したPythonのスクリプトはGitHubに公開しておきました。
cloneしたりpull requestしたりstarをつけたりしていただけるととても嬉しいです。
よろしくお願いします。

okuzawats/bing-image-search-api: BingのSearch APIを叩いて画像検索結果を取得するスクリプトです。

以下のようなコマンドで実行します。
引数にクエリを与えてあげます。
複数のクエリ、日本語にも対応しています。

python bing_image_search.py oppai

実行すると、こんな感じで画像ファイルをダウンロードします。

Downloading http://a-hadaka.jp/wp/wp-content/uploads/2011/12/1888.jpg (1/50)
Downloading http://sukkolo.cocolog-nifty.com/photos/uncategorized/2009/03/27/oppai.jpg (2/50)
(中略)
Downloading http://blog-imgs-40.fc2.com/z/a/h/zahnarzt/image42.gif (50/50)
Done.

時々SSLエラーを吐いて止まることがありますが許して下さい。

あわせて読みたい本

-Python

Copyright© Androidアプリ開発@つくばの日記 , 2017 AllRights Reserved Powered by AFFINGER4.