クイック スタート:Python と Bing News Search REST API を使用してニュース検索を実行する

警告

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

このクイックスタートを使用して、Bing News Search API を呼び出してみましょう。 このシンプルな Python アプリケーションは、検索クエリを API に送信し、JSON の結果を処理します。

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

このコードを MyBinder で Jupyter Notebook として実行するには、起動バインダー バッジを選択します。

起動バインダー

このサンプルのソース コードは、GitHub でも入手できます。

Azure リソースを作成する

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

Bing Search v7 リソース

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

マルチサービス リソース

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

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

任意の IDE またはエディターで新しい Python ファイルを作成し、request モジュールをインポートします。 サブスクリプション キー、エンドポイント、検索語句の変数を作成します。 次のコードのグローバル エンドポイントを使用するか、Azure portal に表示される、対象のリソースのカスタム サブドメイン エンドポイントを使用することができます。

import requests

subscription_key = "your subscription key"
search_term = "Microsoft"
search_url = "https://api.cognitive.microsoft.com/bing/v7.0/news/search"

要求のパラメーターを作成する

Ocp-Apim-Subscription-Key をキーに使用して新しいディクショナリにご利用のサブスクリプション キーを追加します。 検索のパラメーターも同様にします。

headers = {"Ocp-Apim-Subscription-Key" : subscription_key}
params  = {"q": search_term, "textDecorations": True, "textFormat": "HTML"}

要求を送信して応答を取得する

  1. 要求ライブラリを使用して Bing Visual Search API を呼び出します。その際、サブスクリプション キー、および前の手順で作成したディクショナリ オブジェクトを使用します。

    response = requests.get(search_url, headers=headers, params=params)
    response.raise_for_status()
    search_results = json.dumps(response.json())
    
  2. JSON オブジェクトとして search_results に格納されている API から、応答に含まれている記事の説明にアクセスします。

    descriptions = [article["description"] for article in search_results["value"]]
    

結果を表示する

これらの説明は、太字で強調表示される検索キーワードと共に、テーブルで表示されます。

from IPython.display import HTML
rows = "\n".join(["<tr><td>{0}</td></tr>".format(desc)
                  for desc in descriptions])
HTML("<table>"+rows+"</table>")

次のステップ