Mulai cepat: Mencari gambar menggunakan Bing Image Search REST API dan C #
Peringatan
Pada 30 Oktober 2020, API Bing Search dipindahkan dari layanan Azure AI ke Bing Search Services. Dokumentasi ini disediakan hanya untuk referensi. Untuk dokumentasi terbaru, lihat dokumentasi Bing Search API. Untuk petunjuk tentang cara membuat sumber daya Azure baru untuk pencarian Bing, lihat Membuat sumber daya Pencarian Bing melalui Marketplace Azure.
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.
Prasyarat
- Semua edisi Visual Studio 2017 atau yang lebih baru.
- Kerangka kerja Json.NET, tersedia sebagai paket NuGet.
- Jika Anda menggunakan Linux/MacOS, aplikasi ini dapat dijalankan menggunakan Mono.
Membuat dan menginisialisasi proyek
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;
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:
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); //...
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();
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
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);
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"
}]
}