Rychlý start: Použití jazyka C# k volání rozhraní API Bingu pro vyhledávání na webuQuickstart: Use C# to call the Bing Web Search API

V tomto rychlém startu poprvé zavoláte rozhraní API Bingu pro vyhledávání na webu a dostanete odpověď ve formátu JSON.Use this quickstart to make your first call to the Bing Web Search API and receive a JSON response.

K tomuto rychlému startu potřebujete účet služby Azure Cognitive Services s rozhraními API pro vyhledávání Bingu.This quickstart requires an Azure Cognitive Services account with Bing Search APIs. Pokud účet nemáte, můžete k získání klíče předplatného použít bezplatnou zkušební verzi.If you don't have an account, you can use the free trial to get a subscription key.

PožadavkyPrerequisites

Tady je pár věcí, které budete na začátku tohoto rychlého startu potřebovat:Here are a few things that you'll need before running this quickstart:

V tomto ukázkovém programu jsou použité jenom třídy .NET Core.This example program only uses .NET Core classes.

Vytvoření projektu a deklarace závislostíCreate a project and declare dependencies

V sadě Visual Studio nebo Mono vytvořte nový projekt.Create a new project in Visual Studio or Mono. Pak použijte tento kód k importu potřebných oborů názvů a typů.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;

Deklarace oboru názvů a třídy programuDeclare a namespace and class for your program

V tomto rychlém startu dáme většinu kódu do třídy Program.In this quickstart, we'll put most of the code in the Program class. Začněte v projektu vytvářet obor názvů BingSearchApiQuickstart a třídu 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.
    }
}

Definování proměnnýchDefine variables

Abychom mohli pokračovat, musíme nastavit několik proměnných.A few variables must be set before we can continue. Ověřte, že hodnota uriBase je platná a nahraďte hodnotu accessKey platným klíčem předplatného ze svého účtu Azure.Confirm that the uriBase is valid and replace the accessKey value with a valid subscription key from your Azure account. Vyhledávací dotaz můžete přizpůsobit. Stačí místo searchTerm zadat jinou hodnotu.Feel free to customize the search query by replacing the value for searchTerm.

// 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";

Deklarace hlavní metodyDeclare the Main method

Metoda Main() je povinná. Při spuštění programu se volá jako první.The Main() is required and it's the first method invoked when the program is started. V této aplikaci hlavní metoda ověří accessKey, vytvoří požadavek a vytiskne odpověď.In this application, the main method validates the accessKey, makes a request, and prints the response.

Nezapomeňte, že metoda main() závisí na metodách vytvořených v následujících několika oddílech.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();
}

Vytvoření struktury výsledků hledáníCreate a struct for search results

Tato struktura vrátí výsledky hledání s příslušnými hlavičkami.This struct returns search results with relevant headers. Volá se při vytvoření požadavku do rozhraní API Bingu pro vyhledávání na webu kvůli vytvoření výsledného objektu.It is 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;
}

Vytvoření požadavkuConstruct a request

Tento kód použijte k vytvoření vyhledávacího dotazu, provedení požadavku GET a zpracování odpovědi.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;
}

Formátování odpovědiFormat the response

Tato metoda naformátuje odpověď JSON, především doplní odsazení a přidá konce řádků.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();
}

Spojení všech součástí dohromadyPut it all together

Posledním krokem je spuštění kódu.The last step is to run your code! Pokud chcete porovnat svůj kód s naším, najdete ukázkový kód na GitHubu.If you'd like to compare your code with ours, sample code is available on GitHub.

Ukázková odpověďSample response

Odpovědi rozhraní API Bingu pro vyhledávání na webu se vrátí jako objekt JSON.Responses from the Bing Web Search API are returned as JSON. Ukázková odpověď je zkrácená, aby zobrazovala jenom jeden výsledek.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"
          }
        }
      ]
    }
  }
}

Další krokyNext steps

Viz takéSee also