クイック スタート:Bing Image Search REST API と Python を使用してイメージを検索するQuickstart: Search for images using the Bing Image Search REST API and Python

警告

Bing Search API は、Cognitive Services から Bing Search Services に移行されます。Bing Search APIs are moving from Cognitive Services to Bing Search Services. 2020 年 10 月 30 日 以降、Bing Search の新しいインスタンスは、こちらに記載されているプロセスに従ってプロビジョニングする必要があります。Starting October 30, 2020, any new instances of Bing Search need to be provisioned following the process documented here. Cognitive Services を使用してプロビジョニングされた Bing Search API は、次の 3 年間、または Enterprise Agreement の終わり (どちらか先に発生した方) までサポートされます。Bing Search APIs provisioned using Cognitive Services will be supported for the next three years or until the end of your Enterprise Agreement, whichever happens first. 移行手順については、Bing Search Services に関するページを参照してください。For migration instructions, see Bing Search Services.

このクイックスタートを使用して、Bing Image Search API に検索要求を送信する方法について説明します。Use this quickstart to learn how to send search requests to the Bing Image Search API. この Python アプリケーションは、検索クエリを API に送信し、その結果から最初の画像の URL を表示します。This Python application sends a search query to the API, and displays the URL of the first image in the results. このアプリケーションは Python で記述されていますが、API はほとんどのプログラミング言語と互換性のある RESTful Web サービスです。Although this application is written in Python, the API is a RESTful web service compatible with most programming languages.

この例を MyBinder で Jupyter Notebook として実行するには、起動バインダー バッジを選択します。To run this example as a Jupyter notebook on MyBinder, select the launch binder badge:

BinderBinder

このサンプルのソース コードは、追加のエラー処理と注釈を含め、GitHub で入手できます。The source code for this sample is available on GitHub with additional error handling and annotations.

前提条件Prerequisites

Azure リソースを作成するCreate an Azure resource

次のいずれかの Azure リソースを作成して、Bing Image Search API の使用を開始します。Start using the Bing Image Search API by creating one of the following Azure resources.

Bing Search v7 リソースBing Search v7 resource

  • ご自身でリソースを削除するまでは Azure portal からご利用いただけます。Available through the Azure portal until you delete the resource.
  • Free 価格レベルを使ってサービスを試用し、後から運用環境用の有料レベルにアップグレードします。Use the free pricing tier to try the service, and upgrade later to a paid tier for production.

マルチサービス リソースMulti-service resource

  • ご自身でリソースを削除するまでは Azure portal からご利用いただけます。Available through the Azure portal until you delete the resource.
  • 複数の Cognitive Services 全体で同じキーとエンドポイントをアプリケーションに使用します。Use the same key and endpoint for your applications, across multiple Cognitive Services.

アプリケーションを作成して初期化するCreate and initialize the application

  1. 任意の IDE またはエディターで新しい Python ファイルを作成し、次のモジュールをインポートします。Create a new Python file in your favorite IDE or editor, and import the following modules. サブスクリプション キー、検索のエンドポイント、検索語句の変数を作成します。Create a variable for your subscription key, search endpoint, and search term. search_url には、次のコードのグローバル エンドポイントを使用するか、Azure portal に表示される、対象のリソースのカスタム サブドメイン エンドポイントを使用することができます。For search_url, you can use the global endpoint in the following code, or use the custom subdomain endpoint displayed in the Azure portal for your resource.

    import requests
    import matplotlib.pyplot as plt
    from PIL import Image
    from io import BytesIO
    
    subscription_key = "your-subscription-key"
    search_url = "https://api.cognitive.microsoft.com/bing/v7.0/images/search"
    search_term = "puppies"
    
  2. ディクショナリを作成し、サブスクリプション キーを値として追加して、Ocp-Apim-Subscription-Key ヘッダーにサブスクリプション キーを追加します。Add your subscription key to the Ocp-Apim-Subscription-Key header by creating a dictionary, and adding the key as a value.

    headers = {"Ocp-Apim-Subscription-Key" : subscription_key}
    

検索要求を作成して送信するCreate and send a search request

  1. 検索要求のパラメーターに使用するディクショナリを作成します。Create a dictionary for the search request's parameters. q パラメーターに検索語句を追加します。Add your search term to the q parameter. パブリック ドメインから画像を検索するには、license パラメーターを public に設定します。Set the license parameter to public to search for images in the public domain. 写真のみを検索する場合は、imageTypephoto に設定します。Set the imageType to photo to search only for photos.

    params  = {"q": search_term, "license": "public", "imageType": "photo"}
    
  2. requests ライブラリを使用して、Bing Image Search API を呼び出します。Use the requests library to call the Bing Image Search API. ヘッダーとパラメーターを要求に追加し、その応答を JSON オブジェクトとして返します。Add your header and parameters to the request, and return the response as a JSON object. 応答の thumbnailUrl フィールドから、いくつかのサムネイル画像の URL を取得します。Get the URLs to several thumbnail images from the response's thumbnailUrl field.

    response = requests.get(search_url, headers=headers, params=params)
    response.raise_for_status()
    search_results = response.json()
    thumbnail_urls = [img["thumbnailUrl"] for img in search_results["value"][:16]]
    

応答の表示View the response

  1. matplotlib ライブラリを使用して、4 つの列と 4 つの行から成る新しい図を作成します。Create a new figure with four columns and four rows by using the matplotlib library.

  2. 図の行と列を繰り返し処理し、PIL ライブラリの Image.open() メソッドを使用して、それぞれの領域に画像のサムネイルを追加します。Iterate through the figure's rows and columns, and use the PIL library's Image.open() method to add an image thumbnail to each space.

  3. plt.show() を使用して図を描画し、画像を表示します。Use plt.show() to draw the figure and display the images.

    f, axes = plt.subplots(4, 4)
    for i in range(4):
        for j in range(4):
            image_data = requests.get(thumbnail_urls[i+4*j])
            image_data.raise_for_status()
            image = Image.open(BytesIO(image_data.content))        
            axes[i][j].imshow(image)
            axes[i][j].axis("off")
    plt.show()
    

JSON の応答例Example JSON response

Bing Image Search API からの応答は、JSON として返されます。Responses from the Bing Image Search API are returned as JSON. このサンプル応答は、1 つの結果だけを表示するように切り詰められています。This sample response has been truncated to show a single result.

{
"_type":"Images",
"instrumentation":{
    "_type":"ResponseInstrumentation"
},
"readLink":"images\/search?q=tropical ocean",
"webSearchUrl":"https:\/\/www.bing.com\/images\/search?q=tropical ocean&FORM=OIIARP",
"totalEstimatedMatches":842,
"nextOffset":47,
"value":[
    {
        "webSearchUrl":"https:\/\/www.bing.com\/images\/search?view=detailv2&FORM=OIIRPO&q=tropical+ocean&id=8607ACDACB243BDEA7E1EF78127DA931E680E3A5&simid=608027248313960152",
        "name":"My Life in the Ocean | The greatest WordPress.com site in ...",
        "thumbnailUrl":"https:\/\/tse3.mm.bing.net\/th?id=OIP.fmwSKKmKpmZtJiBDps1kLAHaEo&pid=Api",
        "datePublished":"2017-11-03T08:51:00.0000000Z",
        "contentUrl":"https:\/\/mylifeintheocean.files.wordpress.com\/2012\/11\/tropical-ocean-wallpaper-1920x12003.jpg",
        "hostPageUrl":"https:\/\/mylifeintheocean.wordpress.com\/",
        "contentSize":"897388 B",
        "encodingFormat":"jpeg",
        "hostPageDisplayUrl":"https:\/\/mylifeintheocean.wordpress.com",
        "width":1920,
        "height":1200,
        "thumbnail":{
        "width":474,
        "height":296
        },
        "imageInsightsToken":"ccid_fmwSKKmK*mid_8607ACDACB243BDEA7E1EF78127DA931E680E3A5*simid_608027248313960152*thid_OIP.fmwSKKmKpmZtJiBDps1kLAHaEo",
        "insightsMetadata":{
        "recipeSourcesCount":0,
        "bestRepresentativeQuery":{
            "text":"Tropical Beaches Desktop Wallpaper",
            "displayText":"Tropical Beaches Desktop Wallpaper",
            "webSearchUrl":"https:\/\/www.bing.com\/images\/search?q=Tropical+Beaches+Desktop+Wallpaper&id=8607ACDACB243BDEA7E1EF78127DA931E680E3A5&FORM=IDBQDM"
        },
        "pagesIncludingCount":115,
        "availableSizesCount":44
        },
        "imageId":"8607ACDACB243BDEA7E1EF78127DA931E680E3A5",
        "accentColor":"0050B2"
    }]
}

次のステップNext steps