快速入門:使用 Bing Web 搜尋客戶端程式庫
警告
在 2020 年 10 月 30 日,Bing 搜尋 API 從 Azure AI 服務移至 Bing 搜尋服務。 本檔僅供參考。 如需更新的檔案,請參閱 Bing 搜尋 API 檔案。 如需建立 Bing 搜尋新 Azure 資源的指示,請參閱透過 Azure Marketplace 建立 Bing 搜尋資源。
Bing Web 搜尋用戶端連結庫可讓您輕鬆地將 Bing Web 搜尋整合到 C# 應用程式中。 在本快速入門中,您將瞭解如何具現化用戶端、傳送要求,以及列印回應。
想要立即查看程序代碼嗎? GitHub 上提供適用於 .NET Bing 搜尋客戶端連結庫的範例。
先決條件
以下是執行本快速入門之前,您需要的一些事項:
建立 Azure 資源
建立下列其中一個 Azure 資源,以開始使用 Bing Web 搜尋 API:
- 可透過 Azure 入口網站取得,直到您刪除資源為止。
- 使用免費定價層來試用服務,稍後升級至生產環境的付費層。
- 可透過 Azure 入口網站取得,直到您刪除資源為止。
- 針對您的應用程式,跨多個 Azure AI 服務使用相同的金鑰和端點。
建立專案並安裝相依性
第一個步驟是建立新的控制台專案。 如果您需要設定主控台項目協助,請參閱 Hello World -- 您的第一個程式(C# 程式設計手冊)。 若要在應用程式中使用 Bing Web 搜尋 SDK,您必須使用 NuGet 套件管理員安裝 Microsoft.Azure.CognitiveServices.Search.WebSearch
。
網頁搜索 SDK 套件 也會安裝:
- Microsoft.Rest.ClientRuntime
- Microsoft.Rest.ClientRuntime.Azure
- Newtonsoft.Json
宣告依賴關係
在 Visual Studio 或 Visual Studio Code 中開啟您的專案,並匯入這些相依性:
using System;
using System.Collections.Generic;
using Microsoft.Azure.CognitiveServices.Search.WebSearch;
using Microsoft.Azure.CognitiveServices.Search.WebSearch.Models;
using System.Linq;
using System.Threading.Tasks;
建立專案腳手架
當您建立新的主控台專案時,應該已建立應用程式的命名空間和類別。 您的程式看起來應該像下列範例:
namespace WebSearchSDK
{
class YOUR_PROGRAM
{
// The code in the following sections goes here.
}
}
在下列各節中,我們將在此類別內建置範例應用程式。
建立請求
此程式代碼會建構搜尋查詢。
public static async Task WebResults(WebSearchClient client)
{
try
{
var webData = await client.Web.SearchAsync(query: "Yosemite National Park");
Console.WriteLine("Searching for \"Yosemite National Park\"");
// Code for handling responses is provided in the next section...
}
catch (Exception ex)
{
Console.WriteLine("Encountered exception. " + ex.Message);
}
}
處理回應
接下來,讓我們新增一些程式代碼來剖析回應並列印結果。 如果在響應物件中出現,第一個網頁、圖片、新聞文章和影片的 Name
和 Url
將被打印。
if (webData?.WebPages?.Value?.Count > 0)
{
// find the first web page
var firstWebPagesResult = webData.WebPages.Value.FirstOrDefault();
if (firstWebPagesResult != null)
{
Console.WriteLine("Webpage Results # {0}", webData.WebPages.Value.Count);
Console.WriteLine("First web page name: {0} ", firstWebPagesResult.Name);
Console.WriteLine("First web page URL: {0} ", firstWebPagesResult.Url);
}
else
{
Console.WriteLine("Didn't find any web pages...");
}
}
else
{
Console.WriteLine("Didn't find any web pages...");
}
/*
* Images
* If the search response contains images, the first result's name
* and url are printed.
*/
if (webData?.Images?.Value?.Count > 0)
{
// find the first image result
var firstImageResult = webData.Images.Value.FirstOrDefault();
if (firstImageResult != null)
{
Console.WriteLine("Image Results # {0}", webData.Images.Value.Count);
Console.WriteLine("First Image result name: {0} ", firstImageResult.Name);
Console.WriteLine("First Image result URL: {0} ", firstImageResult.ContentUrl);
}
else
{
Console.WriteLine("Didn't find any images...");
}
}
else
{
Console.WriteLine("Didn't find any images...");
}
/*
* News
* If the search response contains news articles, the first result's name
* and url are printed.
*/
if (webData?.News?.Value?.Count > 0)
{
// find the first news result
var firstNewsResult = webData.News.Value.FirstOrDefault();
if (firstNewsResult != null)
{
Console.WriteLine("\r\nNews Results # {0}", webData.News.Value.Count);
Console.WriteLine("First news result name: {0} ", firstNewsResult.Name);
Console.WriteLine("First news result URL: {0} ", firstNewsResult.Url);
}
else
{
Console.WriteLine("Didn't find any news articles...");
}
}
else
{
Console.WriteLine("Didn't find any news articles...");
}
/*
* Videos
* If the search response contains videos, the first result's name
* and url are printed.
*/
if (webData?.Videos?.Value?.Count > 0)
{
// find the first video result
var firstVideoResult = webData.Videos.Value.FirstOrDefault();
if (firstVideoResult != null)
{
Console.WriteLine("\r\nVideo Results # {0}", webData.Videos.Value.Count);
Console.WriteLine("First Video result name: {0} ", firstVideoResult.Name);
Console.WriteLine("First Video result URL: {0} ", firstVideoResult.ContentUrl);
}
else
{
Console.WriteLine("Didn't find any videos...");
}
}
else
{
Console.WriteLine("Didn't find any videos...");
}
宣告 main 方法
在這個應用程式中,main 方法包含用來初始化客戶端的程式碼、驗證 subscriptionKey
,以及呼叫 WebResults
。 請確定您輸入 Azure 帳戶的有效訂用帳戶密鑰,再繼續進行。
static async Task Main(string[] args)
{
var client = new WebSearchClient(new ApiKeyServiceClientCredentials("YOUR_SUBSCRIPTION_KEY"));
await WebResults(client);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
執行應用程式
讓我們執行應用程式!
dotnet run
定義函式和篩選結果
既然您已經第一次呼叫 Bing Web 搜尋 API,我們來看看一些 SDK 功能來優化查詢和篩選結果。 每個函式都可以新增至您在上一節中建立的 C# 應用程式。
限制 Bing 傳回的結果數目
此範例會使用 count
和 offset
參數來限制為「西雅圖最佳餐廳」傳回的結果數目。 第一個結果的 Name
和 Url
已列印出來。
將此程式代碼新增至主控台專案:
public static async Task WebResultsWithCountAndOffset(WebSearchClient client) { try { var webData = await client.Web.SearchAsync(query: "Best restaurants in Seattle", offset: 10, count: 20); Console.WriteLine("\r\nSearching for \" Best restaurants in Seattle \""); if (webData?.WebPages?.Value?.Count > 0) { var firstWebPagesResult = webData.WebPages.Value.FirstOrDefault(); if (firstWebPagesResult != null) { Console.WriteLine("Web Results #{0}", webData.WebPages.Value.Count); Console.WriteLine("First web page name: {0} ", firstWebPagesResult.Name); Console.WriteLine("First web page URL: {0} ", firstWebPagesResult.Url); } else { Console.WriteLine("Couldn't find first web result!"); } } else { Console.WriteLine("Didn't see any Web data.."); } } catch (Exception ex) { Console.WriteLine("Encountered exception. " + ex.Message); } }
將
WebResultsWithCountAndOffset
新增至main
:static async Task Main(string[] args) { var client = new WebSearchClient(new ApiKeyServiceClientCredentials("YOUR_SUBSCRIPTION_KEY")); await WebResults(client); // Search with count and offset... await WebResultsWithCountAndOffset(client); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); }
執行應用程式。
篩選新聞功能
此範例會使用 response_filter
參數來篩選搜尋結果。 傳回的搜尋結果僅限於「Microsoft」的新聞文章。 列印第一個結果的 Name
和 Url
。
將此程式代碼新增至主控台專案:
public static async Task WebSearchWithResponseFilter(WebSearchClient client) { try { IList<string> responseFilterstrings = new List<string>() { "news" }; var webData = await client.Web.SearchAsync(query: "Microsoft", responseFilter: responseFilterstrings); Console.WriteLine("\r\nSearching for \" Microsoft \" with response filter \"news\""); if (webData?.News?.Value?.Count > 0) { var firstNewsResult = webData.News.Value.FirstOrDefault(); if (firstNewsResult != null) { Console.WriteLine("News Results #{0}", webData.News.Value.Count); Console.WriteLine("First news result name: {0} ", firstNewsResult.Name); Console.WriteLine("First news result URL: {0} ", firstNewsResult.Url); } else { Console.WriteLine("Couldn't find first News results!"); } } else { Console.WriteLine("Didn't see any News data.."); } } catch (Exception ex) { Console.WriteLine("Encountered exception. " + ex.Message); } }
將
WebResultsWithCountAndOffset
新增至main
:static Task Main(string[] args) { var client = new WebSearchClient(new ApiKeyServiceClientCredentials("YOUR_SUBSCRIPTION_KEY")); await WebResults(client); // Search with count and offset... await WebResultsWithCountAndOffset(client); // Search with news filter... await WebSearchWithResponseFilter(client); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); }
執行應用程式。
使用安全搜尋、答案計數和升階篩選
此範例會使用 answer_count
、promote
和 safe_search
參數來篩選「音樂影片」的搜尋結果。 會顯示第一個結果的 Name
和 ContentUrl
。
將此程式代碼新增至主控台專案:
public static async Task WebSearchWithAnswerCountPromoteAndSafeSearch(WebSearchClient client) { try { IList<string> promoteAnswertypeStrings = new List<string>() { "videos" }; var webData = await client.Web.SearchAsync(query: "Music Videos", answerCount: 2, promote: promoteAnswertypeStrings, safeSearch: SafeSearch.Strict); Console.WriteLine("\r\nSearching for \"Music Videos\""); if (webData?.Videos?.Value?.Count > 0) { var firstVideosResult = webData.Videos.Value.FirstOrDefault(); if (firstVideosResult != null) { Console.WriteLine("Video Results # {0}", webData.Videos.Value.Count); Console.WriteLine("First Video result name: {0} ", firstVideosResult.Name); Console.WriteLine("First Video result URL: {0} ", firstVideosResult.ContentUrl); } else { Console.WriteLine("Couldn't find videos results!"); } } else { Console.WriteLine("Didn't see any data.."); } } catch (Exception ex) { Console.WriteLine("Encountered exception. " + ex.Message); } }
將
WebResultsWithCountAndOffset
新增至main
:static async Task Main(string[] args) { var client = new WebSearchClient(new ApiKeyServiceClientCredentials("YOUR_SUBSCRIPTION_KEY")); await WebResults(client); // Search with count and offset... await WebResultsWithCountAndOffset(client); // Search with news filter... await WebSearchWithResponseFilter(client); // Search with answer count, promote, and safe search await WebSearchWithAnswerCountPromoteAndSafeSearch(client); Console.WriteLine("Press any key to exit..."); Console.ReadKey(); }
執行應用程式。
清理資源
當您完成此專案時,請務必從應用程式的程式代碼中移除您的訂用帳戶密鑰。
後續步驟
Bing Web 搜尋用戶端連結庫可讓您輕鬆地將 Bing Web 搜尋整合到 Java 應用程式中。 在本快速入門中,您將瞭解如何傳送要求、接收 JSON 回應,以及篩選和剖析結果。
想要立即查看程序代碼嗎? GitHub 上提供適用於 Java Bing 搜尋用戶端連結庫的範例。
先決條件
以下是執行本快速入門之前,您需要的一些事項:
- JDK 7 或 8
- Apache Maven 或您慣用的建置自動化工具
- 訂用帳戶金鑰
建立 Azure 資源
建立下列其中一個 Azure 資源,以開始使用 Bing Web 搜尋 API:
- 可透過 Azure 入口網站取得,直到您刪除資源為止。
- 使用免費定價層來試用服務,稍後升級至生產環境的付費層。
- 可透過 Azure 入口網站取得,直到您刪除資源為止。
- 針對您的應用程式,跨多個 Azure AI 服務使用相同的金鑰和端點。
建立項目並設定您的 POM 檔案
使用 Maven 或您慣用的組建自動化工具建立新的 Java 專案。 假設您使用 Maven,請將下列幾行新增至您的 Project 物件模型 (POM) 檔案。 以您的應用程式取代 mainClass
的所有實例。
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.4.0</version>
<configuration>
<!--Your comment
Replace the mainClass with the path to your Java application.
It should begin with com and doesn't require the .java extension.
For example: com.bingwebsearch.app.BingWebSearchSample. This maps to
The following directory structure:
src/main/java/com/bingwebsearch/app/BingWebSearchSample.java.
-->
<mainClass>com.path.to.your.app.APP_NAME</mainClass>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>attached</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<!--Your comment
Replace the mainClass with the path to your Java application.
For example: com.bingwebsearch.app.BingWebSearchSample.java.
This maps to the following directory structure:
src/main/java/com/bingwebsearch/app/BingWebSearchSample.java.
-->
<mainClass>com.path.to.your.app.APP_NAME.java</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.microsoft.azure</groupId>
<artifactId>azure</artifactId>
<version>1.9.0</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
</dependency>
<dependency>
<groupId>com.microsoft.azure.cognitiveservices</groupId>
<artifactId>azure-cognitiveservices-websearch</artifactId>
<version>1.0.1</version>
</dependency>
</dependencies>
宣告相依關係
在慣用的 IDE 或編輯器中開啟您的專案,並匯入這些相依性:
import com.microsoft.azure.cognitiveservices.search.websearch.BingWebSearchAPI;
import com.microsoft.azure.cognitiveservices.search.websearch.BingWebSearchManager;
import com.microsoft.azure.cognitiveservices.search.websearch.models.ImageObject;
import com.microsoft.azure.cognitiveservices.search.websearch.models.NewsArticle;
import com.microsoft.azure.cognitiveservices.search.websearch.models.SearchResponse;
import com.microsoft.azure.cognitiveservices.search.websearch.models.VideoObject;
import com.microsoft.azure.cognitiveservices.search.websearch.models.WebPage;
如果您使用 Maven 建立專案,套件應該已經宣告好了。 否則,請立即宣告包裹。 例如:
package com.bingwebsearch.app
宣告 BingWebSearchSample 類別
宣告 BingWebSearchSample
類別。 其中包含大部分的程序代碼,包括 main
方法。
public class BingWebSearchSample {
// The code in the following sections goes here.
}
建立請求
位於 BingWebSearchSample
類別中的 runSample
方法會建構要求。 將此程式代碼複製到您的應用程式:
public static boolean runSample(BingWebSearchAPI client) {
/*
* This function performs the search.
*
* @param client instance of the Bing Web Search API client
* @return true if sample runs successfully
*/
try {
/*
* Performs a search based on the .withQuery and prints the name and
* url for the first web pages, image, news, and video result
* included in the response.
*/
System.out.println("Searched Web for \"Xbox\"");
// Construct the request.
SearchResponse webData = client.bingWebs().search()
.withQuery("Xbox")
.withMarket("en-us")
.withCount(10)
.execute();
// Code continues in the next section...
處理回應
接下來,讓我們新增一些程式代碼來剖析回應並列印結果。 如果第一個網頁、圖片、新聞文章和影片被包含在響應物件中,其 name
和 url
將被列印。
/*
* WebPages
* If the search response has web pages, the first result's name
* and url are printed.
*/
if (webData != null && webData.webPages() != null && webData.webPages().value() != null &&
webData.webPages().value().size() > 0) {
// find the first web page
WebPage firstWebPagesResult = webData.webPages().value().get(0);
if (firstWebPagesResult != null) {
System.out.println(String.format("Webpage Results#%d", webData.webPages().value().size()));
System.out.println(String.format("First web page name: %s ", firstWebPagesResult.name()));
System.out.println(String.format("First web page URL: %s ", firstWebPagesResult.url()));
} else {
System.out.println("Couldn't find the first web result!");
}
} else {
System.out.println("Didn't find any web pages...");
}
/*
* Images
* If the search response has images, the first result's name
* and url are printed.
*/
if (webData != null && webData.images() != null && webData.images().value() != null &&
webData.images().value().size() > 0) {
// find the first image result
ImageObject firstImageResult = webData.images().value().get(0);
if (firstImageResult != null) {
System.out.println(String.format("Image Results#%d", webData.images().value().size()));
System.out.println(String.format("First Image result name: %s ", firstImageResult.name()));
System.out.println(String.format("First Image result URL: %s ", firstImageResult.contentUrl()));
} else {
System.out.println("Couldn't find the first image result!");
}
} else {
System.out.println("Didn't find any images...");
}
/*
* News
* If the search response has news articles, the first result's name
* and url are printed.
*/
if (webData != null && webData.news() != null && webData.news().value() != null &&
webData.news().value().size() > 0) {
// find the first news result
NewsArticle firstNewsResult = webData.news().value().get(0);
if (firstNewsResult != null) {
System.out.println(String.format("News Results#%d", webData.news().value().size()));
System.out.println(String.format("First news result name: %s ", firstNewsResult.name()));
System.out.println(String.format("First news result URL: %s ", firstNewsResult.url()));
} else {
System.out.println("Couldn't find the first news result!");
}
} else {
System.out.println("Didn't find any news articles...");
}
/*
* Videos
* If the search response has videos, the first result's name
* and url are printed.
*/
if (webData != null && webData.videos() != null && webData.videos().value() != null &&
webData.videos().value().size() > 0) {
// find the first video result
VideoObject firstVideoResult = webData.videos().value().get(0);
if (firstVideoResult != null) {
System.out.println(String.format("Video Results#%s", webData.videos().value().size()));
System.out.println(String.format("First Video result name: %s ", firstVideoResult.name()));
System.out.println(String.format("First Video result URL: %s ", firstVideoResult.contentUrl()));
} else {
System.out.println("Couldn't find the first video result!");
}
} else {
System.out.println("Didn't find any videos...");
}
宣告“main”方法
在此應用程式中,main 方法含有實例化用戶端的程式碼、驗證 subscriptionKey
,以及呼叫 runSample
。 請確定您輸入 Azure 帳戶的有效訂用帳戶密鑰,再繼續進行。
public static void main(String[] args) {
try {
// Enter a valid subscription key for your account.
final String subscriptionKey = "YOUR_SUBSCRIPTION_KEY";
// Instantiate the client.
BingWebSearchAPI client = BingWebSearchManager.authenticate(subscriptionKey);
// Make a call to the Bing Web Search API.
runSample(client);
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
執行程式
最後一個步驟是執行程式!
mvn compile exec:java
清理資源
當您完成此專案時,請務必從程式的程式代碼中移除您的訂用帳戶密鑰。
後續步驟
另請參閱
Bing Web 搜尋用戶端連結庫可讓您輕鬆地將 Bing Web 搜尋整合到 Node.js 應用程式中。 在本快速入門中,您將瞭解如何具現化用戶端、傳送要求,以及列印回應。
想要立即查看程序代碼嗎? 在 GitHub 上可以找到 JavaScript 用的 Bing 搜尋客戶端庫的範例。
先決條件
以下是執行本快速入門之前,您需要的一些事項:
- Node.js 6 或更新版本
- 訂用帳戶金鑰
建立 Azure 資源
建立下列其中一個 Azure 資源,以開始使用 Bing Web 搜尋 API:
- 可透過 Azure 入口網站取得,直到您刪除資源為止。
- 使用免費定價層來試用服務,稍後升級至生產環境的付費層。
- 可透過 Azure 入口網站取得,直到您刪除資源為止。
- 針對您的應用程式,跨多個 Azure AI 服務使用相同的金鑰和端點。
設定開發環境
讓我們從為 Node.js 項目設定開發環境開始。
為您的專案建立新的目錄:
mkdir YOUR_PROJECT
建立新的套件檔案:
cd YOUR_PROJECT npm init
現在,讓我們安裝一些 Azure 模組,並將其新增至
package.json
:npm install --save @azure/cognitiveservices-websearch npm install --save @azure/ms-rest-azure-js
建立專案並宣告必要的模組
在與 package.json
相同的目錄中,使用您慣用的 IDE 或編輯器建立新的 Node.js 專案。 例如: sample.js
。
接下來,將此程式代碼複製到您的專案中。 它會載入上一節中安裝的模組。
const CognitiveServicesCredentials = require('@azure/ms-rest-azure-js').CognitiveServicesCredentials;
const WebSearchAPIClient = require('@azure/cognitiveservices-websearch');
具現化用戶端
此程式代碼會具現化用戶端,並使用 @azure/cognitiveservices-websearch
模組。 請確定您輸入 Azure 帳戶的有效訂用帳戶密鑰,再繼續進行。
let credentials = new CognitiveServicesCredentials('YOUR-ACCESS-KEY');
let webSearchApiClient = new WebSearchAPIClient(credentials);
提出要求並列印結果
使用用戶端將搜尋查詢傳送至 Bing Web 搜尋。 如果回應包含 properties
陣列中任何項目的結果,則會將 result.value
列印至主控台。
webSearchApiClient.web.search('seahawks').then((result) => {
let properties = ["images", "webPages", "news", "videos"];
for (let i = 0; i < properties.length; i++) {
if (result[properties[i]]) {
console.log(result[properties[i]].value);
} else {
console.log(`No ${properties[i]} data`);
}
}
}).catch((err) => {
throw err;
})
執行程式
最後一個步驟是執行程式!
清理資源
當您完成此專案時,請務必從程式的程式代碼中移除您的訂用帳戶密鑰。
後續步驟
另請參閱
Bing Web 搜尋用戶端連結庫可讓您輕鬆地將 Bing Web 搜尋整合到 Python 應用程式中。 在本快速入門中,您將瞭解如何傳送要求、接收 JSON 回應,以及篩選和剖析結果。
想要立即查看程序代碼嗎? 在 GitHub 上提供適用於 Python 的 Bing 搜尋客戶端庫 範例。
先決條件
Bing Web 搜尋 SDK 與 Python 2.7 或 3.6+ 相容。 建議您針對本快速入門使用虛擬環境。
- Python 2.7 或 3.6+
- virtualenv 適用於 Python 2.7
- 適用於 Python 3.x 的 venv
建立 Azure 資源
建立下列其中一個 Azure 資源,以開始使用 Bing Web 搜尋 API:
- 可透過 Azure 入口網站取得,直到您刪除資源為止。
- 使用免費定價層來試用服務,稍後升級至生產環境的付費層。
- 可透過 Azure 入口網站取得,直到您刪除資源為止。
- 針對您的應用程式,跨多個 Azure AI 服務使用相同的金鑰和端點。
建立及設定虛擬環境
針對 Python 2.x 和 Python 3.x,設定虛擬環境的指示不同。 請遵循下列步驟來建立和初始化虛擬環境。
Python 2.x
使用適用於 Python 2.7 的 virtualenv
建立虛擬環境:
virtualenv mytestenv
開啟您的環境:
cd mytestenv
source bin/activate
安裝 Bing Web 搜尋 SDK 相依項:
python -m pip install azure-cognitiveservices-search-websearch
Python 3.x
使用適用於 Python 3.x 的 venv
建立虛擬環境:
python -m venv mytestenv
開啟您的環境:
mytestenv\Scripts\activate.bat
安裝 Bing Web 搜尋 SDK 相依性:
cd mytestenv
python -m pip install azure-cognitiveservices-search-websearch
建立用戶端並列印您的第一個結果
既然您已設定虛擬環境並安裝相依性,讓我們建立用戶端。 用戶端會處理 Bing Web 搜尋 API 的要求和回應。
如果回應包含網頁、影像、新聞或影片,則會列印每個頁面的第一個結果。
使用您慣用的 IDE 或編輯器建立新的 Python 專案。
將此範例程式代碼複製到您的專案中。
endpoint
可以是下方的全域端點,或資源 Azure 入口網站中顯示的 自定義子域 端點。# Import required modules. from azure.cognitiveservices.search.websearch import WebSearchClient from azure.cognitiveservices.search.websearch.models import SafeSearch from msrest.authentication import CognitiveServicesCredentials # Replace with your subscription key. subscription_key = "YOUR_SUBSCRIPTION_KEY" # Instantiate the client and replace with your endpoint. client = WebSearchClient(endpoint="YOUR_ENDPOINT", credentials=CognitiveServicesCredentials(subscription_key)) # Make a request. Replace Yosemite if you'd like. web_data = client.web.search(query="Yosemite") print("\r\nSearched for Query# \" Yosemite \"") ''' Web pages If the search response contains web pages, the first result's name and url are printed. ''' if hasattr(web_data.web_pages, 'value'): print("\r\nWebpage Results#{}".format(len(web_data.web_pages.value))) first_web_page = web_data.web_pages.value[0] print("First web page name: {} ".format(first_web_page.name)) print("First web page URL: {} ".format(first_web_page.url)) else: print("Didn't find any web pages...") ''' Images If the search response contains images, the first result's name and url are printed. ''' if hasattr(web_data.images, 'value'): print("\r\nImage Results#{}".format(len(web_data.images.value))) first_image = web_data.images.value[0] print("First Image name: {} ".format(first_image.name)) print("First Image URL: {} ".format(first_image.url)) else: print("Didn't find any images...") ''' News If the search response contains news, the first result's name and url are printed. ''' if hasattr(web_data.news, 'value'): print("\r\nNews Results#{}".format(len(web_data.news.value))) first_news = web_data.news.value[0] print("First News name: {} ".format(first_news.name)) print("First News URL: {} ".format(first_news.url)) else: print("Didn't find any news...") ''' If the search response contains videos, the first result's name and url are printed. ''' if hasattr(web_data.videos, 'value'): print("\r\nVideos Results#{}".format(len(web_data.videos.value))) first_video = web_data.videos.value[0] print("First Videos name: {} ".format(first_video.name)) print("First Videos URL: {} ".format(first_video.url)) else: print("Didn't find any videos...")
以有效的訂用帳戶金鑰取代
SUBSCRIPTION_KEY
。將
YOUR_ENDPOINT
取代為入口網站中的端點 URL,並從端點移除 「bing/v7.0」 區段。執行程式。 例如:
python your_program.py
。
定義函式和篩選結果
既然您已經首次使用 Bing Web 搜尋 API,讓我們來看看幾個功能。 下列各節會醒目提示 SDK 功能,以精簡查詢和篩選結果。 每個函式都可以新增至您在上一節中建立的 Python 程式。
限制 Bing 傳回的結果數目
此範例會使用 count
和 offset
參數來限制使用 SDK search
方法傳回的結果數目,。 第一個結果的 name
和 url
已被列印。
將此程式代碼新增至 Python 專案:
# Declare the function. def web_results_with_count_and_offset(subscription_key): client = WebSearchAPI(CognitiveServicesCredentials(subscription_key)) try: ''' Set the query, offset, and count using the SDK's search method. See: https://learn.microsoft.com/python/api/azure-cognitiveservices-search-websearch/azure.cognitiveservices.search.websearch.operations.weboperations?view=azure-python. ''' web_data = client.web.search(query="Best restaurants in Seattle", offset=10, count=20) print("\r\nSearching for \"Best restaurants in Seattle\"") if web_data.web_pages.value: ''' If web pages are available, print the # of responses, and the first and second web pages returned. ''' print("Webpage Results#{}".format(len(web_data.web_pages.value))) first_web_page = web_data.web_pages.value[0] print("First web page name: {} ".format(first_web_page.name)) print("First web page URL: {} ".format(first_web_page.url)) else: print("Didn't find any web pages...") except Exception as err: print("Encountered exception. {}".format(err))
執行程式。
篩選新聞和最新資訊
此範例會使用 response_filter
和 freshness
參數,使用 SDK 的 search
方法篩選搜尋結果,。 傳回的搜尋結果僅限於 Bing 在過去 24 小時內探索到的新聞文章和頁面。 列印第一個結果的 name
和 url
。
將此程式代碼新增至 Python 專案:
# Declare the function. def web_search_with_response_filter(subscription_key): client = WebSearchAPI(CognitiveServicesCredentials(subscription_key)) try: ''' Set the query, response_filter, and freshness using the SDK's search method. See: https://learn.microsoft.com/python/api/azure-cognitiveservices-search-websearch/azure.cognitiveservices.search.websearch.operations.weboperations?view=azure-python. ''' web_data = client.web.search(query="xbox", response_filter=["News"], freshness="Day") print("\r\nSearching for \"xbox\" with the response filter set to \"News\" and freshness filter set to \"Day\".") ''' If news articles are available, print the # of responses, and the first and second articles returned. ''' if web_data.news.value: print("# of news results: {}".format(len(web_data.news.value))) first_web_page = web_data.news.value[0] print("First article name: {} ".format(first_web_page.name)) print("First article URL: {} ".format(first_web_page.url)) print("") second_web_page = web_data.news.value[1] print("\nSecond article name: {} ".format(second_web_page.name)) print("Second article URL: {} ".format(second_web_page.url)) else: print("Didn't find any news articles...") except Exception as err: print("Encountered exception. {}".format(err)) # Call the function. web_search_with_response_filter(subscription_key)
執行程式。
使用安全搜尋、答案計數和升階篩選
此範例會使用 answer_count
、promote
和 safe_search
參數,使用 SDK 的 search
方法來篩選搜尋結果。 會顯示第一個結果的 name
和 url
。
將此程式代碼新增至 Python 專案:
# Declare the function. def web_search_with_answer_count_promote_and_safe_search(subscription_key): client = WebSearchAPI(CognitiveServicesCredentials(subscription_key)) try: ''' Set the query, answer_count, promote, and safe_search parameters using the SDK's search method. See: https://learn.microsoft.com/python/api/azure-cognitiveservices-search-websearch/azure.cognitiveservices.search.websearch.operations.weboperations?view=azure-python. ''' web_data = client.web.search( query="Niagara Falls", answer_count=2, promote=["videos"], safe_search=SafeSearch.strict # or directly "Strict" ) print("\r\nSearching for \"Niagara Falls\"") ''' If results are available, print the # of responses, and the first result returned. ''' if web_data.web_pages.value: print("Webpage Results#{}".format(len(web_data.web_pages.value))) first_web_page = web_data.web_pages.value[0] print("First web page name: {} ".format(first_web_page.name)) print("First web page URL: {} ".format(first_web_page.url)) else: print("Didn't see any Web data..") except Exception as err: print("Encountered exception. {}".format(err))
執行程式。
清理資源
當您完成此專案時,請務必從程式的程式代碼中移除您的訂用帳戶密鑰,並停用您的虛擬環境。