Поделиться через


Быстрый старт: поиск видео с использованием Bing Video Search REST API и C#

Предупреждение

30 октября 2020 г. API поиска Bing перемещены из служб ИИ Azure в службы поиска Bing. Эта документация предоставляется только для справки. Для получения обновленной документации см. документацию по API поиска Bing. Инструкции по созданию ресурсов Azure для поиска Bing см. в статье "Создание ресурса поиска Bing" с помощью Azure Marketplace.

Используйте это краткое руководство, чтобы выполнить первый вызов API Bing для поиска видео. Это простое приложение C# отправляет запрос поиска видео HTTP в API и отображает ответ JSON. Хотя это приложение написано на C#, API — это веб-служба RESTful, совместимая с большинством языков программирования.

Исходный код для этого примера доступен на сайте GitHub с дополнительной обработкой ошибок, функциями и заметками кода.

Предпосылки

Вам потребуется настроить компьютер для запуска .NET Core. Инструкции по установке можно найти на странице загрузки .NET Core . Это приложение можно запустить в Windows, Linux, macOS или в контейнере Docker. Вам потребуется установить любимый редактор кода. В приведенных ниже описаниях используется Visual Studio Code, который является открытым исходным кодом, кроссплатформенным редактором. Однако вы можете использовать все инструменты, с которыми вы комфортно.

Создание ресурса Azure

Начните использовать API поиска видео Bing, создав один из следующих ресурсов Azure:

Ресурс Bing Search версии 7

  • Доступен на портале Azure до тех пор, пока вы не удалите ресурс.
  • Используйте бесплатный тарифный план, чтобы попробовать услугу, и перейдите на платный тариф для использования в работе.

Ресурс с несколькими службами

  • Доступен на портале Azure до тех пор, пока вы не удалите ресурс.
  • Используйте один и тот же ключ и конечную точку для приложений в нескольких службах ИИ Azure.

Создание и инициализация проекта

Первым шагом является создание нового приложения. Откройте командную строку и создайте новый каталог для приложения. Сделайте этот каталог текущим. Введите следующую команду в окне консоли:

dotnet new console --name VideoSearchClient

В верхней части метода Main необходимо добавить следующую using директиву, чтобы компилятор C# распознал типы задач и JSON:

using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Text.Json;
using System.Text.Json.Serialization;

Добавьте переменные для ключа подписки, конечной точки и термина поиска. uriBase Для значения можно использовать глобальную конечную точку в следующем коде или использовать пользовательскую конечную точку поддомена, отображаемую на портале Azure для ресурса.

// Replace the accessKey string value with your valid access key.
const string _accessKey = "enter your key here";

// Or use the custom subdomain endpoint displayed in the Azure portal for your resource.
const string _uriBase = "https://api.cognitive.microsoft.com/bing/v7.0/videos/search";

const string _searchTerm = "kittens";

Затем обновите метод Main, чтобы использовать асинхронные методы. Добавьте асинхронный модификатор и измените возвращаемый тип на Task.

static async Task Main(string[] args)
{
    
}

Теперь у вас есть программа, которая ничего не делает, но делает это асинхронно. Давайте улучшаем его.

Создание структуры данных для хранения ответа API поиска видео Bing

Определите SearchResult и Video класс, чтобы содержать результаты поиска видео. Вы можете добавить дополнительные свойства позже, если вам нужны другие поля из результата JSON.

class SearchResult
{
    [JsonPropertyName("totalEstimatedMatches")]
    public int TotalEstimatedMatches { get; set; }

    [JsonPropertyName("value")]
    public List<Video> Videos { get; set; }
}

class Video
{
    [JsonPropertyName("name")]
    public string Name { get; set; }

    [JsonPropertyName("description")]
    public string Description { get; set; }

    [JsonPropertyName("thumbnailUrl")]
    public string ThumbnailUrl { get; set; }

    [JsonPropertyName("contentUrl")]
    public string ContentUrl { get; set; }
}

Создание и обработка запроса поиска видео

Мы используем HttpClient для вызова API. Сначала необходимо добавить заголовок Ocp-Apim-Subscription-Key и ключ доступа.

using var client = new HttpClient();
client.BaseAddress = new Uri(_uriBase);
client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", _accessKey);

Создайте универсальный код ресурса (URI) для запроса поиска. Отформатируйте термин _searchTerm поиска перед добавлением его в строку.

var response = await client.GetAsync($"?q={Uri.EscapeDataString(_searchTerm)}");

Обработка результата

После успешного выполнения ответа можно обработать данные JSON. Мы десериализуем строку JSON в наш SearchResult, созданный ранее. Создайте цикл для получения результата (если есть) и выведите результат на консоль.

if (response.IsSuccessStatusCode)
{
    var json = await response.Content.ReadAsStringAsync();
    var result = JsonSerializer.Deserialize<SearchResult>(json);

    foreach (var video in result.Videos)
    {
        Console.WriteLine($"Name: {video.Name}");
        Console.WriteLine($"ContentUrl: {video.ContentUrl}");
        Console.WriteLine();
    }
}

Пример ответа JSON

Успешный ответ возвращается в формате JSON, как показано в следующем примере:

{
    "_type": "Videos",
    "instrumentation": {},
    "readLink": "https://api.cognitive.microsoft.com/api/v7/videos/search?q=kittens",
    "webSearchUrl": "https://www.bing.com/videos/search?q=kittens",
    "totalEstimatedMatches": 1000,
    "value": [
        {
            "webSearchUrl": "https://www.bing.com/videos/search?q=kittens&view=...",
            "name": "Top 10 cute kitten videos compilation",
            "description": "HELP HOMELESS ANIMALS AND WIN A PRIZE BY CHOOSING...",
            "thumbnailUrl": "https://tse4.mm.bing.net/th?id=OVP.n1aE_Oikl4MtzBb...",
            "datePublished": "2014-11-12T22:47:36.0000000",
            "publisher": [
                {
                    "name": "Fabrikam"
                }
            ],
            "creator": {
                "name": "Marcus Appel"
            },
            "isAccessibleForFree": true,
            "contentUrl": "https://www.fabrikam.com/watch?v=8HVWitAW-Qg",
            "hostPageUrl": "https://www.fabrikam.com/watch?v=8HVWitAW-Qg",
            "encodingFormat": "h264",
            "hostPageDisplayUrl": "https://www.fabrikam.com/watch?v=8HVWitAW-Qg",
            "width": 480,
            "height": 360,
            "duration": "PT3M52S",
            "motionThumbnailUrl": "https://tse4.mm.bing.net/th?id=OM.j4QyJAENJphdZQ_1501386166&pid=Api",
            "embedHtml": "<iframe width=\"1280\" height=\"720\" src=\"https://www.fabrikam.com/embed/8HVWitAW-Qg?autoplay=1\" frameborder=\"0\" allowfullscreen></iframe>",
            "allowHttpsEmbed": true,
            "viewCount": 7513633,
            "thumbnail": {
                "width": 300,
                "height": 168
            },
            "videoId": "655D98260D012432848F6558260D012432848F",
            "allowMobileEmbed": true,
            "isSuperfresh": false
        },
        . . .
    ],
    "nextOffset": 36,
    "queryExpansions": [
        {
            "text": "Kittens Meowing",
            "displayText": "Meowing",
            "webSearchUrl": "https://www.bing.com/videos/search?q=Kittens+Meowing...",
            "searchLink": "https://api.cognitive.microsoft.com/api/v7/videos/search...",
            "thumbnail": {
                "thumbnailUrl": "https://tse3.mm.bing.net/th?q=Kittens+Meowing&pid..."
            }
        },
        {
            "text": "Funny Kittens",
            "displayText": "Funny",
            "webSearchUrl": "https://www.bing.com/videos/search?q=Funny+Kittens...",
            "searchLink": "https://api.cognitive.microsoft.com/api/v7/videos/search...",
            "thumbnail": {
                "thumbnailUrl": "https://tse3.mm.bing.net/th?q=Funny+Kittens&..."
            }
        },
        . . .
    ],
    "pivotSuggestions": [
        {
            "pivot": "kittens",
            "suggestions": [
                {
                    "text": "Cat",
                    "displayText": "Cat",
                    "webSearchUrl": "https://www.bing.com/videos/search?q=Cat...",
                    "searchLink": "https://api.cognitive.microsoft.com/api/v7/videos/search?...",
                    "thumbnail": {
                        "thumbnailUrl": "https://tse3.mm.bing.net/th?q=Cat&pid=Api..."
                    }
                },
                {
                    "text": "Feral Cat",
                    "displayText": "Feral Cat",
                    "webSearchUrl": "https://www.bing.com/videos/search?q=Feral+Cat...",
                    "searchLink": "https://api.cognitive.microsoft.com/api/v7/videos/search...",
                    "thumbnail": {
                        "thumbnailUrl": "https://tse3.mm.bing.net/th?q=Feral+Cat&pid=Api&..."
                    }
                }
            ]
        }
    ],
    "relatedSearches": [
        {
            "text": "Kittens Being Born",
            "displayText": "Kittens Being Born",
            "webSearchUrl": "https://www.bing.com/videos/search?q=Kittens+Being+Born...",
            "searchLink": "https://api.cognitive.microsoft.com/api/v7/videos/search?...",
            "thumbnail": {
                "thumbnailUrl": "https://tse1.mm.bing.net/th?q=Kittens+Being+Born&pid=..."
            }
        },
        . . .
    ]
}

Дальнейшие действия

См. также

Что такое API Bing для поиска видео?