Czy IMDB zapewnia interfejs API? [Zamknięte]

644

Niedawno znalazłem aplikację do organizowania filmów, która pobiera dane z bazy danych IMDB .

Czy IMDB zapewnia interfejs API dla tego lub dostępnych interfejsów API innych firm?

tusay
źródło
10
Czy istnieje interfejs API do recenzji na IMDB?
metdos
1
Aby połączyć tylko IMDB, użyj następującego formatu. <a href="http://www.imdb.com/title/{{{ $imdb_id }}}">{{{ $imdb_id }}}</a> BTW: imdb_id follows this pattern: tt0000000
Igor Parra
1
jak nazywa się ta aplikacja do organizowania filmów? Szukam czegoś takiego
Airlike
@Airlike Prawdopodobnie Plex . Wiem na pewno, że organizuje się filmy i można pobierać dane z IMDB.
mason

Odpowiedzi:

453

IMDb ma publiczny interfejs API, który, choć nieudokumentowany, jest szybki i niezawodny (używany na oficjalnej stronie internetowej za pośrednictwem AJAX).

Interfejs API sugestii wyszukiwania

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

zaawansowane wyszukiwanie


Uwaga: te interfejsy API są nieoficjalne i mogą ulec zmianie w dowolnym momencie!


Aktualizacja (styczeń 2019 r.): Zaawansowany interfejs API już nie istnieje. Dobra wiadomość jest taka, że ​​API Sugestii obsługuje teraz „zaawansowane” funkcje wyszukiwania według tytułów filmów i nazwisk aktorów.

Timo Tijhof
źródło
2
ODNIESIENIE: Interfejs API JSONP nie wdzięcznie się wycofuje, (przynajmniej) zwraca kod błędu HTTP, ale zgadzam się, że to zabawne, że treść odpowiedzi to XML.
Omni5cience
9
Niedawno zauważyłem, że zawiera także właściwość „i” dla obrazów. Adres URL wspomniany w tym dokumencie jest jednak bardzo dużym obrazem (prawdopodobnie oryginał). Aby uzyskać miniaturę, IMDb wykorzystuje następujące: 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
czy mógłbyś nie tylko określić jsonp za pomocą. Ajax, jeśli dostajesz json za pomocą jquery i myślę, że getjson został uznany za przestarzały, nawet kiedy to zostało napisane, to jest przestarzałe, wierzę
Chris McGrath,
2
@ChrisMcGrath: Nie myślałem o użyciu jQuery.ajax jsonpCallback, dodałem go do odpowiedzi: Dzięki! Co do $ .getJSON: Nie, to z pewnością nie było przestarzałe. To tylko małe opakowanie wokół .ajax.
Timo Tijhof,
2
Czy ktoś wie, jak uzyskać obrazy uwzględnione w wyszukiwaniu zaawansowanym? Wydaje się, że pochodzą one tylko z sugestiami ...
Cyril Mestrom
217

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

edycja: ze względów prawnych musiałem przenieść usługę do nowej domeny :)

bfritz
źródło
1
To niesamowite, nie jestem pewien, czy to faktycznie jest twoje, czy właśnie je znalazłeś, ale chciałbym zobaczyć coś wokół statystyk czasu pracy, aby móc wiedzieć, na ile mogę na to liczyć: D
Andrew G. Johnson
16
Jeśli ktoś się zastanawia, nie jest to oficjalny interfejs API. Zobacz w tym celu odpowiedzi Pekka lub Krinkle.
Jano,
7
jest naprawdę powolny ..; (
Daniel Magnusson
14
@IanDavis, obecnie pracuję nad nowym, szybszym / większym serwerem dedykowanym dla interfejsu API, co nie jest tanie! Mam prawie dość darowizn, aby je zdobyć w ciągu kilku najbliższych dni. Interfejs API otrzymuje ponad 2 miliony żądań dziennie!
bfritz
4
@OptimusCrime Miałem problem z adresem IP z zakresu 85.XXX.XXX.XXX i musiałem tymczasowo zablokować WSZYSTKIE z nich, dopóki nie mogłem uzyskać kontroli. Niestety jest to jeden z kompromisów, z którym muszę sobie poradzić, nie wymagając kluczy API, ludzie zwykle po prostu nadużywają tego.
bfritz
93

IMDB wydają się rozpowszechniać dane, ale tylko w plikach tekstowych:

http://www.imdb.com/interfaces

wokół tego jest kilka interfejsów API, które możesz Google. Skrobanie ekranu jest wyraźnie zabronione. Oficjalne API wydaje się być w pracy, ale działa już od lat.

Pekka
źródło
7
Jak to możliwe, że skrobanie ekranu jest zabronione?
11
@omouse Z warunków : 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.nie powoduje to, że warunki te są automatycznie wykonalne w każdej jurysdykcji, ale istnieją w wielu.
Pekka
6
Tak, ale to okno dialogowe było skierowane do „Robots”. Najwyraźniej mój robot nie rozumie angielskiego tak dobrze.
Zombie
2
Od grudnia 2017 r. Pliki te nie są już aktualizowane przez IMDb. Istnieje nowy interfejs API, który dostarcza dane w nowym formacie. Chociaż ten nowy format jest łatwiejszy do przeanalizowania, jest bardzo małym podzbiorem poprzedniego formatu.
David Chappelle,
1
Zdaję sobie sprawę, że to bardzo stare pytanie i odpowiedź. Jednak eksploracja danych publicznie dostępnych nie jest prawnie możliwa do wyegzekwowania, jeśli nie podpisałeś umowy EULA. Nawet jeśli tak, jeśli informacje są publicznie dostępne w inny sposób, umowa EULA nadal nie jest prawnie wiążąca. Niedawno podjęto ważną decyzję w tej sprawie przeciwko LinkedIn. Zobacz: eff.org/deeplinks/2019/09/… IANAL, ale EFF są. To bardzo rozsądne orzeczenie. Jeśli umieszczasz informacje w Internecie, powinieneś oczekiwać, że ludzie coś z tym zrobią.
CubicleSoft
48

Inną legalną alternatywą dla uzyskania informacji o filmie jest interfejs API Rotten-Tomatoes (autorstwa Fandango).

Johann
źródło
Czy API zgniłych pomidorów jest darmowe w aplikacji komercyjnej? Powiedzmy na przykład, że użytkownicy mogą uzyskać szczegółowe informacje o filmie z jego tytułu?
KerrM
1
Wygląda na to, że nie wprowadzają rozróżnienia między aplikacjami komercyjnymi i niekomercyjnymi. Zawsze możesz sprawdzić ich warunki tutaj: developer.rottentomatoes.com/apps/tos Chociaż będziesz ograniczony do 10 000 połączeń dziennie i 10 na sekundę
Johann
1
Jeśli zapewniasz program niekomercyjny i potrzebujesz ponad 10 000 połączeń dziennie, możesz porozmawiać z nimi na temat licencjonowania. Warunki są dość proste i łatwe do spełnienia, ponieważ musisz wyświetlać ich logo i / lub określoną frazę dla oceny.
Omertron,
6
WTF? „Interfejs API jest przeznaczony do użytku wyłącznie w Stanach Zjednoczonych. Wdrażanie treści poza tym terytorium musi zostać zatwierdzone przez zespół Rotten Tomatoes. Interfejs API NIE może być udostępniany żadnym stronom trzecim”.
Dan Dascalescu
1
@DanDascalescu Co za szkoda. Zamierzałem użyć go poza USA
nicolascolman
48

Co z TMDb API?

Możesz wyszukiwać według imdb_id za pomocą GET /find/{external_id}

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

hdorio
źródło
8
Wymaga rejestracji i procesu zatwierdzania w ciągu 3 dni
roboczych
tmdb api może użyć unikalnego identyfikatora dvd do wyszukania imdb_id, jeśli to pomoże. Zakładając, że mają to na liście, oczywiście. dvdid.info też może pomóc.
rogerdpack
7
vrinek - źle, natychmiast przesłał mi klucz API.
oriharel
1
Bez problemu można uzyskać do tego klucz API. Używam jednego od lat, a jego interfejs API jest dobrze zaprojektowany.
john16384
30

Tak, ale nie za darmo.

..... roczne opłaty od 15 000 USD do wyższych w zależności od odbiorców danych i tego, które dane są licencjonowane.

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

Byran Zaugg
źródło
1
wydaje się to za darmo dla „osobista” użytku tylko w przeciwnym razie trzeba się z nimi skontaktować ... wow naprawdę potrzebujemy otwartego odpowiednika IMDB, choć przypuszczam tmdb jest blisko ...
rogerdpack
cześć, to nie jest tak naprawdę odpowiedź na pytanie, bardziej komentarz do powyższego.
Ian Vaughan
6
@IanVaughan, uważam, że moja odpowiedź bezpośrednio odnosi się do tego pytania: P: „Czy IMDB zapewnia API dla tego…?”. Odp .: „Tak… [link do informacji o licencjonowaniu danych]”. To nie moja wina, że ​​IMDB nie dokumentuje publicznie referencji API.
Byran Zaugg
8
Przepraszam, myślę, że masz rację, poprawiam się. Przeprosiny.
Ian Vaughan,
22

Interfejs API JSON do użytku przez aplikacje mobilne znajduje się na stronie http://app.imdb.com

Ostrzeżenie jest jednak dość surowe:

Do użytku wyłącznie przez klientów upoważnionych na piśmie przez IMDb.
Autorzy i użytkownicy nieautoryzowanych klientów akceptują pełną odpowiedzialność prawną / odpowiedzialność za swoje działania.

Zakładam, że dotyczy to programistów, którzy płacą za licencję na dostęp do danych za pośrednictwem interfejsu API.

EDYCJA : Tylko dla kopnięć napisałem bibliotekę klienta, aby spróbować odczytać dane z API, możesz je znaleźć tutaj: api-imdb

Oczywiście powinieneś zwrócić uwagę na ostrzeżenie i naprawdę użyć czegoś takiego jak TheMovieDB jako lepszej i bardziej otwartej bazy danych.

Następnie możesz użyć tego opakowania Java API (które napisałem): api-themoviedb

Omertron
źródło
1
Napiszę twoją bibliotekę dla NodeJS. Dziękuję za podzielenie się!
arm.localhost
Jak ktoś może uzyskać klucz API do korzystania z niego?
0xMH
Pythona przy użyciu tej biblioteki API: pypi.org/project/imdbpie code.richard.do/richardARPANET/imdb-pie @Mohammed See imdb.com/licensing
Gfy
9

Znaleziono to

IMDbPY to pakiet Pythona przydatny do pobierania i zarządzania danymi bazy danych filmów IMDb o filmach, ludziach, postaciach i firmach.

http://imdbpy.sourceforge.net/

markiv
źródło
Jest również dostępny w PyPi: pypi.org/project/IMDbPY
Gino Mempin
9

https://deanclatworthy.com/tools.html jest interfejsem API IMDB, ale nie działa z powodu nadużyć.

Valentin Golev
źródło
1
niestety wkrótce zostanie zamknięty. Czy wiesz jak to działa?
PA.
1
Oferuje również bardzo ograniczone wyszukiwanie, tylko według tytułu filmu
justinhj
Kasa malhar2010.blogspot.com/2011/02/... za korzystanie z interfejsu IMDb.
12
Jako autor tego API powinienem zauważyć, że powyższe komentarze są teraz zbędne, ponieważ nie są zamykane i że możesz teraz wyszukiwać według identyfikatora IMDB.
Dean
za darmo imdb API zobacz to 99webtools.com/get-movie-info-imdb.php
Sunny
6

Wydaje się, że IMDB nie ma bezpośredniego interfejsu API od sierpnia 2016 r., Ale widziałem wiele osób piszących skrobaczki i inne rzeczy powyżej. Oto bardziej standardowy sposób uzyskiwania dostępu do danych filmowych za pomocą interfejsu API buzz box office. Wszystkie odpowiedzi w formacie JSON i 5000 zapytań dziennie w ramach bezpłatnego abonamentu

Lista rzeczy dostarczonych przez API

  1. Kredyty filmowe
  2. Identyfikator filmu
  3. Obrazy filmowe
  4. Pobierz film według identyfikatora IMDB
  5. Pobierz listę najnowszych filmów
  6. Otrzymuj nowe wersje
  7. Uzyskaj daty premiery filmu
  8. Uzyskaj listę tłumaczeń dostępnych dla konkretnego filmu
  9. Pobierz filmy, zwiastuny i zwiastuny do filmu
  10. Wyszukaj film według tytułu
  11. Obsługuje również programy telewizyjne, gry i filmy
PirateApp
źródło
3

Oto proste rozwiązanie, które pobiera programy według nazw na podstawie zapytania z Krinkle:

Możesz obejść zasady tego samego pochodzenia, każąc serwerowi pobrać adres URL zamiast próbować pobrać go bezpośrednio za pomocą AJAX i nie musisz do tego używać JSONP.

JavaScript (jQuery):

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

PHP (w pliku 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
źródło
2

Ostatnio na SXSWi 2012, w ich „Mashery Lounge”, było stoisko dla interfejsu API podobnego do IMDB, wywoływanego z rovi . To nie jest darmowy interfejs API, ale według sprzedawcy, z którym rozmawiałem, oferuje albo udział w obrotach, albo stałą opłatę za korzystanie, w zależności od budżetu. Jeszcze go nie użyłem, ale wydaje się całkiem fajny.

bpapa
źródło
już nie żyje.
BishopZ
2

NetFilx to bardziej spersonalizowana usługa medialna, ale można jej używać do informacji publicznych dotyczących filmów. Obsługuje Javascript i OData.
Zobacz także JMDb : informacje są w zasadzie takie same, jak te, które można uzyskać podczas korzystania ze strony IMDb.

The PCWizard
źródło
1
Netflix zamknął swój publiczny interfejs API prawie rok temu. Ponieważ usunęli
James Skemp
1

ok znalazłem ten skrobak IMDB

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

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

alternatywnie implementacja imdbapi.org dla 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
źródło
Wygląda dobrze, ale według IMDB nie wolno używać tego rodzaju narzędzi. Więcej informacji help.imdb.com/article/imdb/general-information/…
nicolascolman
1

Jeśli chcesz api szczegółów filmu, możesz rozważyć

Interfejs API OMDB, czyli otwarte filmy Baza danych zwraca ocenę IBDB, głosy IMDB, a także ocenę Rotten Tomato.

Albo możesz użyć

My Api Films, który pozwala wyszukiwać za pomocą IMDB ID i zwraca szczegółowe informacje, ale ma ograniczenia żądań.

Akshay Khale
źródło
0

Oto moduł Python zapewniający API do pobierania danych ze strony IMDB

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

Vikas
źródło
Ten moduł wykorzystuje zgarnianie ekranu, co jest sprzeczne z TOS
Farinha
6
Korzystanie IMDB w ogóle w aplikacji jest wbrew ich TOS, widocznie ...
rogerdpack
musisz się z nimi skontaktować i poprosić o wykorzystanie ich treści w aplikacji komercyjnej. Mówi w swoich warunkach, że musisz mieć pisemną zgodę IMDB.
Mike
0

Jestem pewien, że znaleziona aplikacja pobiera informacje z interfejsu API Themoviedb.org (większość z nich otrzymuje od IMDB). Mają bezpłatny otwarty interfejs API, który jest używany w wielu aplikacjach do organizowania filmów / XMBC.

Mikrofon
źródło