Descargar carteles de la película de la lista de identificadores de IMDB

votos
0

Quiero descargar los carteles para una lista de películas utilizando su ID de IMDB. Estoy utilizando el conjunto de datos MovieLens ( https://grouplens.org/datasets/movielens/latest/ ).

He encontrado un ejemplo en línea, sin embargo, este código de descarga todos los carteles para la película 1 ( https://gist.github.com/baderj/7414775 )

¿Cómo me adapto a esta única descarga de la parte superior del cartel nominal (es decir, 1 cartel) para cada una de las películas que tengo en la lista?

Sé que puedo tener acceso al cartel más valorados por:

posters = api_response['posters'][0]

Y sé que puedo descargar una lista de URL de imágenes por:

for i in test_urls:
    if __name__==__main__:
        tmdb_posters(i)

Sin embargo, no sé cómo modificar los get_poster_urls de función para hacer lo que quiera.

Se proporciona el guión completo:

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)

Yo sé que tengo que modificar esta sección para obtener una lista de direcciones URL de la lista de identificadores que tengo.

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)

Yo sé que tengo que modificar esta sección para tener una lista en lugar de un único ID IMDB

if __name__==__main__:
    tmdb_posters('tt0095016')
Publicado el 27/11/2018 a las 16:48
fuente por usuario
En otros idiomas...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more