O IMDB fornece uma API? [fechadas]

644

Recentemente, encontrei um aplicativo organizador de filmes que busca seus dados no banco de dados do IMDB .

O IMDB fornece uma API para isso ou para qualquer API de terceiros disponível?

tusay
fonte
10
Existe alguma API para revisões no IMDB?
#
1
Para vincular apenas o IMDB, use o seguinte formato. <a href="http://www.imdb.com/title/{{{ $imdb_id }}}">{{{ $imdb_id }}}</a> BTW: imdb_id follows this pattern: tt0000000
Igor Parra
1
qual é o nome desse aplicativo organizador de filmes? Eu estou procurando algo parecido
Airlike
@Airlike Possivelmente Plex . Sei com certeza que se organiza filmes e pode recuperar dados do IMDB.
pedreiro

Respostas:

453

O IMDb possui uma API pública que, embora não documentada, é rápida e confiável (usada no site oficial pelo AJAX).

API de sugestões de pesquisa

// 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();

Busca Avançada


Lembre-se de que essas APIs não são oficiais e podem mudar a qualquer momento!


Atualização (janeiro de 2019): a API avançada não existe mais. A boa notícia é que agora a API do Suggestions suporta os recursos "avançados" da pesquisa por títulos de filmes e nomes de atores.

Timo Tijhof
fonte
2
RE: A API JSONP não está caindo normalmente, (pelo menos) retorna um código de erro HTTP, mas concordo que é engraçado que o corpo da resposta seja XML.
Omni5cience
9
Recentemente, notei que ele também inclui uma propriedade 'i' para imagens. O URL mencionado aqui é uma imagem muito grande (provavelmente o original). Para se ter uma miniatura, IMDb usa a seguinte: 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
poderia não apenas especificar jsonp with.Ajax se você ficar json com jquery e eu acho que getJSON foi substituído mesmo quando isto foi escrito, foi preterido Eu acredito
Chris McGrath
2
@ChrisMcGrath: Eu não tinha pensado em usar jQuery.ajax jsonpCallback, adicionei-o à resposta, Obrigado! Quanto a $ .getJSON: Não, isso certamente não foi preterido. É apenas um pequeno invólucro em torno de $ .ajax.
Timo Tijhof
2
Alguém sabe como incluir imagens incluídas na pesquisa avançada? Parece que eles só vêm com as sugestões ...
Cyril Mestrom
217

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

editar: devido a questões legais teve que mover o serviço para um novo domínio :)

bfritz
fonte
1
Isso é incrível, não tenho certeza se este é realmente seu ou você acaba de encontrar, mas gostariam de ver algo em torno de uptime Status para que eu pudesse saber o quanto eu posso contar com ele: D
Andrew G. Johnson
16
Caso alguém esteja se perguntando, essa não é a API oficial. Veja as respostas de Pekka ou Krinkle para isso.
Jano
7
é realmente lento ..; (
Daniel Magnusson
14
@IanDavis, atualmente estou trabalhando para obter um novo servidor dedicado mais rápido / maior para a API, o que não é barato! Quase tenho doações suficientes para adquirir isso nos próximos dias. A API está recebendo mais de 2 milhões de solicitações por dia!
Bfritz
4
@OptimusCrime Outro dia tive um problema com IPs do intervalo 85.XXX.XXX.XXX e tive que bloquear temporariamente TODOS eles até conseguir controlar as coisas. Infelizmente, essa é uma das compensações com as quais tenho que lidar ao não exigir chaves de API, as pessoas tendem a abusar muito disso.
bfritz
93

O próprio IMDB parece distribuir dados, mas apenas em arquivos de texto:

http://www.imdb.com/interfaces

existem várias APIs que você pode usar no Google. A raspagem de tela é explicitamente proibida. Uma API oficial parece estar em andamento, mas já existe há anos.

Pekka
fonte
7
Como é possível a raspagem de tela ser proibida?
11
@omouse Dos termos : 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.isso não torna esses termos automaticamente aplicáveis ​​em todas as jurisdições, mas são muitos.
Pekka 01/01
6
Sim, mas este diálogo foi direcionado para "Robôs". Aparentemente, meu robô não entende inglês, então tudo bem.
Zombies
2
Em dezembro de 2017, esses arquivos não são mais atualizados pelo IMDb. Há uma nova API que fornece dados em um novo formato. Embora seja mais fácil de analisar, esse novo formato é um subconjunto muito pequeno do formato anterior.
David Chappelle
1
Sei que essa é uma pergunta e resposta extremamente antiga. No entanto, a mineração de dados de dados acessíveis ao público não é legalmente aplicável se você não assinar um EULA. Mesmo se você tiver, se as informações forem acessíveis ao público por outros meios, o EULA ainda não é juridicamente vinculativo. Recentemente, foi tomada uma decisão importante contra o LinkedIn. Veja: eff.org/deeplinks/2019/09/… IANAL, mas o FEP é. É uma decisão muito sensata. Se você colocar informações na Internet, deve esperar que as pessoas façam coisas com elas.
CubicleSoft
48

Outra alternativa legal para obter informações sobre o filme é a API do Rotten-Tomatoes (por Fandango).

Johann
fonte
A API de tomates podres é gratuita para uso em um aplicativo comercial? Digamos, por exemplo, para que os usuários obtenham os detalhes de um filme a partir do título?
26412 KerrM
1
Parece que eles não fazem distinção entre aplicativo comercial ou não comercial. Você sempre pode ter um olhar para os seus TOS aqui: developer.rottentomatoes.com/apps/tos Embora você será limitado a 10.000 chamadas por dia e 10 por segundos
Johann
1
Se você estiver fornecendo um programa não comercial e precisar de mais de 10.000 chamadas por dia, poderá conversar com eles sobre licenciamento. Os termos são bastante simples e fáceis de cumprir, pois você precisa exibir o logotipo e / ou uma frase específica da redação da classificação.
Omertron
6
WTF? "A API deve ser usada apenas nos EUA. A implantação de conteúdo fora deste território deve ser aprovada pela equipe do Rotten Tomatoes. A API NÃO pode ser compartilhada com terceiros."
Dan Dascalescu
1
@DanDascalescu Que pena. Eu ia usá-lo fora dos EUA
nicolascolman
48

E a API do TMDb?

Você pode pesquisar por imdb_id com GET /find/{external_id}

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

hdorio
fonte
8
Requer um registro e aprovação dia 3 de negócios processo que
Kostas
A API tmdb pode usar o ID exclusivo do dvd para pesquisar o imdb_id, se isso ajudar. Supondo que eles estejam listados, é claro. O dvdid.info também pode ajudar.
Rogerdpack
7
vrinek - errado, ele me enviou a chave da API imediatamente.
oriharel
1
Não há problema em obter uma chave de API para isso. Usam um há anos, e sua API é bem projetada.
john16384
30

Sim, mas não de graça.

..... taxas anuais que variam de US $ 15.000 a mais, dependendo da audiência dos dados e de quais dados estão sendo licenciados.

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

Byran Zaugg
fonte
1
parece que é gratuito para uso "pessoal" única outra forma você tem que entrar em contato com eles ... wow nós realmente precisamos de um equivalente aberto de title, embora eu suponho TMDB está perto ...
rogerdpack
oi, isso não é realmente uma resposta para a pergunta, mais um comentário acima.
22813 Ian Vaughan
6
@IanVaughan, acredito que minha resposta aborda diretamente esta pergunta: P: "O IMDB fornece uma API para isso ...?". A: "Sim ... [link para informações sobre licenciamento de dados]." Não é minha culpa, o IMDB não documenta publicamente uma referência de API.
Byran Zaugg
8
Desculpe, acho que você está certo, estou corrigido. Desculpas.
23613 Ian Vaughan
22

Há uma API JSON para uso por aplicativos móveis em http://app.imdb.com

No entanto, o aviso é bastante grave:

Para uso somente por clientes autorizados por escrito pela IMDb.
Autores e usuários de clientes não autorizados aceitam total exposição / responsabilidade legal por suas ações.

Presumo que seja para aqueles desenvolvedores que pagam pela licença para acessar os dados por meio de sua API.

Edição : Apenas para chutes, eu escrevi uma biblioteca cliente para tentar ler os dados da API, você pode encontrá-lo aqui: api-imdb

Obviamente, você deve prestar atenção ao aviso e realmente usar algo como TheMovieDB como um banco de dados melhor e mais aberto.

Então você pode usar este wrapper da API Java (que eu escrevi): api-themoviedb

Omertron
fonte
1
Escreverei sua biblioteca para o NodeJS. Obrigado por compartilhar!
arm.localhost
Como alguém pôde obter a chave da API para usá-la?
0xMH
Uma biblioteca Python usando esta API: pypi.org/project/imdbpie code.richard.do/richardARPANET/imdb-pie @Mohammed Veja imdb.com/licensing
Gfy
9

Encontrei este

IMDbPY é um pacote Python útil para recuperar e gerenciar os dados do banco de dados de filmes da IMDb sobre filmes, pessoas, personagens e empresas.

http://imdbpy.sourceforge.net/

markiv
fonte
Também está disponível na PyPi: pypi.org/project/IMDbPY
Gino Mempin
9

https://deanclatworthy.com/tools.html é uma API do IMDB, mas caiu devido a abuso.

Valentin Golev
fonte
1
infelizmente, será fechado em breve. Você sabe como isso funciona?
PA.
1
Ele também oferece uma pesquisa muito limitada também, apenas pelo título do filme
justinhj
Caixa malhar2010.blogspot.com/2011/02/... para usar IMDb api.
12
Como autor desta API, devo salientar que os comentários acima agora são redundantes, pois não estão sendo encerrados e que agora você pode pesquisar por IMDB ID.
21712 Dean
para obter a API imdb gratuita, consulte 99webtools.com/get-movie-info-imdb.php
Sunny
6

O IMDB ainda não parece ter uma API direta em agosto de 2016, mas eu vi muitas pessoas escrevendo raspadores e outras coisas acima. Aqui está uma maneira mais padrão de acessar dados de filmes usando a API de bilheteria da bilheteria. Todas as respostas no formato JSON e 5000 consultas por dia em um plano gratuito

Lista de itens fornecidos pela API

  1. Créditos do filme
  2. ID do filme
  3. Imagens de filmes
  4. Obter filme por IMDB id
  5. Receba a lista de filmes mais recente
  6. Obter novos lançamentos
  7. Obter datas de lançamento do filme
  8. Obtenha a lista de traduções disponíveis para um filme específico
  9. Obter vídeos, trailers e teasers para um filme
  10. Procure um filme por título
  11. Também suporta programas de TV, jogos e vídeos
PirateApp
fonte
3

Aqui está uma solução simples que busca shows por nome com base na consulta do Krinkle:

Você pode contornar a política de mesma origem solicitando ao servidor que busque a URL em vez de tentar buscá-la diretamente com o AJAX e não precisa usar o JSONP para fazer isso.

Javascript (jQuery):

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

PHP (no arquivo ajax.php):

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

Recentemente, no SXSWi 2012, em seu "Mashery Lounge", havia um estande para uma API semelhante ao IMDB chamada rovi . Não é uma API gratuita, mas, de acordo com o vendedor, com quem conversei, eles oferecem uma parcela de rev ou uma taxa fixa de uso, dependendo do seu orçamento. Ainda não o usei, mas parece bem legal.

bpapa
fonte
Não mais vivo.
BishopZ
2

O NetFilx é mais um serviço de mídia personalizado, mas você pode usá-lo para obter informações públicas sobre filmes. Ele suporta Javascript e OData.
Veja também JMDb : as informações são basicamente as mesmas que você pode obter ao usar o site da IMDb.

ThePCWizard
fonte
1
A Netflix encerrou sua API pública há quase um ano. Desde que tirou o sub-domínio inteiro desenvolvedor, incluindo o post dizendo que eles estavam desligá-lo, aqui está um link para uma notícia sobre ele: gigaom.com/2014/11/14/...
James Skemp
1

ok eu encontrei esse raspador IMDB

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

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

alternativamente, uma implementação 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; }
    }

}
fubo
fonte
Parece bom, mas de acordo com o IMDB, é proibido usar esse tipo de ferramenta. Mais informações help.imdb.com/article/imdb/general-information/...
nicolascolman
1

Se você quiser detalhes da API do filme, considere

API OMDB, que é filmes abertos Banco de dados Retorna Classificação IBDB, Votos IMDB e você também pode incluir a classificação Rotten Tomato.

Ou então você pode usar

My Api Films, que permite pesquisar com o IMDB ID e retorna informações detalhadas, mas possui limites de solicitação.

Akshay Khale
fonte
1

Se você precisar de informações sobre a TV, tente o TVmaze.com .

É grátis, rápido e confiável. Aqui está a página do desenvolvedor:

http://api.tvmaze.com/

Saeed Masoumi
fonte
0

Aqui está um módulo Python que fornece APIs para obter dados do site do IMDB

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

vikas
fonte
Isso screen-scraping usos do módulo, que é contra os TOS
Farinha
6
Usando IMDB em tudo em um aplicativo é contra a sua TOS, aparentemente ...
rogerdpack
você precisa entrar em contato com eles e solicitar o uso do conteúdo deles em seu aplicativo comercial. Diz nos TOS deles que você precisa ter um consentimento por escrito do IMDB.
Mike
0

Estou bastante confiante de que o aplicativo que você encontrou realmente recebe as informações da API do Themoviedb.org (elas obtêm a maior parte do material do IMDB). Eles possuem uma API aberta gratuita que é usada em muitos aplicativos do organizador de filmes / XMBC.

Mike
fonte