Bing Web Search APIで画像自動収集プログラムを作る

こんにちは。

これまでTwitterのツイート検索APIGoogle Custom Search APIを利用した画像自動収集プログラムをご紹介しました。

blog.wackwack.net

blog.wackwack.net

最終回となる今回は、Microsoftが提供するBing Web Search APIを利用した画像自動収集プログラムを紹介します。

サブスクリプションキーの取得

MicrosoftのBing Web Search APIは、Microsoft Azureと呼ばれるクラウドプラットフォームによって提供されます。

そしてBing Web Search APIを利用するには、サブスクリプションキーを取得する必要があります。

有効期限

最初に言っておくと、Bing Web Search API無料で使える期間は30日間です。

それ以降は有料プランへの切り替えが必要になります。なお、勝手に課金されることはありませんので、ご安心ください。

無料サブスクリプションキーの取得

それでは早速サブスクリプションキーを取得します。

まずはMicrosoft Azureの登録サイトにアクセスします。


アクセスしたら「Bing Search API v7」APIキーの取得」をクリックしましょう。
APIキーの取得


表示されたダイアログにて規約への同意と、利用する国・リージョンを選択して「次へ」をクリックします。
規約への同意


次に表示されるダイアログにて「Microsoft」「Facebook」「LinkedIn」「GitHub」のいずれかのアカウントでログインします。
ログイン

もしもアカウントを持っていない場合は、Azure無料アカウント登録よりMicrosoftアカウントを作成しましょう。


ログインできれば登録完了です。30日間有効のサブスクリプションキー(APIキー)が2つ発行されます。
サブスクリプションキー

画像自動収集プログラムの実装

私が実装したプログラム例を示します。実装はPython 3.6.1(Anaconda 4.4.0)で行っています。

GitHubにも掲載しています。
imagecrawler/bing_image_crawler.py at master · quotto/imagecrawler · GitHub

# -*- coding:utf-8 -*-
import math
import requests
import imgutil
import time

# image save path
path = "/path/to/save"
imgutil.mkdir(path)

url = "https://api.cognitive.microsoft.com/bing/v7.0/images/search"

# parameters
query = "キーワード"
count = 50      # 1リクエストあたりの最大取得件数 default:30 max:150
mkt = "ja-JP"   # 取得元の国コード

num_per = 10    # リクエスト回数(count * num_per=取得画像数)
offset = math.floor(count / num_per)    # ループ回数

subscriptionKey="xxxxxxxxxxxxxxxxxxx"    # Bing Search API Key

headers = {'Ocp-Apim-Subscription-Key':subscriptionKey}

for offset_num in range(offset):
    params = {'q':query,'count':count,'offset':offset_num*offset,'mkt':mkt}
    r = requests.get(url,headers=headers,params=params)
    data = r.json()
    for values in data['value']:
        image_url = values['contentUrl']
        try:
            imgutil.download_img(path,image_url)
        except Exception as e:
            print("failed to download image at {}".format(image_url))
            print(e)
    time.sleep(1)

imgutilの実装は以下を参照してください。

imagecrawler/imgutil.py at master · quotto/imagecrawler · GitHub

ポイント

簡単にポイントに触れておきます。

サブスクリプションキーの設定

Bing Web Search APIを利用するためにはhttpリクエストヘッダーの「Ocp-Apim-Subscription-Key」に取得したサブスクリプションキーを設定します。

パラメータ

Bing Web Search APIに設定するパラメータは以下のとおりです。

  • q:検索ワード
  • count:1リクエストあたりの取得件数
  • offset:データを取得開始するインデックス
  • mkt:結果の取得元となる国コード

リクエストと結果の取得

サブスクリプションキーとパラメータを設定したら、普通にhttpリクエストを実行するだけです。

結果はJSON形式で取得されます。キー「value」の配列として、各「contentURL」の値が画像のURLとなります。あとはこのURLから画像をダウンロードします。


以上、Microsoftの提供するBing Web Search APIのご紹介でした。

無料枠が30日間と期限付きですが、TwitterGoogleと比べてAPIキーの取得や実装は非常に簡単です。

チャチャッと画像を集めたい場合はぜひ利用を検討してみてください。

Microsoft Azure実践ガイド (impress top gear)

Microsoft Azure実践ガイド (impress top gear)