Я хочу скачать плакаты со списком фильмов, используя их IMDB ID.Я использую набор данных MovieLens (https://grouplens.org/datasets/movielens/latest/).
Я нашел пример в Интернете, однако этот код загружает все доступные постеры для 1 фильма (https://gist.github.com/baderj/7414775)
Как мне адаптировать это кзагружать только лучший постер (т.е. 1 плакат) для каждого фильма, который у меня есть в списке?
Я знаю, что могу получить доступ к постеру с самым высоким рейтингом по:
posters = api_response['posters'][0]
И я знаю, что могу загрузить список URL-адресов изображений:
for i in test_urls:
if __name__=="__main__":
tmdb_posters(i)
Однако я не знаю, как изменить функцию get_poster_urls, чтобы делать то, что я хочу.
Полный сценарийпри условии:
import os
import requests
CONFIG_PATTERN = 'http://api.themoviedb.org/3/configuration?api_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)
Я знаю, что мне нужно изменить этот раздел, чтобы получить список URL-адресов для списка имеющихся у меня идентификаторов.
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)
Я знаю, что долженизмените этот раздел, чтобы использовать список вместо одного идентификатора IMDB
if __name__=="__main__":
tmdb_posters('tt0095016')