Чи надає IMDB API? [зачинено]


644

Нещодавно я знайшов додаток для організатора фільмів, яке отримує його дані з бази даних IMDB .

Чи надає IMDB API для цього чи будь-які доступні API сторонніх розробників?


10
Чи є API для оглядів IMDB?
metdos

1
Для просто посилання IMDB використовуйте наступний формат. <a href="http://www.imdb.com/title/{{{ $imdb_id }}}">{{{ $imdb_id }}}</a> BTW: imdb_id follows this pattern: tt0000000
Ігор Парра

1
як називається цей додаток організатора фільму? Я шукаю щось подібне
Airlike

@Airlike Можливо Plex . Я точно знаю, що можна організовувати фільми та отримувати дані з IMDB.
муляр

Відповіді:


453

IMDb має публічний API, який, хоча і не є документальним, швидкий і надійний (використовується на офіційному веб-сайті через AJAX).

API пропозицій пошуку

  • https://sg.media-imdb.com/suggests/a/aa.json
  • https://v2.sg.media-imdb.com/suggests/h/hello.json (альтернативний)
  • Формат: JSON-P
  • Caveat: це у форматі JSON-P, і параметр зворотного виклику не може бути налаштований. Для його використання міждоменним доменом доведеться використовувати назву функції, яку вони обрали (яка у imdb${searchphrase}форматі). Крім того, можна зняти або замінити прокладку через локальний проксі.
// 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();

розширений пошук


Остерігайтесь, що ці API є неофіційними та можуть змінюватися в будь-який час!


Оновлення (січень 2019 р.): Розширений API більше не існує. Хороша новина полягає в тому, що API Suggestions тепер підтримує "розширені" функції пошуку за назвами фільмів та іменами акторів.


2
RE: API JSONP не витончено відступає, (принаймні) він повертає код помилки HTTP, але я погоджуюся, що смішно, що тілом відповіді є XML.
Omni5cience

9
Нещодавно я помітив, що він включає також властивість 'я' для зображень. Однак вказаний в ньому URL-адрес є дуже великим зображенням (ймовірно, оригіналом). Для того, щоб отримати мініатюру, IMDb використовує наступне: if (ua.i) { c.img = { src: ua.i[0].replace("._V1_.jpg", "._V1._SX40_CR0,0,40,54_.jpg"), width: 40, height: 54 } }.
Тімо Тіхоф

2
Ви можете не просто вказати jsonp з. Ajax, якщо ви отримуєте json з jquery, і я думаю, що getjson був застарілим, навіть коли це було написано, він був застарілим, я вірю
Кріс МакГрат

2
@ChrisMcGrath: Я не думав про використання jQuery.ajax jsonpCallback, я додав це у відповідь, дякую! Щодо $ .getJSON: Ні, це, безумовно, не застаріло. Це лише невелика обгортка навколо $ .ajax.
Тімо Тіхоф

2
Хтось знає, як включити зображення в розширений пошук? Здається, вони приходять лише з пропозиціями ...
Кирило Местром

217

нові api @ http://www.omdbapi.com

редагувати: через юридичні проблеми довелося перенести послугу на новий домен :)


1
Це приголомшливо, не впевнений, чи це насправді ваше, чи ви його просто знайшли, але хотілося б побачити щось про статистику часу, щоб я міг знати, на скільки я можу розраховувати на це: D
Ендрю Дж. Джонсон,

16
Якщо хтось цікавиться, це не офіційний API. Дивіться на це відповіді Пекка або Кринкла.
Яно

7
його справді повільно ..; (
Даніель Магнуссон

14
@IanDavis, я зараз працюю над тим, щоб отримати новий швидший / більший виділений сервер для API, що не дешево! Я майже отримав достатньо пожертв, щоб придбати це протягом найближчих кількох днів. API отримує понад 2 мільйони запитів на день!
bfritz

4
@OptimusCrime На днях у мене виникли проблеми з IP-адресами з діапазону 85.XXX.XXX.XXX, і мені довелося тимчасово блокувати ВСІ з них, поки я не зміг взяти під контроль речі. На жаль, це одна з компромісів, з якими мені доводиться стикатися, не вимагаючи ключів API, люди, як правило, просто зловживають пеклом.
bfritz

93

IMDB, схоже, поширює дані, але лише у текстових файлах:

http://www.imdb.com/interfaces

навколо цього є декілька API, якими ви можете користуватися Google. Екранізація екрана прямо заборонена. Здається, офіційний API працює, але це вже роками.


7
Як можна заборонити вискоблювання екрану?

11
@omouse З термінів : 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.це не робить ці умови автоматично придатними для виконання в усіх юрисдикціях, але вони є в багатьох.
Pekka

6
Так, але це діалогове вікно було спрямовано на "Роботи". Мабуть, мій робот не так добре розуміє англійську.
Зомбі

2
З грудня 2017 року ці файли IMDb більше не оновлюються. Існує новий API, який постачає дані в новому форматі. Хоча простіше розібратися, цей новий формат є дуже невеликим підмножиною попереднього формату.
Девід Шаппель

1
Я усвідомлюю, що це надзвичайно старе питання та відповідь. Однак обмін загальнодоступними даними не є юридично придатним, якщо ви не підписували EULA. Навіть якщо ви це зробили, якщо інформація є загальнодоступною через інші засоби, EULA все ще не має юридичної сили. Нещодавно було прийнято серйозне рішення щодо цього ефекту щодо LinkedIn. Дивіться: eff.org/deeplinks/2019/09/… IANAL, але ЄФР є. Це дуже розумна постанова. Якщо ви розміщуєте інформацію в Інтернеті, ви повинні розраховувати, що люди будуть її робити.
CubicleSoft

48

Ще одна юридична альтернатива отримання інформації про фільми - це API Rotten-Tomatoes (від Фанданго).


Чи можна API гнилих помідорів використовувати в комерційній програмі? Скажіть, наприклад, щоб користувачі отримували подробиці фільму від його назви?
KerrM

1
Схоже, вони не роблять різниці між комерційним чи некомерційним додатком. Ви завжди можете подивитися їх TOS тут: developer.rottentomatoes.com/apps/tos Хоча вас обмежать 10000 дзвінків на день та 10 за секунду
Йоганн

1
Якщо ви надаєте некомерційну програму і вам потрібно більше 10 000 дзвінків на день, ви можете поговорити з ними про ліцензування. Умови досить прості і легко дотримуватися, оскільки ви повинні відображати їх логотип та / або певну фразу формулювання для рейтингу.
Омертрон

6
WTF? "API призначений для використання лише у США. Розгортання вмісту за межами цієї території повинно бути схвалено командою Rotten Tomatoes. API не може надаватися жодним третім сторонам."
Дан Даскалеску

1
@DanDascalescu Як шкода. Я збирався використовувати його за межами de US
nicolascolman

48

Що з API TMDb?

Ви можете шукати за допомогою imdb_id за допомогою GET /find/{external_id}

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


8
Потрібна реєстрація та процес затвердження протягом 3 робочих днів
Костас

tmdb api може використовувати унікальний ідентифікатор DVD для пошуку imdb_id, якщо це допомагає. Якщо, звичайно, вони перераховані. dvdid.info теж може допомогти.
rogerdpack

7
vrinek - неправильно, він мені негайно надіслав ключ API.
oriharel

1
Для цього не проблема отримати ключ API. Використовують його протягом багатьох років, і його API добре розроблений.
john16384

30

Так, але не безкоштовно.

..... щорічні внески від 15 000 доларів до вище, залежно від аудиторії даних та даних, які ліцензуються.

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


1
Здається, це безкоштовно для "особистого" використання, тільки в іншому випадку ви повинні з ними зв’язатися ... ух, нам дійсно потрібен відкритий еквівалент imdb, хоча я думаю, tmdb близький ...
rogerdpack

привіт, це насправді не відповідь на питання, більше коментар вище.
Ian Vaughan

6
@IanVaughan, я вважаю, що моя відповідь безпосередньо стосується цього питання: Питання: "Чи IMDB надає API для цього ...?". A: "Так ... [посилання на інформацію про ліцензування даних]." Це не моя вина, IMDB публічно не документує посилання API.
Байран Заугг

8
Вибачте, я думаю, ви праві, я виправлений. Вибачення.
Ian Vaughan

22

Існує API JSON для використання мобільними додатками на веб-сайті http://app.imdb.com

Однак попередження досить суворе:

Для використання лише клієнтами, письмово уповноваженими IMDb.
Автори та користувачі сторонніх клієнтів приймають повну юридичну викриття / відповідальність за свої дії.

Я припускаю, що це для тих розробників, які платять за ліцензію на доступ до даних через API.

EDIT : Тільки для ударів, я написав клієнтську бібліотеку, щоб спробувати прочитати дані з API, їх можна знайти тут: api-imdb

Очевидно, вам слід звернути увагу на попередження, і справді використовувати щось на кшталт TheMovieDB як кращу та більш відкриту базу даних.

Тоді ви можете використовувати цю обгортку Java API (про яку я писав): api-themoviedb


1
Я напишу вашу бібліотеку для NodeJS. Дякую, що поділились!
arm.localhost

Як хтось може отримати ключ API для його використання?
0xMH

Бібліотека Python з допомогою цього API: pypi.org/project/imdbpie code.richard.do/richardARPANET/imdb-pie @Mohammed Див imdb.com/licensing
GFY


9

https://deanclatworthy.com/tools.html - це IMDB API, але він припинено через зловживання.


1
на жаль, незабаром його закриють. Чи знаєте ви, як це працює?
ПА.

1
Він пропонує також дуже обмежений пошук, лише за назвою фільму
Justinhj

Оформити замовлення malhar2010.blogspot.com/2011/02/… для використання IMDb api.

12
Як автор цього API, я повинен зазначити, що вищезазначені коментарі тепер зайві, оскільки його не закривають, і що тепер ви можете шукати за ідентифікатором IMDB.
Дін

безкоштовно IMDB API дивіться це 99webtools.com/get-movie-info-imdb.php
Сонячний

6

Схоже, IMDB не має прямого API на серпень 2016 року, але я бачив, що багато людей пишуть скребки та інше вище. Ось більш стандартний спосіб отримати доступ до даних про фільми за допомогою API кадрового шуму. Усі відповіді у форматі JSON та 5000 запитів на день у вільному плані

Список речей, наданих API

  1. Кредити на фільми
  2. Ідентифікатор фільму
  3. Зображення фільму
  4. Завантажте фільм за ідентифікатором IMDB
  5. Отримайте останні фільми
  6. Отримайте нові випуски
  7. Отримайте дати виходу фільму
  8. Отримайте список доступних перекладів для певного фільму
  9. Завантажте відео, трейлери та тизери для фільму
  10. Шукайте фільм за назвою
  11. Також підтримує телепередачі, ігри та відео


3

Ось просте рішення, яке отримує показ по імені на основі запиту від Krinkle:

Ви можете обійти політику одного і того ж джерела, отримавши ваш сервер отримати URL, а не намагатися отримати його безпосередньо AJAX, і вам не потрібно використовувати JSONP для цього.

Javascript (jQuery):

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

PHP (у файлі 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

Нещодавно на SXSWi 2012 у їхньому "Mashery Lounge" з'явився стенд для API, схожого на IMDB, який називається rovi . Це не безкоштовний API, але за словами продавця, з яким я спілкувався, вони пропонують або частку обертів, або рівну плату за користування, залежно від вашого бюджету. Я ще не використовував його, але це здається досить крутим.


більше немає в живих.
BishopZ

2

NetFilx - це більше персоналізований медіа-сервіс, але ви можете використовувати його для публічної інформації про фільми. Він підтримує Javascript та OData.
Також дивіться JMDb : інформація в основному така сама, як ви можете отримати при використанні веб-сайту IMDb.


1
Netflix закрив свій публічний API майже рік тому. Оскільки вони зняли весь піддомен розробника, включаючи публікацію, в якій говорили, що його закривають, ось посилання на новинну версію
Джеймс Скемп

1

гаразд, я знайшов цей скребок IMDB

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

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

альтернативно - реалізація imdbapi.org для 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; }
    }

}

Це добре виглядає, але згідно з IMDB, заборонено використовувати подібні інструменти. Більше інформації help.imdb.com/article/imdb/general-information/…
nicolascolman

1

Якщо ви хочете детальніше про фільм, ви можете розглянути

OMDB API, що є базами даних для відкритих фільмів, повертає рейтинг IBDB, голоси IMDB, і ви також можете включати рейтинг Rotten Tomato.

Або ще можна використовувати

My Api Films, який дозволяє здійснювати пошук за ідентифікатором IMDB і повертає детальну інформацію, але має обмеження на запит.



0

Ось модуль Python, що забезпечує API для отримання даних з веб-сайту IMDB

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


Цей модуль використовує екранування екрана, що проти TOS
Farinha

6
Використання IMDB взагалі в додатку суперечить їх TOS, мабуть, ...
rogerdpack

ya, ви повинні зв’язатися з ними та просити використовувати їхній вміст у вашій комерційній програмі. У їх TOS написано, що ви повинні мати письмову згоду від IMDB.
Майк

0

Я впевнений, що знайдена вами програма насправді отримує інформацію про API Themoviedb.org (вони отримують більшу частину матеріалів від IMDB). У них є безкоштовний відкритий API, який використовується в багатьох організаторах фільмів / додатках XMBC.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.