クイック スタート:Node.js を使用して Bing Entity Search REST API に検索要求を送信する

警告

2020 年 10 月 30 日に、Bing Search API は Azure AI サービスから Bing Search サービスに移行されました。 このドキュメントは、参考用としてのみ提供されています。 更新されたドキュメントについては、Bing search API のドキュメントを参照してください。 Bing 検索用の新しい Azure リソースを作成する手順については、「Azure Marketplace から Bing Search リソースを作成する」を参照してください。

このクイック スタートを使用すると、Bing Entity Search API への最初の呼び出しを行い、JSON 応答を表示することができます。 この簡単な JavaScript アプリケーションでは、新しい検索クエリを API に送信して、その応答を表示します。 このサンプルのソース コードは、GitHub で入手できます。

このアプリケーションは JavaScript で記述されていますが、この API はほとんどのプログラミング言語と互換性のある RESTful Web サービスです。

前提条件

Azure リソースを作成する

次のいずれかの Azure リソースを作成して、Bing Entity Search API の使用を開始します。

Bing Entity Search のリソース

  • ご自身でリソースを削除するまでは Azure portal からご利用いただけます。
  • Free 価格レベルを使ってサービスを試用し、後から運用環境用の有料レベルにアップグレードします。
  • Bing Entity Search は、Bing Search v7 リソースの有料レベルでも提供されています。

マルチサービス リソース

  • ご自身でリソースを削除するまでは Azure portal からご利用いただけます。
  • 複数の Azure AI サービス全体で同じキーとエンドポイントをアプリケーションに使用します。

アプリケーションを作成して初期化する

  1. 好みの IDE またはエディターで新しい JavaScript ファイルを作成し、厳格度と HTTPS の要件を設定します。

    'use strict';
    let https = require ('https');
    
  2. API エンドポイント、サブスクリプション キー、および検索クエリのための変数を作成します。 次のコードのグローバル エンドポイントを使用するか、Azure portal に表示される、対象のリソースのカスタム サブドメイン エンドポイントを使用することができます。

    let subscriptionKey = 'ENTER YOUR KEY HERE';
    let host = 'api.bing.microsoft.com';
    let path = '/v7.0/search';
    
    let mkt = 'en-US';
    let q = 'italian restaurant near me';
    
  3. query という文字列の後に、市場とクエリ パラメーターを追加します。 忘れずに、encodeURI() でクエリを URL エンコードします。

    let query = '?mkt=' + mkt + '&q=' + encodeURI(q);
    

応答の処理と解析

  1. HTTP 呼び出し response をパラメーターとして受け取る response_handler() という名前の関数を定義します。

  2. この関数内で、JSON 応答の本文を含む変数を定義します。

    let response_handler = function (response) {
        let body = '';
    };
    
  3. data フラグが呼び出されたら、応答の本文を格納します。

    response.on('data', function (d) {
        body += d;
    });
    
  4. end フラグが通知されたら、JSON を解析して、それを表示します。

    response.on ('end', function () {
    let json = JSON.stringify(JSON.parse(body), null, '  ');
    console.log (json);
    });
    

要求を送信する

  1. 検索要求を送信するための Search() という関数を作成します。 その中で、次の手順を実行します。

  2. この関数内で、要求パラメーターを含む JSON オブジェクトを作成します。 メソッドに Get を使用し、ホストとパスの情報を追加します。 お使いのサブスクリプション キーを Ocp-Apim-Subscription-Key ヘッダーに追加します。

  3. https.request() を使用して、前に作成した応答ハンドラーと検索パラメーターを含む要求を送信します。

    let Search = function () {
     let request_params = {
         method : 'GET',
         hostname : host,
         path : path + query,
         headers : {
             'Ocp-Apim-Subscription-Key' : subscriptionKey,
         }
     };
    
     let req = https.request (request_params, response_handler);
     req.end ();
    }
    
  4. Search() 関数を呼び出します。

JSON の応答例

成功した応答は、次の例に示すように JSON で返されます。

{
  "_type": "SearchResponse",
  "queryContext": {
    "originalQuery": "italian restaurant near me",
    "askUserForLocation": true
  },
  "places": {
    "value": [
      {
        "_type": "LocalBusiness",
        "webSearchUrl": "https://www.bing.com/search?q=sinful+bakery&filters=local...",
        "name": "Liberty's Delightful Sinful Bakery & Cafe",
        "url": "https://www.contoso.com/",
        "entityPresentationInfo": {
          "entityScenario": "ListItem",
          "entityTypeHints": [
            "Place",
            "LocalBusiness"
          ]
        },
        "address": {
          "addressLocality": "Seattle",
          "addressRegion": "WA",
          "postalCode": "98112",
          "addressCountry": "US",
          "neighborhood": "Madison Park"
        },
        "telephone": "(800) 555-1212"
      },

      . . .
      {
        "_type": "Restaurant",
        "webSearchUrl": "https://www.bing.com/search?q=Pickles+and+Preserves...",
        "name": "Munson's Pickles and Preserves Farm",
        "url": "https://www.princi.com/",
        "entityPresentationInfo": {
          "entityScenario": "ListItem",
          "entityTypeHints": [
            "Place",
            "LocalBusiness",
            "Restaurant"
          ]
        },
        "address": {
          "addressLocality": "Seattle",
          "addressRegion": "WA",
          "postalCode": "98101",
          "addressCountry": "US",
          "neighborhood": "Capitol Hill"
        },
        "telephone": "(800) 555-1212"
      },
      
      . . .
    ]
  }
}

次のステップ