Mulai cepat: Mencari gambar menggunakan Bing Image Search REST API dan C

Peringatan

Bing Search API berpindah dari Cognitive Services ke Bing Search Services. Mulai 30 Oktober 2020, setiap instans baru Bing Search perlu diprovisikan dengan mengikuti proses yang didokumentasikan di sini. Bing Search API yang diprovisikan menggunakan Cognitive Services akan didukung selama tiga tahun ke depan atau hingga akhir Perjanjian Enterprise Anda, mana saja yang lebih dulu. Untuk mengetahui petunjuk migrasi, lihat Bing Search Services.

Gunakan mulai cepat ini untuk mempelajari cara mengirim permintaan pencarian ke Bing Image Search API. Aplikasi C# ini mengirimkan kueri pencarian ke API, dan menampilkan URL gambar pertama dalam hasil. Meskipun aplikasi ini ditulis dalam C#, API adalah layanan web RESTful yang kompatibel dengan sebagian besar bahasa pemrograman.

Kode sumber untuk sampel ini tersedia di GitHub dengan penanganan kesalahan tambahan dan anotasi.

Prasyarat

Membuat grup sumber daya Azure

Mulai gunakan Bing Image Search API dengan membuat salah satu sumber daya Azure berikut.

Sumber daya Bing Search v7

  • Tersedia melalui portal Microsoft Azure hingga Anda menghapus sumber daya.
  • Gunakan tingkat harga gratis untuk mencoba layanan, dan tingkatkan ke tingkat berbayar untuk produksi di kemudian hari.

Sumber daya multi-layanan

  • Tersedia melalui portal Microsoft Azure hingga Anda menghapus sumber daya.
  • Gunakan kunci dan titik akhir yang sama untuk aplikasi Anda, di beberapa Cognitive Services.

Membuat dan menginisialisasi proyek

  1. Buat solusi konsol baru bernama BingSearchApisQuickStart di Visual Studio. Kemudian, tambahkan namespace layanan berikut ke file kode utama:

    using System;
    using System.Net;
    using System.IO;
    using System.Collections.Generic;
    using Newtonsoft.Json.Linq;
    
  2. Buat variabel untuk titik akhir API, kunci langganan Anda, dan istilah pencarian. Untuk uriBase, Anda dapat menggunakan titik akhir global dalam kode berikut, atau menggunakan titik akhir subdomain kustom yang ditampilkan di portal Azure untuk sumber daya Anda.

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

Membuat struct untuk memformat respons Bing Image Search

Tentukan struct SearchResult agar berisi hasil pencarian gambar dan informasi header JSON.

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

Membuat metode untuk mengirim permintaan pencarian

Buat metode bernama BingImageSearch untuk melakukan panggilan ke API, dan atur jenis pengembalian ke struct SearchResult yang dibuat sebelumnya.

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

Membuat dan menangani permintaan pencarian gambar

Dalam metode BingImageSearch ini, lakukan langkah-langkah berikut:

  1. Buat URI untuk permintaan pencarian. Format istilah pencarian SearchTerm sebelum Anda menambahkannya ke string.

    static SearchResult BingImageSearch(string SearchTerm){
    
        var uriQuery = uriBase + "?q=" + Uri.EscapeDataString(SearchTerm);
    //...
    
  2. Kirim permintaan web dan dapatkan respons sebagai string JSON.

    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. Buat objek hasil pencarian dan ekstrak header HTTP Bing. Kemudian, kembalikan 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;
    

Memproses dan melihat respons

  1. Dalam metode utama, panggil BingImageSearch() dan simpan respons yang dikembalikan. Kemudian, deserialisasi JSON menjadi objek.

    SearchResult result = BingImageSearch(searchTerm);
    //deserialize the JSON response from the Bing Image Search API
    dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(result.jsonResult);
    
  2. Dapatkan gambar pertama yang dikembalikan dari jsonObj, dan cetak judul dan URL ke gambar.

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

Contoh respons JSON

Respons dari Bing Image Search API ditampilkan sebagai JSON. Respons sampel ini telah dipotong untuk menampilkan satu hasil.

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

Langkah berikutnya

Lihat juga