快速入门:使用 C# 和必应新闻搜索 REST API 搜索新闻
警告
2020 年 10 月 30 日,必应搜索 API 从 Azure AI 服务迁移到必应搜索服务。 本文档仅供参考。 有关更新的文档,请参阅必应搜索 API 文档。 关于为必应搜索创建新的 Azure 资源的说明,请参阅通过 Azure 市场创建必应搜索资源。
根据此快速入门中的说明对必应资讯搜索 API 进行第一次调用。 这个简单的 C# 应用程序会向该 API 发送一个新闻搜索查询并显示 JSON 响应。
虽然此应用程序是使用 C# 编写的,但 API 是一种 RESTful Web 服务,与大多数编程语言兼容。
可以在 GitHub 上找到此示例的完整代码。
先决条件
- 任何版本的 Visual Studio 2017 或更高版本。
- Json.NET 框架,可以 NuGet 包的形式提供。
- 如果使用的是 Linux/MacOS,则可以通过使用 Mono 运行此应用程序。
创建 Azure 资源
通过创建以下 Azure 资源之一开始使用必应新闻搜索 API:
- 在删除资源前,可通过 Azure 门户使用。
- 使用免费定价层试用该服务,稍后升级到用于生产的付费层。
- 在删除资源前,可通过 Azure 门户使用。
- 在多个 Azure AI 服务中对应用程序使用相同的密钥和终结点。
创建并初始化项目
在 Visual Studio 中创建一个新的 C# 控制台解决方案。 然后,将以下命名空间添加到主代码文件:
using System; using System.Text; using System.Net; using System.IO; using System.Collections.Generic;
为 API 终结点、订阅密钥和搜索词创建变量。 你可以使用以下代码中的全局终结点,或者使用资源的 Azure 门户中显示的自定义子域终结点。
const string accessKey = "enter key here"; const string uriBase = "https://api.cognitive.microsoft.com/bing/v7.0/news/search"; const string searchTerm = "Microsoft";
创建一个结构来格式化必应新闻搜索响应
定义 SearchResult
结构以包含新闻搜索结果和 JSON 标头信息。
struct SearchResult
{
public String jsonResult;
public Dictionary<String, String> relevantHeaders;
}
创建和处理新闻搜索请求
创建一个名为
BingNewsSearch()
的方法来调用 API,并将返回类型设置为先前创建的SearchResult
结构。在接下来的步骤中,将代码添加到此方法。
构造搜索请求的 URI。 必须先设置搜索词
toSearch
的格式,然后才能将其附加到字符串。static SearchResult BingNewsSearch(string toSearch){ var uriQuery = uriBase + "?q=" + Uri.EscapeDataString(toSearch); //...
执行 Web 请求并获取 JSON 字符串形式的响应。
WebRequest request = WebRequest.Create(uriQuery); request.Headers["Ocp-Apim-Subscription-Key"] = subscriptionKey; HttpWebResponse response = (HttpWebResponse)request.GetResponseAsync().Result; string json = new StreamReader(response.GetResponseStream()).ReadToEnd();
创建搜索结果对象,提取必应 HTTP 标头。 然后返回
searchResult
。// Create the result object for return var searchResult = new SearchResult() { jsonResult = json, relevantHeaders = new Dictionary<String, String>() }; // Extract Bing HTTP headers foreach (String header in response.Headers) { if (header.StartsWith("BingAPIs-") || header.StartsWith("X-MSEdge-")) searchResult.relevantHeaders[header] = response.Headers[header]; } return searchResult;
处理响应
在 main 方法中,调用 BingNewsSearch()
并存储返回的响应。 然后,将 JSON 反序列化为一个对象,可以在其中查看响应的值。
SearchResult result = BingNewsSearch(searchTerm);
//deserialize the JSON response
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(result.jsonResult);
Console.WriteLine(jsonObj["value"][0])
示例 JSON 响应
在 JSON 中返回成功的响应,如以下示例所示:
{
"_type": "News",
"readLink": "https:\/\/api.cognitive.microsoft.com\/api\/v7\/news\/search?q=Microsoft",
"totalEstimatedMatches": 36,
"sort": [
{
"name": "Best match",
"id": "relevance",
"isSelected": true,
"url": "https:\/\/api.cognitive.microsoft.com\/api\/v7\/news\/search?q=Microsoft"
},
{
"name": "Most recent",
"id": "date",
"isSelected": false,
"url": "https:\/\/api.cognitive.microsoft.com\/api\/v7\/news\/search?q=Microsoft&sortby=date"
}
],
"value": [
{
"name": "Microsoft to open flagship London brick-and-mortar retail store",
"url": "http:\/\/www.contoso.com\/article\/microsoft-to-open-flagshi...",
"image": {
"thumbnail": {
"contentUrl": "https:\/\/www.bing.com\/th?id=ON.F9E4A49EC010417...",
"width": 220,
"height": 146
}
},
"description": "After years of rumors about Microsoft opening a brick-and-mortar...",
"about": [
{
"readLink": "https:\/\/api.cognitive.microsoft.com\/api\/v7\/entiti...",
"name": "Microsoft"
},
{
"readLink": "https:\/\/api.cognitive.microsoft.com\/api\/v7\/entit...",
"name": "London"
}
],
"provider": [
{
"_type": "Organization",
"name": "Contoso"
}
],
"datePublished": "2017-09-21T21:16:00.0000000Z",
"category": "ScienceAndTechnology"
},
. . .
{
"name": "Microsoft adds Availability Zones to its Azure cloud platform",
"url": "https:\/\/contoso.com\/2017\/09\/21\/microsoft-adds-availability...",
"image": {
"thumbnail": {
"contentUrl": "https:\/\/www.bing.com\/th?id=ON.0AE7595B9720...",
"width": 700,
"height": 466
}
},
"description": "Microsoft has begun adding Availability Zones to its...",
"about": [
{
"readLink": "https:\/\/api.cognitive.microsoft.com\/api\/v7\/entities\/a093e9b...",
"name": "Microsoft"
},
{
"readLink": "https:\/\/api.cognitive.microsoft.com\/api\/v7\/entities\/cf3abf7d-e379-...",
"name": "Windows Azure"
},
{
"readLink": "https:\/\/api.cognitive.microsoft.com\/api\/v7\/entities\/9cdd061c-1fae-d0...",
"name": "Cloud"
}
],
"provider": [
{
"_type": "Organization",
"name": "Contoso"
}
],
"datePublished": "2017-09-21T09:01:00.0000000Z",
"category": "ScienceAndTechnology"
}
]
}