Quickstart: Search for images using Bing Image Search REST API and Python
Use this quickstart to learn how to send search requests to Bing Image Search API. This Python application sends a search query to the API, and displays the URL of the first image in the results. Although this application is written in Python, the API is a RESTful web service compatible with most programming languages.
To run this example as a Jupyter notebook on MyBinder, select the launch binder badge:
The source code for this sample is available on GitHub with additional error handling and annotations.
Prerequisites
Create and initialize the application
Create a new Python file in your favorite IDE or editor, and import the following modules. Create a variable for your subscription key, search endpoint, and search term.
import requests import matplotlib.pyplot as plt from PIL import Image from io import BytesIO subscription_key = "your-subscription-key" search_url = "https://api.bing.microsoft.com/v7.0/images/search" search_term = "puppies"
Add your subscription key to the
Ocp-Apim-Subscription-Key
header by creating a dictionary, and adding the key as a value.headers = {"Ocp-Apim-Subscription-Key" : subscription_key}
Create and send a search request
Create a dictionary for the search request's parameters. Add your search term to the
q
parameter. Set thelicense
parameter topublic
to search for images in the public domain. Set theimageType
tophoto
to search only for photos.params = {"q": search_term, "license": "public", "imageType": "photo"}
Use the
requests
library to call the Bing Image Search API. Add your header and parameters to the request, and return the response as a JSON object. Get the URLs to several thumbnail images from the response'sthumbnailUrl
field.response = requests.get(search_url, headers=headers, params=params) response.raise_for_status() search_results = response.json() thumbnail_urls = [img["thumbnailUrl"] for img in search_results["value"][:16]]
View the response
Create a new figure with four columns and four rows by using the matplotlib library.
Iterate through the figure's rows and columns, and use the PIL library's
Image.open()
method to add an image thumbnail to each space.Use
plt.show()
to draw the figure and display the images.f, axes = plt.subplots(4, 4) for i in range(4): for j in range(4): image_data = requests.get(thumbnail_urls[i+4*j]) image_data.raise_for_status() image = Image.open(BytesIO(image_data.content)) axes[i][j].imshow(image) axes[i][j].axis("off") plt.show()
Example JSON response
Responses from the Bing Image Search API are returned as JSON. This sample response has been truncated to show a single result.
{
"_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"
}]
}