Datos de IMDb por REST: la respuesta corta

IMDb no tiene una API REST gratuita de uso general. Sus conjuntos de datos no comerciales son archivos descargables y el acceso comercial requiere licencia, así que consulta su documentación para conocer los términos vigentes. Si quieres llamar a un endpoint HTTP con un id de IMDb y recibir JSON, amodb lo hace con un plan de pago. Si tu contrato exige datos con licencia del propio IMDb, ese acuerdo es con IMDb y amodb no lo sustituye.

Formas de usar un id de IMDb en amodb

Cinco llamadas cubren la mayoría de las necesidades. Cada una parte de un id que ya tienes o termina en uno.

Tienes o quieresLlamadaObtienes
Un título a partir de un id de IMDbGET /3/find/tt0137523?external_source=imdb_idLos arrays movie_results, tv_results, person_results
El id de IMDb de una películaGET /3/movie/550, campo imdb_idtt0137523 para Fight Club
El id de IMDb de una serieGET /3/tv/1396/external_idsimdb_id junto al id de TVDB
La puntuación de IMDbGET /3/movie/550/ratingsimdb como value y votes, o null
Un registro al estilo OMDbGET /omdb/?i=tt0137523imdbRating, imdbVotes, imdbID

Todas las filas funcionan con la misma clave. Las puntuaciones se describen en la página de puntuaciones y las búsquedas por id en buscar por ID externo.

Lee la puntuación de IMDb

El endpoint de puntuaciones devuelve la nota y el número de votos juntos. Esta es una respuesta real para Fight Club (id 550). Las puntuaciones cambian con el tiempo.

JSON
{
  "id": 550,
  "imdb": {
    "value": 8.8,
    "votes": 2669989
  },
  "kinopoisk": {
    "value": 8.7,
    "votes": null
  },
  "metacritic": {
    "value": 67,
    "votes": null
  },
  "rotten_tomatoes": {
    "value": 81,
    "votes": null
  },
  "tmdb": {
    "value": 8.437,
    "votes": 33039
  }
}

Para IMDb, value va en una escala de 0 a 10 con un decimal. Muestra el número de votos junto a él, y no pintes nada cuando el objeto sea null. En esta respuesta solo IMDb y TMDB tienen votos. votes puede ser null en cualquier fuente, así que compruébalo antes de mostrarlo. Una respuesta en caché sigue siendo válida 6 horas en la caché perimetral, así que consultar con más frecuencia no aporta nada.

Comparación de funciones

FunciónIMDbamodb
Modelo de preciosAcceso comercial con licencia, consulta su documentaciónPrepago, de 1 a 24 meses
Nivel gratuitoSin API REST gratuita de uso generalNinguno, y sin periodo de prueba
AutenticaciónConsulta su documentaciónParámetro de consulta api_key o cabecera Bearer
Formato de respuestaArchivos de conjuntos de datos descargables, consulta su documentación sobre los feeds con licenciaJSON
IdiomasConsulta su documentación14 idiomas de interfaz
PelículasConsulta su documentación para ver los camposDetalles, créditos, imágenes, vídeos
TVConsulta su documentación para ver los camposSeries, temporadas, episodios
PersonasConsulta su documentación para ver los camposPerfiles, filmografía, imágenes
ImágenesConsulta su documentaciónimg.amodb.dev, sin necesidad de clave
PuntuacionesSu propia puntuación, consulta su documentación sobre el accesoCinco fuentes, entre ellas IMDb, cuando se conocen
Límite de solicitudesConsulta su documentación20, 40 o 120 solicitudes por minuto
Uso comercialCon licencia, consulta su documentaciónPlanes de pago, consulta los precios
CompatibilidadFormatos propios, consulta su documentaciónLecturas de TMDB v3 y el protocolo de OMDb

En qué se diferencia amodb

Llamas a un endpoint en lugar de procesar un archivo. Una sola solicitud devuelve un título con su reparto, tráileres y puntuaciones mediante append_to_response, y la forma coincide con TMDB v3, así que las bibliotecas cliente existentes funcionan. La misma clave sirve el endpoint al estilo OMDb, que mantiene en marcha el código antiguo que lee imdbRating.

El bloque de puntuaciones es un objeto fijo con cinco claves. Una fuente desconocida es null, no una clave ausente, así que el código que lee ratings.imdb no necesita comprobar antes que exista el objeto padre. Junto al valor puede haber un número de votos, que te permite ocultar una puntuación basada en pocos votos. También puede ser null, como ocurre con tres de las cinco fuentes del ejemplo anterior.

Dónde encaja mejor IMDb

  • El origen de la puntuación. IMDb publica primero sus propias puntuaciones. amodb devuelve un valor solo cuando se conoce, así que un título nuevo o poco conocido puede venir null.
  • Funciones del sitio. Las reseñas de usuarios, las listas y las listas de seguimiento viven en el sitio de IMDb. amodb es una API de metadatos y no ofrece cuentas de usuario.
  • Datos con licencia. Si un socio o un contrato exige datos con licencia de IMDb, solo IMDb puede proporcionarlos.
  • Análisis sin conexión. Los archivos de datos no comerciales sirven para investigación masiva que ejecutas en tu propia máquina. Consulta su documentación para ver los términos.

Migrar a amodb

Lo más probable es que tengas una lista de ids de IMDb. Asigna cada uno a un id de amodb una sola vez, guarda el par y llama después a los detalles con el id numérico.

bashpy
curl -s "https://api.amodb.dev/3/find/tt0133093?external_source=imdb_id" \
  -H "Authorization: Bearer $AMODB_KEY"
import os
import requests

KEY = os.environ["AMODB_KEY"]
imdb_ids = ["tt0137523", "tt0133093", "tt1375666"]

for imdb_id in imdb_ids:
    r = requests.get(
        f"https://api.amodb.dev/3/find/{imdb_id}",
        params={"external_source": "imdb_id"},
        headers={"Authorization": f"Bearer {KEY}"},
        timeout=10,
    )
    r.raise_for_status()
    hits = r.json()["movie_results"]
    print(imdb_id, hits[0]["id"] if hits else None)

Los tres ids anteriores corresponden a 550, 603 y 27205, que son Fight Club, The Matrix e Inception. Un id de serie como tt0903747 llega en tv_results, donde Breaking Bad tiene el id 1396. Un array vacío significa que no se encontró ninguna coincidencia para ese id.

Dosifica el ritmo del bucle. Cada id es una solicitud, y un 429 incluye una cabecera Retry-After con los segundos de espera. Consulta errores para ver los demás códigos.

Guarda los ids de forma segura

  • Guarda los ids de IMDb como cadenas de texto. Empiezan por tt y llevan ceros a la izquierda, como en tt0137523, y un tipo numérico elimina esos ceros.
  • Guarda el id de IMDb y el de amodb como un par. Cualquiera de los dos vuelve a encontrar el título.
  • Lee tv_results para las series y movie_results para las películas. Un solo id normalmente rellena un array y deja los demás vacíos.
  • Solicita los detalles por el id de amodb a partir de entonces, porque una llamada de detalles puede incluir reparto, tráileres y puntuaciones mediante append_to_response.

Precios

Elige uno de tres planes de 20, 40 o 120 solicitudes por minuto y paga por adelantado 1, 3, 6, 12 o 24 meses. Los periodos más largos tienen un descuento del 10, 20, 30 o 40 por ciento. Todos los planes devuelven los mismos datos, nada se renueva solo y no hay nivel gratuito. Consulta precios para ver los importes.