Example how to use the API v3 of "The Movie Database" (themoviedb.org). Saves all available posters for the movie with IMDb id tt0095016 to the current folder, using the maximum available resolution.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
import requests | |
CONFIG_PATTERN = 'http://api.themoviedb.org/3/configuration?api_key={key}' | |
IMG_PATTERN = 'http://api.themoviedb.org/3/movie/{imdbid}/images?api_key={key}' | |
KEY = '<your_api_key>' | |
def _get_json(url): | |
r = requests.get(url) | |
return r.json() | |
def _download_images(urls, path='.'): | |
"""download all images in list 'urls' to 'path' """ | |
for nr, url in enumerate(urls): | |
r = requests.get(url) | |
filetype = r.headers['content-type'].split('/')[-1] | |
filename = 'poster_{0}.{1}'.format(nr+1,filetype) | |
filepath = os.path.join(path, filename) | |
with open(filepath,'wb') as w: | |
w.write(r.content) | |
def get_poster_urls(imdbid): | |
""" return image urls of posters for IMDB id | |
returns all poster images from 'themoviedb.org'. Uses the | |
maximum available size. | |
Args: | |
imdbid (str): IMDB id of the movie | |
Returns: | |
list: list of urls to the images | |
""" | |
config = _get_json(CONFIG_PATTERN.format(key=KEY)) | |
base_url = config['images']['base_url'] | |
sizes = config['images']['poster_sizes'] | |
""" | |
'sizes' should be sorted in ascending order, so | |
max_size = sizes[-1] | |
should get the largest size as well. | |
""" | |
def size_str_to_int(x): | |
return float("inf") if x == 'original' else int(x[1:]) | |
max_size = max(sizes, key=size_str_to_int) | |
posters = _get_json(IMG_PATTERN.format(key=KEY,imdbid=imdbid))['posters'] | |
poster_urls = [] | |
for poster in posters: | |
rel_path = poster['file_path'] | |
url = "{0}{1}{2}".format(base_url, max_size, rel_path) | |
poster_urls.append(url) | |
return poster_urls | |
def tmdb_posters(imdbid, count=None, outpath='.'): | |
urls = get_poster_urls(imdbid) | |
if count is not None: | |
urls = urls[:count] | |
_download_images(urls, outpath) | |
if __name__=="__main__": | |
tmdb_posters('tt0095016') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment