Краткое руководство. Поиск изображений с помощью REST API Bing для поиска изображений и C#Quickstart: Search for images using the Bing Image Search REST API and C#

В этом кратком руководстве описано, как отправлять поисковые запросы к API Поиска изображений Bing.Use this quickstart to start sending search requests to the Bing Image Search API. Это приложение на C# отправляет поисковый запрос к API и отображает URL-адрес первого возвращенного в результатах изображения.This C# application sends a search query to the API, and displays the URL of the first image in the results. Хотя это приложение создается на языке C#, API представляет собой веб-службу RESTful, совместимую с большинством языков программирования.While this application is written in C#, the API is a RESTful web service compatible with most programming languages.

Исходный код, используемый в данном примере, вместе с дополнительной обработкой ошибок и аннотациями можно получить на GitHub.The source code for this sample is available on GitHub with additional error handling and annotations.

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

Необходимо иметь учетную запись API Cognitive Services с доступом к API-интерфейсам поиска Bing.You must have a Cognitive Services API account with access to the Bing Search APIs. Если у вас нет подписки Azure, создайте бесплатную учетную запись.If you don't have an Azure subscription, you can create an account for free. Перед тем как продолжить, потребуется ключ доступа, предоставляемый после активации бесплатной пробной версии или ключ платной подписки, указанный на панели мониторинга Azure.Before continuing, You will need the access key provided after activating your free trial, or a paid subscription key from your Azure dashboard.

Создание и инициализация проектаCreate and initialize a project

  1. Создайте консольное решение BingSearchApisQuickStart в Visual Studio.create a new console solution named BingSearchApisQuickStart in Visual Studio. Затем добавьте следующие пространства имен в основной файл кода.Then add the following namespaces into the main code file.

    using System;
    using System.Net;
    using System.IO;
    using System.Collections.Generic;
    using Newtonsoft.Json.Linq;
    
  2. Создайте переменные для конечной точки API, ключ подписки и условие поиска.Create variables for the API endpoint, your subscription key, and search term.

    //...
    namespace BingSearchApisQuickstart
    {
        class Program
        {
        // Replace the this string with your valid access key.
        const string subscriptionKey = "enter your key here";
        const string uriBase = "https://api.cognitive.microsoft.com/bing/v7.0/images/search";
        const string searchTerm = "tropical ocean";
    //...
    

Создание структуры для форматирования ответа API Bing для поиска изображенийCreate a struct to format the Bing Image Search response

Определите структуру SearchResult, которая будет содержать результаты поиска изображения и сведения о заголовке JSON.Define a SearchResult struct to contain the image search results, and JSON header information.

    namespace BingSearchApisQuickstart
    {
        class Program
        {
        //...
            struct SearchResult
            {
                public String jsonResult;
                public Dictionary<String, String> relevantHeaders;
            }
//...

Создание метода для отправки поисковых запросовCreate a method to send search requests

Создайте метод BingImageSearch для выполнения вызовов к API и установите структуру SearchResult, созданную ранее, в качестве возвращаемого типа.Create a method named BingImageSearch to perform the call to the API, and set the return type to the SearchResult struct created earlier.

//...
namespace BingSearchApisQuickstart
{
    //...
    class Program
    {
        //...
        static SearchResult BingImageSearch(string searchTerm)
        {
        }
//...

Создание и обработка запроса на поиск изображенияCreate and handle an image search request

В методе BingImageSearch выполните следующие действия.In the BingImageSearch method, perform the following steps.

  1. Создайте URI для поискового запроса.Construct the URI for the search request. Условие поиска SearchTerm нужно отформатировать перед добавлением к строке.The search term SearchTerm must be formatted before being appended to the string.

    static SearchResult BingImageSearch(string SearchTerm){
    
        var uriQuery = uriBase + "?q=" + Uri.EscapeDataString(SearchTerm);
    //...
    
  2. Отправьте веб-запрос и получите ответ в виде строки JSON.Send the web request and get the response as a JSON string.

    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();
    
  3. Создайте объект результата поиска и извлеките заголовки HTTP Bing.Create the search result object, and extract the Bing HTTP headers. Затем возвратите searchResult.Then return 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;
    

Обработка и просмотр ответаProcess and view the response

  1. В методе main вызовите BingImageSearch() и сохраните возвращенный ответ.In the main method, call BingImageSearch() and store the returned response. Затем десериализируйте JSON в объект.Then deserialize the JSON into an object.

    SearchResult result = BingImageSearch(searchTerm);
    //deserialize the JSON response from the Bing Image Search API
    dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(result.jsonResult);
    
  2. Получите первое возвращенное изображение из jsonObj, выведите заголовок и URL-адрес изображения.Get the first returned image from jsonObj, and print out the title and a URL to the image.

    var firstJsonObj = jsonObj["value"][0];
    Console.WriteLine("Title for the first image result: " + firstJsonObj["name"]+"\n");
    //After running the application, copy the output URL into a browser to see the image.
    Console.WriteLine("URL for the first image result: " + firstJsonObj["webSearchUrl"]+"\n");
    

Пример ответа в формате JSONExample JSON response

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

{
"_type":"Images",
"instrumentation":{
    "_type":"ResponseInstrumentation"
},
"readLink":"images\/search?q=tropical ocean",
"webSearchUrl":"https:\/\/www.bing.com\/images\/search?q=tropical ocean&FORM=OIIARP",
"totalEstimatedMatches":842,
"nextOffset":47,
"value":[
    {
        "webSearchUrl":"https:\/\/www.bing.com\/images\/search?view=detailv2&FORM=OIIRPO&q=tropical+ocean&id=8607ACDACB243BDEA7E1EF78127DA931E680E3A5&simid=608027248313960152",
        "name":"My Life in the Ocean | The greatest WordPress.com site in ...",
        "thumbnailUrl":"https:\/\/tse3.mm.bing.net\/th?id=OIP.fmwSKKmKpmZtJiBDps1kLAHaEo&pid=Api",
        "datePublished":"2017-11-03T08:51:00.0000000Z",
        "contentUrl":"https:\/\/mylifeintheocean.files.wordpress.com\/2012\/11\/tropical-ocean-wallpaper-1920x12003.jpg",
        "hostPageUrl":"https:\/\/mylifeintheocean.wordpress.com\/",
        "contentSize":"897388 B",
        "encodingFormat":"jpeg",
        "hostPageDisplayUrl":"https:\/\/mylifeintheocean.wordpress.com",
        "width":1920,
        "height":1200,
        "thumbnail":{
        "width":474,
        "height":296
        },
        "imageInsightsToken":"ccid_fmwSKKmK*mid_8607ACDACB243BDEA7E1EF78127DA931E680E3A5*simid_608027248313960152*thid_OIP.fmwSKKmKpmZtJiBDps1kLAHaEo",
        "insightsMetadata":{
        "recipeSourcesCount":0,
        "bestRepresentativeQuery":{
            "text":"Tropical Beaches Desktop Wallpaper",
            "displayText":"Tropical Beaches Desktop Wallpaper",
            "webSearchUrl":"https:\/\/www.bing.com\/images\/search?q=Tropical+Beaches+Desktop+Wallpaper&id=8607ACDACB243BDEA7E1EF78127DA931E680E3A5&FORM=IDBQDM"
        },
        "pagesIncludingCount":115,
        "availableSizesCount":44
        },
        "imageId":"8607ACDACB243BDEA7E1EF78127DA931E680E3A5",
        "accentColor":"0050B2"
    }]
}

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

См. такжеSee also