Início Rápido: Pesquisar notícias usando C# e a API REST de Pesquisa de Notícias do Bing
Aviso
Em 30 de outubro de 2020, as APIs de Pesquisa do Bing foram migradas dos serviços de IA do Azure para os Serviços de Pesquisa do Bing. Esta documentação é fornecida apenas para referência. Para obter a documentação atualizada, consulte a documentação da API de pesquisa do Bing. Para obter instruções sobre como criar novos recursos do Azure para a Pesquisa do Bing, consulte Criar um recurso de Pesquisa do Bing por meio do Azure Marketplace.
Use este início rápido para fazer sua primeira chamada à API da Pesquisa de Notícias do Bing. Este aplicativo C# simples envia uma consulta de pesquisa de notícias para a API e exibe a resposta JSON.
Embora esse aplicativo seja escrito em C#, a API é um serviço Web RESTful compatível com a maioria das linguagens de programação.
O código completo dessa amostra pode ser encontrado no GitHub.
Pré-requisitos
- Qualquer edição do Visual Studio 2017 ou posterior.
- A estrutura Json.NET, disponível como um pacote do NuGet.
- Se você estiver usando Linux/MacOS, poderá executar usando o Mono.
Criar um recurso do Azure
Comece usando a API de Pesquisa de Notícias do Bing criando um dos seguintes recursos do Azure:
Recurso de Pesquisa do Bing v7
- Disponível por meio do portal do Azure até que você exclua o recurso.
- Use o tipo de preço gratuito para experimentar o serviço e atualize mais tarde para uma camada paga para produção.
- Disponível por meio do portal do Azure até que você exclua o recurso.
- Use a mesma chave e ponto de extremidade para seus aplicativos nos vários serviços de IA do Azure.
Criar e inicializar um projeto
Crie uma solução de console C# no Visual Studio. Adicione os seguintes namespaces ao arquivo de código principal:
using System; using System.Text; using System.Net; using System.IO; using System.Collections.Generic;
Crie variáveis para o ponto de extremidade de API, sua chave de assinatura e o termo de pesquisa. É possível usar o ponto de extremidade global no código a seguir ou o ponto de extremidade do subdomínio personalizado exibido no portal do Azure para seu recurso.
const string accessKey = "enter key here"; const string uriBase = "https://api.cognitive.microsoft.com/bing/v7.0/news/search"; const string searchTerm = "Microsoft";
Criar um struct para formatar a resposta da Pesquisa de Notícias do Bing
Defina um struct SearchResult
para conter os resultados da pesquisa de notícias e as informações de cabeçalho do JSON.
struct SearchResult
{
public String jsonResult;
public Dictionary<String, String> relevantHeaders;
}
Criar e manipular uma solicitação de pesquisa de notícias
Crie um método chamado
BingNewsSearch()
para chamar a API e defina o tipo de retorno como o structSearchResult
criado anteriormente.Adicione código a esse método nas etapas a seguir.
Construa o URI para a solicitação de pesquisa. O termo de pesquisa
toSearch
deve ser formatado antes de ser acrescentado à cadeia de caracteres.static SearchResult BingNewsSearch(string toSearch){ var uriQuery = uriBase + "?q=" + Uri.EscapeDataString(toSearch); //...
Execute a solicitação da Web e obtenha a resposta como uma cadeia de caracteres 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();
Crie o objeto de resultado de pesquisa e extraia os cabeçalhos HTTP do Bing. Em seguida, retorne
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;
Processar a resposta
No método principal, chame BingNewsSearch()
e armazene a resposta retornada. Em seguida, desserialize o JSON em um objeto em que você pode exibir os valores da resposta.
SearchResult result = BingNewsSearch(searchTerm);
//deserialize the JSON response
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(result.jsonResult);
Console.WriteLine(jsonObj["value"][0])
Resposta JSON de exemplo
Uma resposta com êxito é retornada em JSON, conforme mostrado no seguinte exemplo:
{
"_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"
}
]
}