Inicio rápido: Búsqueda de imágenes con la API de REST Bing Image Search y C#
Advertencia
El 30 de octubre de 2020, las API de Bing Search se trasladaron de los servicios de Azure AI a los servicios de Bing Search. Esta documentación se proporciona solo como referencia. Para obtener documentación actualizada, consulte la documentación de Bing Search API. Para obtener instrucciones sobre cómo crear nuevos recursos de Azure para Bing Search, consulte el artículo sobre la creación de un recurso de Bing Search a través de Azure Marketplace.
Utilice este inicio rápido para aprender cómo enviar solicitudes de búsqueda a la API Bing Image Search. Esta aplicación de C# envía una consulta de búsqueda a la API y muestra la dirección URL de la primera imagen de los resultados. Aunque esta aplicación está escrita en C#, la API es un servicio web RESTful compatible con la mayoría de los lenguajes de programación.
Prerrequisitos
- Cualquier edición de Visual Studio 2017 o versiones posteriores.
- El marco Json.NET, disponible como un paquete NuGet.
- Si usa Linux o MacOS, esta aplicación puede ejecutarse con Mono.
Creación e inicialización de un proyecto
Cree una solución de consola denominada
BingSearchApisQuickStart
en Visual Studio. A continuación, agregue los siguientes espacios de nombres al archivo de código principal:using System; using System.Net; using System.IO; using System.Collections.Generic; using Newtonsoft.Json.Linq;
Cree variables para el punto de conexión de la API, la clave de suscripción y el término de búsqueda. Para
uriBase
puede usar el punto de conexión global en el código siguiente, o el punto de conexión del subdominio personalizado que se muestra en Azure Portal para el recurso.//... 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"; //...
Creación de una estructura para dar formato a la respuesta de Bing Image Search
Defina una estructura SearchResult
para que contenga los resultados de la búsqueda de imágenes e información de encabezado JSON.
namespace BingSearchApisQuickstart
{
class Program
{
//...
struct SearchResult
{
public String jsonResult;
public Dictionary<String, String> relevantHeaders;
}
//...
Creación de un método para enviar solicitudes de búsqueda
Cree un método denominado BingImageSearch
para realizar la llamada a la API y establezca el tipo de valor devuelto en la estructura SearchResult
que creó anteriormente.
//...
namespace BingSearchApisQuickstart
{
//...
class Program
{
//...
static SearchResult BingImageSearch(string searchTerm)
{
}
//...
Creación y control de una solicitud de búsqueda de imágenes
En el método BingImageSearch
, lleve a cabo los siguientes pasos:
Construya el URI para la solicitud de búsqueda. Dé formato al término de búsqueda
SearchTerm
antes de anexarlo a la cadena.static SearchResult BingImageSearch(string SearchTerm){ var uriQuery = uriBase + "?q=" + Uri.EscapeDataString(SearchTerm); //...
Envíe la solicitud web y obtenga la respuesta como una cadena 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();
Cree el objeto de resultado de búsqueda y extraiga los encabezados HTTP de Bing. Después, devuelva
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;
Procesamiento y visualización de la respuesta
En el método Main, llame a
BingImageSearch()
y almacene la respuesta devuelta. A continuación, deserialice JSON en un objeto.SearchResult result = BingImageSearch(searchTerm); //deserialize the JSON response from the Bing Image Search API dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(result.jsonResult);
Obtenga la primera imagen devuelta desde
jsonObj
e imprima el título y una dirección URL a la imagen.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");
Ejemplo de respuesta JSON
Las respuestas de Bing Image Search API se devuelven como JSON. Esta respuesta de ejemplo se ha truncado para mostrar un único resultado.
{
"_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"
}]
}