Как разобрать ответ PostAsync от Bing 2 API на С#?

Bing выпустил новую версию (2) своего API поиска несколько месяцев назад. MS Cognitive Services предоставляет примеры использования своего нового Search API 2.
https://dev.cognitive.microsoft.com/docs/services/56b43f0ccf5ff8098cef3808/operations/571fab09dbe2d933e891028f

Однако рабочие примеры имеют ответы XML, и есть только частичный пример C#, который выполняет вызов, но не декодирует результат.

Может ли кто-нибудь объяснить или продолжить пример кода, чтобы проанализировать возвращенный объект в фактические изображения или URL-адреса изображений? В приведенном ниже коде переменная content имеет тип ByteArrayContent, но что требуется для получения информации из этого массива? Переменная «ответ» имеет тип HttpResponseMessage, но как извлечь из нее изображения или URL-адреса изображений?

Это позволит приложению выбирать и отображать одно или несколько возвращаемых изображений.

Большое спасибо, Тим

Вот пример кода C#:

using System;
using System.Net.Http.Headers;
using System.Text;
using System.Net.Http;
using System.Web;

namespace CSHttpClientSample
{
    static class Program
    {
        static void Main()
        {
            MakeRequest();
            Console.WriteLine("Hit ENTER to exit...");
            Console.ReadLine();
        }

        static async void MakeRequest()
        {
            var client = new HttpClient();
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            // Request headers
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", 
            "{subscription key}");

            // Request parameters
            queryString["q"] = "cats";
            var uri = 
                "https://api.cognitive.microsoft.com/bing/v5.0/images/search?" 
                + queryString;

            HttpResponseMessage response;

            // Request body
            byte[] byteData = Encoding.UTF8.GetBytes("{body}");

            using (var content = new ByteArrayContent(byteData))
            {
               content.Headers.ContentType = new MediaTypeHeaderValue(
               "< your content type, i.e. application/json >");
               response = await client.PostAsync(uri, content);
            }

        }
    }
}   

person Tim Peara    schedule 12.05.2017    source источник


Ответы (2)


После некоторых проб и ошибок я обнаружил, что вставка следующего кода преобразует поисковый «ответ» сначала в строку, а затем в объект JSON, который можно проанализировать для различных результатов поиска Bing.

using Newtonsoft.Json;
....
....
response = await client.PostAsync(uri, content);

if (response.IsSuccessStatusCode)
{
    Stringr str = await response.Content.ReadAsStringAsync();

    dynamic json = JsonConvert.DeserializeObject(str);
}
person Tim Peara    schedule 25.05.2017

Здесь действительно простой в использовании клиентский API для API поиска bing, вы можете получить веб-поиск, изображения , новости... от него тоже. Вот небольшой пример того, как использовать его для получения изображений из поиска Bing на C#.

    SearchResult result = await BingSearchHelper.Query("Bill Gates", new BingQueryParameters( apiKey: "APPKEY", count: 10, offset: 0, mkt: "en-us", safeSearch: "Moderate") );

Console.WriteLine(result.images.value[0].thumbnailUrl);

Вам не нужно преобразование JSON или XML, если вы будете использовать его только для этой цели. Я надеюсь, что это поможет вам.

person Damien Doumer    schedule 25.05.2017