Partilhar via


Guia de início rápido: pesquisar notícias usando C# e a API REST de Pesquisa de Notícias do Bing

Advertência

Em 30 de outubro de 2020, as APIs de Pesquisa do Bing foram movidas 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 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 através do Azure Marketplace.

Use este início rápido para fazer sua primeira chamada para a API de 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 este 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 deste exemplo pode ser encontrado no GitHub.

Pré-requisitos

Criar um recurso do Azure

Comece a usar a API de Pesquisa de Notícias do Bing criando um dos seguintes recursos do Azure:

Recurso Pesquisa do Bing v7

  • Disponível através do portal do Azure até eliminar o recurso.
  • Use o nível de preço gratuito para experimentar o serviço e atualize mais tarde para um nível pago para produção.

Recurso multisserviços

  • Disponível através do portal do Azure até eliminar o recurso.
  • Use a mesma chave e ponto de extremidade para seus aplicativos, em vários serviços de IA do Azure.

Criar e inicializar um projeto

  1. Crie uma nova solução de console C# no Visual Studio. Em seguida, 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;
    
  2. Crie variáveis para o ponto de extremidade da API, sua chave de assinatura e termo de pesquisa. Você pode usar o endpoint global no código abaixo ou usar o endpoint do subdomínio personalizado mostrado 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 uma estrutura para formatar a resposta da Pesquisa de Notícias do Bing

Defina uma SearchResult struct para conter os resultados da pesquisa de notícias e as informações do cabeçalho JSON.

struct SearchResult
{
    public String jsonResult;
    public Dictionary<String, String> relevantHeaders;
}

Criar e tratar um pedido de pesquisa de notícias

  1. Crie um método chamado BingNewsSearch() para chamar a API e defina o tipo de retorno para o SearchResult struct criado anteriormente.

    Adicione código a esse método nas etapas a seguir.

  2. Construa o URI para a solicitação de pesquisa. O toSearch termo de pesquisa deve ser formatado antes de ser anexado à cadeia de caracteres.

    static SearchResult BingNewsSearch(string toSearch){
    
        var uriQuery = uriBase + "?q=" + Uri.EscapeDataString(toSearch);
    //...
    
  3. 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();
    
  4. Crie o objeto de resultado da 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 onde 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])

Exemplo de resposta JSON

Uma resposta bem-sucedida é retornada em JSON, conforme mostrado no exemplo a seguir:

{
   "_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"
      }
   ]
}

Próximos passos