Szybki start: wyszukiwanie wideo przy użyciu interfejsu API REST wyszukiwania wideo Bing i języka C#

Ostrzeżenie

30 października 2020 r. interfejsy API Wyszukiwanie Bing zostały przeniesione z usług Azure AI do usług Wyszukiwanie Bing Services. Ta dokumentacja jest udostępniana tylko do celów referencyjnych. Aby uzyskać zaktualizowaną dokumentację, zobacz dokumentację interfejsu API wyszukiwania Bing. Aby uzyskać instrukcje dotyczące tworzenia nowych zasobów platformy Azure na potrzeby wyszukiwania Bing, zobacz Tworzenie zasobu Wyszukiwanie Bing za pośrednictwem Azure Marketplace.

Skorzystaj z tego przewodnika Szybki start, aby wykonać pierwsze wywołanie interfejsu API wyszukiwania wideo Bing. Ta prosta aplikacja w języku C# wysyła zapytanie wyszukiwania wideo HTTP do interfejsu API i wyświetla odpowiedź w formacie JSON. Mimo że ta aplikacja jest napisana w języku C#, interfejs API jest usługą internetową zgodną ze standardem RESTful z większością języków programowania.

Kod źródłowy dla tego przykładu jest dostępny w serwisie GitHub wraz z dodatkową obsługą błędów, funkcjami i adnotacjami kodu.

Wymagania wstępne

Musisz skonfigurować maszynę do uruchamiania platformy .NET Core. Instrukcje instalacji można znaleźć na stronie Pliki do pobrania platformy .NET Core . Tę aplikację można uruchomić w systemach Windows, Linux, macOS lub w kontenerze platformy Docker. Musisz zainstalować ulubiony edytor kodu. Poniższe opisy używają Visual Studio Code, który jest edytorem open source dla wielu platform. Można jednak użyć dowolnych narzędzi, z których korzystasz.

Tworzenie zasobu platformy Azure

Zacznij korzystać z interfejsu API wyszukiwania wideo Bing, tworząc jeden z następujących zasobów platformy Azure:

zasób Wyszukiwanie Bing w wersji 7

  • Dostępne za pośrednictwem Azure Portal do momentu usunięcia zasobu.
  • Użyj warstwy cenowej Bezpłatna, aby wypróbować usługę, a następnie uaktualnij ją do warstwy płatnej dla środowiska produkcyjnego.

Zasób z wieloma usługami

  • Dostępne za pośrednictwem Azure Portal do momentu usunięcia zasobu.
  • Użyj tego samego klucza i punktu końcowego dla aplikacji w wielu usługach azure AI.

Tworzenie i inicjowanie projektu

Pierwszym krokiem jest utworzenie nowej aplikacji. Otwórz wiersz polecenia i utwórz nowy katalog dla aplikacji. Ustaw bieżący katalog. Wprowadź następujące polecenie w oknie konsoli:

dotnet new console --name VideoSearchClient

W górnej części metody Main należy dodać następującą using dyrektywę, aby kompilator języka C# rozpoznawał typy Task i JSON:

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

Dodaj zmienne dla klucza subskrypcji, punktu końcowego i terminu wyszukiwania. uriBase Dla wartości można użyć globalnego punktu końcowego w poniższym kodzie lub użyć niestandardowego punktu końcowego poddomeny wyświetlanego w Azure Portal dla zasobu.

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

Następnie zaktualizuj metodę Main, aby można było użyć metod asynchronicznych. Dodaj modyfikator asynchroniczny i zmień typ powrotu na Task.

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

Teraz masz program, który nic nie robi, ale robi to asynchronicznie. Poprawmy to.

Tworzenie struktury danych do przechowywania odpowiedzi interfejsu API wyszukiwania wideo Bing

Zdefiniuj klasę SearchResult i Video zawierającą wyniki wyszukiwania wideo. Później możesz dodać więcej właściwości, gdy potrzebujesz innych pól z wyniku 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; }
}

Tworzenie i obsługa żądania wyszukiwania wideo

Służymy HttpClient do wykonywania wywołania interfejsu API. Najpierw musimy dodać nagłówek Ocp-Apim-Subscription-Key i klucz dostępu.

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

Skonstruuj identyfikator URI dla żądania wyszukiwania. Sformatuj termin _searchTerm wyszukiwania przed dołączeniem go do ciągu.

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

Przetwarzanie wyniku

Gdy odpowiedź zakończyła się pomyślnie, możemy przetworzyć dane JSON. Deserializujemy ciąg JSON do SearchResult utworzonego wcześniej ciągu. Przejmij pętlę do wyniku (jeśli istnieje) i wyświetl wynik w konsoli.

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();
    }
}

Przykładowa odpowiedź JSON

Po pomyślnym przetworzeniu żądania zostanie zwrócona odpowiedź w formacie JSON, jak pokazano w następującym przykładzie:

{
    "_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=..."
            }
        },
        . . .
    ]
}

Następne kroki

Zobacz też

Co to jest interfejs API wyszukiwania wideo Bing?