¿IMDB proporciona una API? [cerrado]


644

Recientemente encontré una aplicación organizadora de películas que obtiene sus datos de la base de datos IMDB .

¿ IMDB proporciona una API para esto o alguna API de terceros disponible?


10
¿Hay alguna API para revisiones en IMDB?
metdos

1
Para vincular simplemente IMDB use el siguiente formato. <a href="http://www.imdb.com/title/{{{ $imdb_id }}}">{{{ $imdb_id }}}</a> BTW: imdb_id follows this pattern: tt0000000
Igor Parra

1
¿Cuál es el nombre de esta aplicación organizadora de películas? Estoy buscando algo así
Airlike

@ Aerolínea Posiblemente Plex . Sé con certeza que uno organiza películas y puede recuperar datos de IMDB.
albañil

Respuestas:


453

IMDb tiene una API pública que, aunque no está documentada, es rápida y confiable (utilizada en el sitio web oficial a través de AJAX).

API de sugerencias de búsqueda

// 1) Vanilla JavaScript (JSON-P)
function addScript(src) { var s = document.createElement('script'); s.src = src; document.head.appendChild(s); }
window.imdb$foo = function (results) {
  /* ... */
};
addScript('https://sg.media-imdb.com/suggests/f/foo.json');

// 2) Using jQuery (JSON-P)
jQuery.ajax({
    url: 'https://sg.media-imdb.com/suggests/f/foo.json',
    dataType: 'jsonp',
    cache: true,
    jsonp: false,
    jsonpCallback: 'imdb$foo'
}).then(function (results) {
    /* ... */
});

// 3) Pure JSON (with jQuery)
// Use a local proxy that strips the "padding" of JSON-P,
// e.g. "imdb$foo(" and ")", leaving pure JSON only.
jQuery.getJSON('/api/imdb/?q=foo', function (results) {
    /* ... */
});

// 4) Pure JSON (ES2017 and Fetch API)
// Using a custom proxy at "/api" that strips the JSON-P padding.
const resp = await fetch('/api/imdb/?q=foo');
const results = await resp.json();

Búsqueda Avanzada


¡Tenga en cuenta que estas API no son oficiales y pueden cambiar en cualquier momento!


Actualización (enero de 2019): la API avanzada ya no existe. La buena noticia es que la API de sugerencias ahora también admite las funciones "avanzadas" de búsqueda por títulos de películas y nombres de actores.


2
RE: La API JSONP no retrocede con gracia (al menos) devuelve un código de error HTTP, pero estoy de acuerdo en que es divertido que el cuerpo de la respuesta sea XML.
Omni5cience

99
Hace poco noté que también incluye una propiedad 'i' para imágenes. Sin embargo, la url mencionada allí es una imagen muy grande (probablemente la original). Para obtener una imagen en miniatura, IMDb utiliza la siguiente: if (ua.i) { c.img = { src: ua.i[0].replace("._V1_.jpg", "._V1._SX40_CR0,0,40,54_.jpg"), width: 40, height: 54 } }.
Timo Tijhof

2
podría no solo especificar jsonp with.Ajax si obtiene json con jquery y creo que getjson ha quedado en desuso incluso cuando esto se escribió, estaba en desuso, creo
Chris McGrath

2
@ChrisMcGrath: No había pensado en usar jQuery.ajax jsonpCallback, lo he agregado a la respuesta, ¡Gracias! En cuanto a $ .getJSON: No, eso ciertamente no ha sido desaprobado. Es solo una pequeña envoltura alrededor de $ .ajax.
Timo Tijhof

2
¿Alguien sabe cómo obtener imágenes incluidas en la búsqueda avanzada? Parece que solo vienen con las sugerencias ...
Cyril Mestrom

217

nueva api @ http://www.omdbapi.com

editar: debido a problemas legales tuvo que mover el servicio a un nuevo dominio :)


1
Eso es increíble, no estoy seguro si esto es realmente suyo o si lo acaba de encontrar, pero me encantaría ver algo sobre las estadísticas de tiempo de actividad para poder saber cuánto puedo contar con él: D
Andrew G. Johnson

16
En caso de que alguien se pregunte, esta no es la API oficial. Ver las respuestas de Pekka o Krinkle para eso.
Jano

77
es realmente lento ..; (
Daniel Magnusson

14
@IanDavis, actualmente estoy trabajando para obtener un nuevo servidor dedicado más rápido / más grande para la API, ¡lo cual no es barato! Casi tengo suficientes donaciones para adquirir esto en los próximos días. ¡La API recibe más de 2 millones de solicitudes por día!
bfritz

44
@OptimusCrime Tuve un problema el otro día con IP del rango 85.XXX.XXX.XXX y tuve que bloquear temporalmente TODOS hasta que pude tener las cosas bajo control. Lamentablemente, esta es una de las compensaciones con las que tengo que lidiar al no requerir claves API, la gente tiende a abusar de ella.
bfritz 01 de

93

Los propios IMDB parecen distribuir datos, pero solo en archivos de texto:

http://www.imdb.com/interfaces

Hay varias API alrededor de esto que puedes buscar en Google. El raspado de pantalla está explícitamente prohibido. Una API oficial parece estar en proceso, pero lo ha sido durante años.


77
¿Cómo es posible prohibir el raspado de pantalla?

11
@omouse De los términos : Robots and Screen Scraping: You may not use data mining, robots, screen scraping, or similar data gathering and extraction tools on this site, except with our express written consent as noted below.eso no hace que estos términos sean exigibles automáticamente en todas las jurisdicciones, pero sí en muchos.
Pekka

66
Sí, pero este diálogo se dirigió a "Robots". Aparentemente mi robot no entiende inglés, así que bueno.
Zombis

2
A partir de diciembre de 2017, IMDb ya no actualiza estos archivos. Hay una nueva API que proporciona datos en un nuevo formato. Si bien es más fácil de analizar, este nuevo formato es un subconjunto muy pequeño del formato anterior.
David Chappelle

1
Me doy cuenta de que esta es una pregunta y respuesta extremadamente antiguas. Sin embargo, la minería de datos de acceso público no es legalmente exigible si no firmó un EULA. Incluso si lo hizo, si la información es de acceso público a través de otros medios, el EULA todavía no es legalmente vinculante. Recientemente se tomó una decisión importante en este sentido contra LinkedIn. Ver: eff.org/deeplinks/2019/09/… IANAL pero los EFF son. Es una decisión muy sensata. Si pones información en Internet, debes esperar que la gente haga cosas con ella.
CubicleSoft

48

Otra alternativa legal para obtener información de la película es la API Rotten-Tomatoes (de Fandango).


¿La API de tomates podridos es de uso gratuito en una aplicación comercial? Digamos, por ejemplo, que los usuarios obtengan los detalles de una película de su título.
KerrM

1
No parece que estén haciendo ninguna distinción entre aplicaciones comerciales o no comerciales. Siempre puede ver sus TOS aquí: developer.rottentomatoes.com/apps/tos Aunque estará limitado a 10,000 llamadas por día y 10 por segundo
Johann

1
Si proporciona un programa no comercial y necesita más de 10,000 llamadas por día, puede hablar con ellos sobre la licencia. Los términos son bastante simples y fáciles de cumplir, ya que debe mostrar su logotipo y / o una frase de redacción particular para la calificación.
Omertron

66
WTF? "La API está diseñada para usarse solo en los EE. UU. La implementación de contenido fuera de este territorio debe ser aprobada por el equipo de Rotten Tomatoes. La API NO se puede compartir con terceros".
Dan Dascalescu

1
@DanDascalescu Qué pena. Lo iba a usar fuera de los EE
nicolascolman

48

¿Qué pasa con la API TMDb?

Puede buscar por imdb_id con GET /find/{external_id}

https://developers.themoviedb.org/3/find/find-by-id


8
Sin embargo
Kostas

tmdb api puede usar la identificación única del dvd para buscar el imdb_id, si eso ayuda. Suponiendo que lo tengan en la lista, por supuesto. dvdid.info también podría ayudar.
rogerdpack

77
vrinek: incorrecto, me envió la clave API de inmediato.
oriharel

1
No hay problema para obtener una clave API para esto. He estado usando uno durante años, y su API está bien diseñada.
john16384

30

Sí, pero no gratis.

..... tarifas anuales que van desde $ 15,000 a más, dependiendo de la audiencia para los datos y qué datos se están licenciando.

URL: - http://www.imdb.com/licensing/


1
parece que es gratis para uso "personal" solo de lo contrario tienes que contactarlos ... wow realmente necesitamos un equivalente abierto de imdb, aunque supongo que tmdb está cerca ...
rogerdpack

hola, esto no es realmente una respuesta a la pregunta, más un comentario a lo anterior.
Ian Vaughan

66
@IanVaughan, creo que mi respuesta aborda directamente esta pregunta: P: "¿IMDB proporciona una API para esto ...?". A: "Sí ... [enlace a la información de licencia de datos]". No es mi culpa, IMDB no documenta públicamente una referencia de API.
Byran Zaugg

8
Lo siento, creo que tienes razón, estoy corregido. Disculpas
Ian Vaughan

22

Hay una API JSON para uso de aplicaciones móviles en http://app.imdb.com

Sin embargo, la advertencia es bastante severa:

Para uso exclusivo de clientes autorizados por escrito por IMDb.
Los autores y usuarios de clientes no autorizados aceptan plena exposición legal / responsabilidad por sus acciones.

Supongo que esto es para aquellos desarrolladores que pagan por la licencia para acceder a los datos a través de su API.

EDITAR : solo por diversión, escribí una biblioteca de cliente para intentar leer los datos de la API, puedes encontrarla aquí: api-imdb

Obviamente, debe prestar atención a la advertencia, y realmente, usar algo como TheMovieDB como una base de datos mejor y más abierta.

Entonces puede usar este contenedor de API de Java (que escribí): api-themoviedb


1
Escribiré su biblioteca para NodeJS. ¡Gracias por compartir!
arm.localhost

¿Cómo podría alguien obtener la clave API para usarlo?
0xMH

Una biblioteca de Python que usa esta API: pypi.org/project/imdbpie code.richard.do/richardARPANET/imdb-pie @Mohammed Vea imdb.com/licensing
Gfy


9

https://deanclatworthy.com/tools.html es una API de IMDB pero ha caído debido a abuso.


1
desafortunadamente, se cerrará pronto. ¿Sabes cómo funciona?
PA.

1
También ofrece una búsqueda muy limitada, solo por título de película
justinhj

Pedido malhar2010.blogspot.com/2011/02/... para el uso de IMDb API.

12
Como autor de esta API, debo señalar que los comentarios anteriores ahora son redundantes ya que no se están cerrando, y que ahora puede buscar por ID de IMDB.
Dean

para obtener una API de imdb gratuita, consulte 99webtools.com/get-movie-info-imdb.php
Sunny

6

IMDB todavía no parece tener una API directa a partir de agosto de 2016, pero vi a muchas personas escribiendo scrapers y cosas por encima. Aquí hay una forma más estándar de acceder a los datos de películas utilizando la API de buzz de taquilla. Todas las respuestas en formato JSON y 5000 consultas por día en un plan gratuito

Lista de cosas proporcionadas por la API

  1. Créditos de la película
  2. ID de la película
  3. Imágenes de películas
  4. Obtener película por IMDB id
  5. Obtén la última lista de películas
  6. Obtenga nuevos lanzamientos
  7. Obtener fechas de lanzamiento de películas
  8. Obtenga la lista de traducciones disponibles para una película específica
  9. Obtenga videos, avances y avances para una película
  10. Busca una película por título
  11. También es compatible con programas de televisión, juegos y videos.


3

Aquí hay una solución simple que obtiene programas por nombre basados ​​en la consulta de Krinkle:

Puede evitar la política del mismo origen haciendo que su servidor busque la URL en lugar de intentar buscarla directamente con AJAX y no tiene que usar JSONP para hacerlo.

Javascript (jQuery):

function getShowOptionsFromName (name) {
    $.ajax({
        url: "ajax.php",
        method: "GET",
        data: {q: name},
        dataType: "json"
    }).done(function(data){
        console.log(data);
    });
}

PHP (en el archivo ajax.php):

$q = urlencode($_GET["q"]);
echo file_get_contents("http://www.imdb.com/xml/find?json=1&nr=1&tt=on&q=$q");

2

Recientemente en SXSWi 2012, en su "Mashery Lounge", había un stand para una API similar a IMDB llamada desde rovi . No es una API gratuita, pero de acuerdo con el vendedor con el que hablé, ofrecen una cuota de participación o una tarifa plana por el uso, dependiendo de su presupuesto. Todavía no lo he usado, pero parece genial.


ya no vivo.
BishopZ

2

NetFilx es más un servicio de medios personalizado, pero puede usarlo para información pública sobre películas. Es compatible con Javascript y OData.
También mire JMDb : la información es básicamente la misma que puede obtener al usar el sitio web de IMDb.


1
Netflix cerró su API pública hace casi un año. Desde que eliminaron todo el subdominio del desarrollador, incluida la publicación que decía que lo estaban cerrando, aquí hay un enlace a una noticia: gigaom.com/2014/11/14/…
James Skemp el

1

ok encontré este raspador IMDB

para C #: http://web3o.blogspot.de/2010/11/aspnetc-imdb-scraping-api.html

PHP aquí: http://web3o.blogspot.de/2010/10/php-imdb-scraper-for-new-imdb-template.html

alternativamente, una implementación de imdbapi.org para c #:

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Xml.Linq;
using HtmlAgilityPack; // http://htmlagilitypack.codeplex.com/


public class IMDBHelper
{

    public static imdbitem GetInfoByTitle(string Title)
    {
        string url = "http://imdbapi.org/?type=xml&limit=1&title=" + Title;
        HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url);
        req.Method = "GET";
        req.UserAgent = "Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))";
        string source;
        using (StreamReader reader = new StreamReader(req.GetResponse().GetResponseStream()))
        {
            source = reader.ReadToEnd();
        }
        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(source);        
        XDocument xdoc = XDocument.Parse(doc.DocumentNode.InnerHtml, LoadOptions.None);
        imdbitem i = new imdbitem();
        i.rating = xdoc.Descendants("rating").Select(x => x.Value).FirstOrDefault();
        i.rating_count = xdoc.Descendants("rating_count").Select(x => x.Value).FirstOrDefault();
        i.year = xdoc.Descendants("year").Select(x => x.Value).FirstOrDefault();
        i.rated = xdoc.Descendants("rated").Select(x => x.Value).FirstOrDefault();
        i.title = xdoc.Descendants("title").Select(x => x.Value).FirstOrDefault();
        i.imdb_url = xdoc.Descendants("imdb_url").Select(x => x.Value).FirstOrDefault();
        i.plot_simple = xdoc.Descendants("plot_simple").Select(x => x.Value).FirstOrDefault();
        i.type = xdoc.Descendants("type").Select(x => x.Value).FirstOrDefault();
        i.poster = xdoc.Descendants("poster").Select(x => x.Value).FirstOrDefault();
        i.imdb_id = xdoc.Descendants("imdb_id").Select(x => x.Value).FirstOrDefault();
        i.also_known_as = xdoc.Descendants("also_known_as").Select(x => x.Value).FirstOrDefault();
        i.language = xdoc.Descendants("language").Select(x => x.Value).FirstOrDefault();
        i.country = xdoc.Descendants("country").Select(x => x.Value).FirstOrDefault();
        i.release_date = xdoc.Descendants("release_date").Select(x => x.Value).FirstOrDefault();
        i.filming_locations = xdoc.Descendants("filming_locations").Select(x => x.Value).FirstOrDefault();
        i.runtime = xdoc.Descendants("runtime").Select(x => x.Value).FirstOrDefault();
        i.directors = xdoc.Descendants("directors").Descendants("item").Select(x => x.Value).ToList();
        i.writers = xdoc.Descendants("writers").Descendants("item").Select(x => x.Value).ToList();
        i.actors = xdoc.Descendants("actors").Descendants("item").Select(x => x.Value).ToList();
        i.genres = xdoc.Descendants("genres").Descendants("item").Select(x => x.Value).ToList();
        return i;
    }

    public class imdbitem
    {
        public string rating { get; set; }
        public string rating_count { get; set; }
        public string year { get; set; }
        public string rated { get; set; }
        public string title { get; set; }
        public string imdb_url { get; set; }
        public string plot_simple { get; set; }
        public string type { get; set; }
        public string poster { get; set; }
        public string imdb_id { get; set; }
        public string also_known_as { get; set; }
        public string language { get; set; }
        public string country { get; set; }
        public string release_date { get; set; }
        public string filming_locations { get; set; }
        public string runtime { get; set; }
        public List<string> directors { get; set; }
        public List<string> writers { get; set; }
        public List<string> actors { get; set; }
        public List<string> genres { get; set; }
    }

}

Se ve bien, pero según IMDB, está prohibido usar este tipo de herramientas. Más información help.imdb.com/article/imdb/general-information/…
nicolascolman

1

Si quieres detalles de la película api puedes considerar

API OMDB que es la base de datos de películas abiertas, devuelve la calificación IBDB, los votos IMDB y también puede incluir la calificación Rotten Tomato.

O de lo contrario puedes usar

My Api Films que le permite buscar con IMDB ID y devuelve información detallada pero tiene límites de solicitud.



0

Aquí hay un módulo de Python que proporciona API para obtener datos del sitio web de IMDB

http://techdiary-viki.blogspot.com/2011/03/imdb-api.html


Ese módulo utiliza el raspado de pantalla, que está en contra de los TOS
Farinha

66
El uso de IMDB en absoluto en una aplicación está en contra de sus operadores de telecomunicaciones, al parecer ...
rogerdpack

sí, debe contactarlos y solicitar el uso de su contenido en su aplicación comercial. Dice en sus TOS que debe tener el consentimiento por escrito de IMDB.
Mike

0

Estoy bastante seguro de que la aplicación que encontraste en realidad obtiene su información de la API de Themoviedb.org (obtienen la mayoría de las cosas de IMDB). Tienen una API abierta y gratuita que se usa en muchas aplicaciones de organizador de películas / XMBC.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.