Предоставляет ли 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
  • Предупреждение: это в формате 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 предложений теперь поддерживает «расширенные» функции поиска по названиям фильмов и актерам.


2
RE: JSONP API не изящно отступает, (по крайней мере) он возвращает код ошибки 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.это не делает эти условия автоматически осуществимыми в каждой юрисдикции, но они есть во многих.
Пекка

6
Да, но этот диалог был направлен на «Роботов». Видимо мой робот не понимает по-английски, ну да ладно.
Зомби

2
По состоянию на декабрь 2017 года эти файлы больше не обновляются IMDb. Существует новый API, который предоставляет данные в новом формате. Хотя этот новый формат проще для анализа, он представляет собой очень маленькое подмножество предыдущего формата.
Дэвид

1
Я понимаю, что это очень старый вопрос и ответ. Однако данные, доступные для публичного доступа, не имеют юридической силы, если вы не подписали лицензионное соглашение. Даже если вы это сделали, если информация является общедоступной с помощью других средств, лицензионное соглашение по-прежнему не имеет юридической силы. В последнее время было принято важное решение по этому поводу против LinkedIn. Смотрите: eff.org/deeplinks/2019/09/… IANAL, но EFF есть. Это очень разумное решение. Если вы размещаете информацию в Интернете, вы должны ожидать, что люди будут с ней что-то делать.
CubicleSoft

48

Другая легальная альтернатива для получения информации о фильмах - это Rotten-Tomatoes API (от Fandango).


Является ли API гнилых помидоров бесплатным для коммерческого использования? Скажем, например, чтобы пользователи получали информацию о фильме из его названия?
KerrM

1
Не похоже, что они делают различие между коммерческим или некоммерческим приложением. Вы всегда можете взглянуть на их TOS здесь: developer.rottentomatoes.com/apps/tos Хотя вы будете ограничены 10 000 звонков в день и 10 в секунду
Иоганн

1
Если вы предоставляете некоммерческую программу и вам требуется более 10 000 звонков в день, вы можете поговорить с ними о лицензировании. Термины довольно просты и легки в соблюдении, так как для рейтинга необходимо отобразить их логотип и / или конкретную фразу.
Омертрон

6
WTF? «API предназначен для использования только в США. Развертывание контента за пределами этой территории должно быть одобрено командой Rotten Tomatoes. API нельзя передавать третьим лицам».
Дан Даскалеску

1
@DanDascalescu Как жаль. Я собирался использовать его за пределами США
nicolascolman

48

А как насчет TMDb API?

Вы можете искать по imdb_id с GET /find/{external_id}

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


8
Требуется регистрация и одобрение 3 рабочий день процесс , хотя
Костас

API tmdb может использовать уникальный идентификатор dvd для поиска imdb_id, если это поможет. Предполагая, что у них есть это в списке, конечно. Может помочь и dvdid.info.
rogerdpack

7
вринек - неправильно, он отправил мне API ключ сразу.
Орихарел

1
Нет проблем получить ключ API для этого. Использую один в течение многих лет, и его API хорошо разработан.
Джон16384

30

Да, но не бесплатно.

..... ежегодные сборы в размере от 15 000 долларов США и выше в зависимости от аудитории за данные и от того, какие данные лицензируются.

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


1
Похоже, это бесплатно для «личного» использования только в противном случае вы должны связаться с ними ... вау, нам действительно нужен открытый эквивалент imdb, хотя я предполагаю, что tmdb близко ...
rogerdpack

привет, это не совсем ответ на вопрос, больше комментарий к выше.
Ян Воан

6
@IanVaughan, я считаю, что мой ответ напрямую касается этого вопроса: Q: «Предоставляет ли IMDB API для этого ...?». A: «Да ... [ссылка на информацию о лицензировании данных].» Это не моя вина, IMDB публично не документирует ссылку на API.
Байран Заугг

8
Извините, я думаю, что вы правы, я исправлюсь. Извиняюсь.
Ян Воан

22

Существует JSON API для использования мобильными приложениями по адресу http://app.imdb.com.

Тем не менее, предупреждение является довольно серьезным:

Для использования только клиентами, авторизованными в письменном виде IMDb.
Авторы и пользователи неавторизованных клиентов принимают на себя полную юридическую ответственность за свои действия.

Я предполагаю, что это для тех разработчиков, которые платят за лицензию на доступ к данным через их API.

РЕДАКТИРОВАТЬ : Просто для удовольствия, я написал клиентскую библиотеку, чтобы попытаться прочитать данные из 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 является API-интерфейсом IMDB, но не работает из-за злоупотреблений.


1
к сожалению, он скоро будет закрыт. Вы знаете, как это работает?
ПА.

1
Он также предлагает очень ограниченный поиск, по названию фильма
justinhj

Оформить заказ на использование IMDB API Malhar2010.blogspot.com/2011/02/…

12
Как автор этого API, я должен отметить, что вышеприведенные комментарии теперь излишни, поскольку они не закрываются, и что теперь вы можете выполнять поиск по ID IMDB.
декан

для бесплатного API IMDB
Солнечный

6

У IMDB, похоже, еще нет прямого API на август 2016 года, но я видел много людей, пишущих скребки и прочее. Вот более стандартный способ доступа к данным фильма с помощью кассового API Buzz. Все ответы в формате 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", был стенд для IMDB-подобного API, вызванного из rovi . Это не бесплатный API, но, по словам продавца, с которым я разговаривал, они предлагают либо долю в обороте, либо фиксированную плату за использование, в зависимости от вашего бюджета. Я еще не использовал это, но это кажется довольно крутым.


больше не жив.
BishopZ

2

NetFilx - это скорее персонализированный медиа сервис, но вы можете использовать его для публичной информации о фильмах. Он поддерживает Javascript и OData.
Также посмотрите JMDb : информация в основном такая же, как вы можете получить при использовании сайта IMDb.


1
Netflix закрыл свой публичный API почти год назад. Так как они удалили весь поддомен разработчика, включая сообщение о том, что они закрывают его, вот ссылка на новость: gigaom.com/2014/11/14/…
Джеймс Скемп,

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

Если вы хотите фильм подробности API, вы можете рассмотреть

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

Или вы можете использовать

Мои Api Films, которые позволяют выполнять поиск по идентификатору IMDB и возвращают подробную информацию, но имеют ограничения по запросу.



0

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

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


В этом модуле используется очистка экрана, что противоречит TOS
Farinha

6
Использование IMDB вообще в приложении против их TOS, по-видимому ...
rogerdpack

да, вы должны связаться с ними и попросить использовать их содержимое в вашем коммерческом приложении. В их TOS говорится, что вы должны иметь письменное согласие IMDB.
Майк

0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.