Краткое руководство. Поиск в Интернете с помощью REST API Bing для поиска в Интернете и C#Quickstart: Search the web using the Bing Web Search REST API and C#

Из этого краткого руководства вы узнаете, как вызвать API Bing для поиска в Интернете и получить ответ в формате JSON.Use this quickstart to make your first call to the Bing Web Search API and receive the JSON response. Это приложение C# отправляет поисковый запрос к API и показывает ответ.This C# application sends a search request to the API, and shows the response. Хотя это приложение создается на языке C#, API представляет собой веб-службу RESTful, совместимую с большинством языков программирования.While this application is written in C#, the API is a RESTful Web service compatible with most programming languages.

Предварительные требованияPrerequisites

Для работы с этим кратким руководством вам потребуется следующее:Here are a few things that you'll need before running this quickstart:

В этом примере программы используются только классы .NET Core.This example program only uses .NET Core classes.

Для этого краткого руководства требуется учетная запись API Azure Cognitive Services с API Поиска Bing.This quickstart requires an Azure Cognitive Services account with Bing Search APIs. Если у вас нет учетной записи, можно использовать бесплатную пробную версию, чтобы получить ключ подписки.If you don't have an account, you can use the free trial to get a subscription key.

Создание проекта и объявление зависимостейCreate a project and declare dependencies

Создайте проект в Visual Studio или Mono.Create a new project in Visual Studio or Mono. Выполните этот код, чтобы импортировать требуемые пространства имен и типы.Then use this code to import required namespaces and types.

using System;
using System.Text;
using System.Net;
using System.IO;
using System.Collections.Generic;

Объявление пространства имен и класса для программыDeclare a namespace and class for your program

При работе с этим кратким руководством большую часть кода мы поместим в класс Program.In this quickstart, we'll put most of the code in the Program class. Для начала создайте в проекте пространство имен BingSearchApiQuickstart и класс Program.Start by creating the BingSearchApiQuickstart namespace and Program class in your project.

namespace BingSearchApisQuickstart
{
    class Program
    {
        // The code in the following sections goes here.
    }
}

Определение переменныхDefine variables

Прежде чем продолжить, необходимо задать несколько переменных.A few variables must be set before we can continue. Убедитесь, что значение uriBase указано правильно, и замените значение accessKey действительным ключом подписки из своей учетной записи Azure.Confirm that the uriBase is valid and replace the accessKey value with a valid subscription key from your Azure account. Вы можете настроить поисковый запрос, заменив значение параметра searchTerm.Feel free to customize the search query by replacing the value for searchTerm. Не забудьте добавить этот код в класс Program, как было отмечено выше.Remember to add this code to the Program class as noted above.

// Enter a valid subscription key.
const string accessKey = "enter key here";
/*
 * If you encounter unexpected authorization errors, double-check this value
 * against the endpoint for your Bing Web search instance in your Azure
 * dashboard.
 */
const string uriBase = "https://api.cognitive.microsoft.com/bing/v7.0/search";
const string searchTerm = "Microsoft Cognitive Services";

Объявление метода mainDeclare the Main method

Метод Main() является обязательным. Именно он всегда вызывается первым при запуске программы.The Main() method is required and it's the first method invoked when the program is started. В нашем приложении метод main проверяет accessKey, выполняет запрос и выводит ответ.In this application, the main method validates the accessKey, makes a request, and prints the response.

Не забывайте, что main() зависит от методов, которые создаются в следующих разделах.Keep in mind that main() is dependent on methods that are created in the next few sections.

static void Main()
{
    Console.OutputEncoding = System.Text.Encoding.UTF8;
    if (accessKey.Length == 32)
    {
        Console.WriteLine("Searching the Web for: " + searchTerm);
        SearchResult result = BingWebSearch(searchTerm);
        Console.WriteLine("\nRelevant HTTP Headers:\n");
        foreach (var header in result.relevantHeaders)
            Console.WriteLine(header.Key + ": " + header.Value);

        Console.WriteLine("\nJSON Response:\n");
        Console.WriteLine(JsonPrettyPrint(result.jsonResult));
    }
    else
    {
        Console.WriteLine("Invalid Bing Search API subscription key!");
        Console.WriteLine("Please paste yours into the source code.");
    }
    Console.Write("\nPress Enter to exit ");
    Console.ReadLine();
}

Создание структуры для результатов поискаCreate a struct for search results

Эта структура возвращает результаты поиска с соответствующими заголовками.This struct returns search results with relevant headers. Она вызывается при выполнении запроса к API поиска в Интернете Bing, чтобы создать объект результата.It's called when making a request to the Bing Web Search API to create a result object.

// Returns search results with headers.
struct SearchResult
{
    public String jsonResult;
    public Dictionary<String, String> relevantHeaders;
}

Создание запросаConstruct a request

Используйте этот код, чтобы создать запрос поиска, выполнить запрос GET и обработать ответ.Use this code to construct the search query, perform the GET request, and handle the response.

/// <summary>
/// Makes a request to the Bing Web Search API and returns data as a SearchResult.
/// </summary>
static SearchResult BingWebSearch(string searchQuery)
{
    // Construct the search request URI.
    var uriQuery = uriBase + "?q=" + Uri.EscapeDataString(searchQuery);

    // Perform request and get a response.
    WebRequest request = HttpWebRequest.Create(uriQuery);
    request.Headers["Ocp-Apim-Subscription-Key"] = accessKey;
    HttpWebResponse response = (HttpWebResponse)request.GetResponseAsync().Result;
    string json = new StreamReader(response.GetResponseStream()).ReadToEnd();

    // Create a result object.
    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;
}

Форматирование ответаFormat the response

Этот метод форматирует ответ JSON, например расставляет отступы и добавляет разрывы строк.This method formats the JSON response, primarily indenting and adding line breaks.

/// <summary>
/// Formats the JSON string by adding line breaks and indents.
/// </summary>
/// <param name="json">The raw JSON string.</param>
/// <returns>The formatted JSON string.</returns>
static string JsonPrettyPrint(string json)
{
    if (string.IsNullOrEmpty(json))
        return string.Empty;

    json = json.Replace(Environment.NewLine, "").Replace("\t", "");

    StringBuilder sb = new StringBuilder();
    bool quote = false;
    bool ignore = false;
    char last = ' ';
    int offset = 0;
    int indentLength = 2;

    foreach (char ch in json)
    {
        switch (ch)
        {
            case '"':
                if (!ignore) quote = !quote;
                break;
            case '\\':
                if (quote && last != '\\') ignore = true;
                break;
        }

        if (quote)
        {
            sb.Append(ch);
            if (last == '\\' && ignore) ignore = false;
        }
        else
        {
            switch (ch)
            {
                case '{':
                    case '[':
                        sb.Append(ch);
                        sb.Append(Environment.NewLine);
                        sb.Append(new string(' ', ++offset * indentLength));
                        break;
                    case ']':
                    case '}':
                        sb.Append(Environment.NewLine);
                        sb.Append(new string(' ', --offset * indentLength));
                        sb.Append(ch);
                        break;
                    case ',':
                        sb.Append(ch);
                        sb.Append(Environment.NewLine);
                        sb.Append(new string(' ', offset * indentLength));
                        break;
                    case ':':
                        sb.Append(ch);
                        sb.Append(' ');
                        break;
                    default:
                        if (quote || ch != ' ') sb.Append(ch);
                        break;
            }
        }
        last = ch;
    }
    return sb.ToString().Trim();
}

СборкаPut it all together

А теперь выполните созданный код!The last step is to run your code! Если вы хотите сравнить свой код с нашей версией, см. пример кода на сайте GitHub.If you'd like to compare your code with ours, sample code is available on GitHub.

Пример ответаSample response

Ответы из API Bing для поиска в Интернете возвращаются в формате JSON.Responses from the Bing Web Search API are returned as JSON. Представленный пример сокращен для отображения только одного результата.This sample response has been truncated to show a single result.

{
  "_type": "SearchResponse",
  "queryContext": {
    "originalQuery": "Microsoft Cognitive Services"
  },
  "webPages": {
    "webSearchUrl": "https://www.bing.com/search?q=Microsoft+cognitive+services",
    "totalEstimatedMatches": 22300000,
    "value": [
      {
        "id": "https://api.cognitive.microsoft.com/api/v7/#WebPages.0",
        "name": "Microsoft Cognitive Services",
        "url": "https://www.microsoft.com/cognitive-services",
        "displayUrl": "https://www.microsoft.com/cognitive-services",
        "snippet": "Knock down barriers between you and your ideas. Enable natural and contextual interaction with tools that augment users' experiences via the power of machine-based AI. Plug them in and bring your ideas to life.",
        "deepLinks": [
          {
            "name": "Face API",
            "url": "https://azure.microsoft.com/services/cognitive-services/face/",
            "snippet": "Add facial recognition to your applications to detect, identify, and verify faces using a Face API from Microsoft Azure. ... Cognitive Services; Face API;"
          },
          {
            "name": "Text Analytics",
            "url": "https://azure.microsoft.com/services/cognitive-services/text-analytics/",
            "snippet": "Cognitive Services; Text Analytics API; Text Analytics API . Detect sentiment, ... you agree that Microsoft may store it and use it to improve Microsoft services, ..."
          },
          {
            "name": "Computer Vision API",
            "url": "https://azure.microsoft.com/services/cognitive-services/computer-vision/",
            "snippet": "Extract the data you need from images using optical character recognition and image analytics with Computer Vision APIs from Microsoft Azure."
          },
          {
            "name": "Emotion",
            "url": "https://www.microsoft.com/cognitive-services/en-us/emotion-api",
            "snippet": "Cognitive Services Emotion API - microsoft.com"
          },
          {
            "name": "Bing Speech API",
            "url": "https://azure.microsoft.com/services/cognitive-services/speech/",
            "snippet": "Add speech recognition to your applications, including text to speech, with a speech API from Microsoft Azure. ... Cognitive Services; Bing Speech API;"
          },
          {
            "name": "Get Started for Free",
            "url": "https://azure.microsoft.com/services/cognitive-services/",
            "snippet": "Add vision, speech, language, and knowledge capabilities to your applications using intelligence APIs and SDKs from Cognitive Services."
          }
        ]
      }
    ]
  },
  "relatedSearches": {
    "id": "https://api.cognitive.microsoft.com/api/v7/#RelatedSearches",
    "value": [
      {
        "text": "microsoft bot framework",
        "displayText": "microsoft bot framework",
        "webSearchUrl": "https://www.bing.com/search?q=microsoft+bot+framework"
      },
      {
        "text": "microsoft cognitive services youtube",
        "displayText": "microsoft cognitive services youtube",
        "webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+youtube"
      },
      {
        "text": "microsoft cognitive services search api",
        "displayText": "microsoft cognitive services search api",
        "webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+search+api"
      },
      {
        "text": "microsoft cognitive services news",
        "displayText": "microsoft cognitive services news",
        "webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+news"
      },
      {
        "text": "ms cognitive service",
        "displayText": "ms cognitive service",
        "webSearchUrl": "https://www.bing.com/search?q=ms+cognitive+service"
      },
      {
        "text": "microsoft cognitive services text analytics",
        "displayText": "microsoft cognitive services text analytics",
        "webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+text+analytics"
      },
      {
        "text": "microsoft cognitive services toolkit",
        "displayText": "microsoft cognitive services toolkit",
        "webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+toolkit"
      },
      {
        "text": "microsoft cognitive services api",
        "displayText": "microsoft cognitive services api",
        "webSearchUrl": "https://www.bing.com/search?q=microsoft+cognitive+services+api"
      }
    ]
  },
  "rankingResponse": {
    "mainline": {
      "items": [
        {
          "answerType": "WebPages",
          "resultIndex": 0,
          "value": {
            "id": "https://api.cognitive.microsoft.com/api/v7/#WebPages.0"
          }
        }
      ]
    },
    "sidebar": {
      "items": [
        {
          "answerType": "RelatedSearches",
          "value": {
            "id": "https://api.cognitive.microsoft.com/api/v7/#RelatedSearches"
          }
        }
      ]
    }
  }
}

Дополнительная информацияNext steps

См. такжеSee also