【问题标题】:Does IMDB provide an API? [closed]IMDB 是否提供 API? [关闭]
【发布时间】:2010-12-30 07:19:33
【问题描述】:

我最近发现了一个电影管理器应用程序,它从 IMDB database 获取数据。

IMDB 是否为此提供 API 或任何可用的第三方 API?

【问题讨论】:

  • IMDB有评论API吗?
  • 仅链接 IMDB 使用以下格式。<a href="http://www.imdb.com/title/{{{ $imdb_id }}}">{{{ $imdb_id }}}</a> BTW: imdb_id follows this pattern: tt0000000
  • 这个电影管理器应用程序的名称是什么?我正在寻找类似的东西
  • @Airlike 可能是Plex。我确信有人可以组织电影并可以从 IMDB 中检索数据。

标签: asp.net-web-api imdb


【解决方案1】:

https://deanclatworthy.com/tools.html 是一个 IMDB API,但由于滥用而被关闭。

【讨论】:

  • 很遗憾,它很快就会关闭。你知道它是如何工作的吗?
  • 它也只提供非常有限的搜索,仅按电影标题
  • 结帐malhar2010.blogspot.com/2011/02/…使用IMDb api。
  • 作为这个API的作者,我应该指出,上面的cmets现在是多余的,因为它没有被关闭,你现在可以通过IMDB ID搜索。
【解决方案2】:

IMDB 本身似乎分发数据,但仅限于文本文件:

http://www.imdb.com/interfaces

您可以在 Google 上找到几个与此相关的 API。屏幕抓取是明确禁止的。 官方 API 似乎正在开发中,但多年来一直如此。

【讨论】:

  • 如何禁止屏幕抓取?
  • @omouse 来自termsRobots 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. 这不会使这些条款在每个司法管辖区都自动强制执行,但它们在许多司法管辖区都有。
  • 是的,但是这个对话框是针对“机器人”的。显然我的机器人不太懂英语哦。
  • 自 2017 年 12 月起,IMDb 不再更新这些文件。有一个新的 API 以新的格式提供数据。虽然更容易解析,但这种新格式只是以前格式的一个非常小的子集。
  • 我意识到这是一个非常古老的问题和答案。但是,如果您未签署 EULA,则数据挖掘可公开访问的数据在法律上是不可强制执行的。即使您这样做了,如果信息可以通过其他方式公开访问,则 EULA 仍然不具有法律约束力。最近针对LinkedIn做出了一项重大决定。请参阅:eff.org/deeplinks/2019/09/…IANAL,但 EFF 是。这是一个非常明智的裁决。如果您将信息放在互联网上,您应该期望人们会用它来做事。
【解决方案3】:

可以,但不是免费的。

.....年费从 15,000 美元到更高不等,具体取决于数据的受众和许可的数据。

网址:- http://www.imdb.com/licensing/

【讨论】:

  • 似乎它是免费的“个人”使用,否则你必须联系他们......哇,我们真的需要一个开放的 imdb 等价物,虽然我想 tmdb 很接近......
  • 嗨,这不是问题的真正答案,更多的是对上面的评论。
  • @IanVaughan,我相信我的回答直接解决了这个问题:问:“IMDB 是否为此提供 API……?”。 A:“是的……[链接到数据许可信息]。”这不是我的错,IMDB 没有公开记录 API 参考。
  • 对不起,我认为你是对的,我已纠正。道歉。
【解决方案4】:

deanclatworthy 似乎仍然有效 还有一个:http://imdbapi.poromenos.org/

【讨论】:

【解决方案5】:

新的api@http://www.omdbapi.com

编辑:由于法律问题不得不将服务移至新域:)

【讨论】:

  • 太棒了,不确定这是否真的是你的,或者你刚刚发现它,但很想看看正常运行时间统计数据,所以我可以知道我可以指望多少:D
  • 如果有人想知道,这不是官方 API。请参阅 Pekka 或 Krinkle 的答案。
  • 它真的很慢..;(
  • @IanDavis,我目前正在为 API 获取一个新的更快/更大的专用服务器,这并不便宜!在接下来的几天里,我几乎有足够的捐款来获得这个。 API 每天收到超过 200 万个请求!
  • @OptimusCrime 前几天我遇到了来自 85.XXX.XXX.XXX 范围的 IP 的问题,我不得不暂时阻止所有这些 IP,直到我可以控制一切。可悲的是,这是我必须通过不需要 API 密钥来处理的权衡之一,人们往往只是滥用它。
【解决方案6】:

TMDb API 呢?

您可以使用 GET /find/{external_id} 按 imdb_id 搜索

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

【讨论】:

  • 需要注册和 3 个工作日的批准流程
  • tmdb api 可以使用 DVD 的唯一 ID 来查找 imdb_id,如果有帮助的话。当然,假设他们列出了它。 dvdid.info 也可能有帮助。
  • vrinek - 错误,它立即向我发送了 API 密钥。
  • 为此获取API密钥是没有问题的。多年来一直在使用它,它的 API 设计得很好。
  • @Kostas 不适用于开发帐户。开发帐户会立即注册。
【解决方案7】:

这是一个 Python 模块,提供 API 以从 IMDB 网站获取数据

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

【讨论】:

  • 该模块使用屏幕抓取,这违反了 TOS
  • 在应用程序中使用 IMDB at all 显然违反了他们的 TOS...
  • 是的,您必须联系他们并请求在您的商业应用程序中使用他们的内容。它在他们的 TOS 中说您必须获得 IMDB 的书面同意。
【解决方案8】:

获取电影信息的另一种合法方式是Rotten-Tomatoes API(Fandango 提供)。

【讨论】:

  • 烂番茄 API 在商业应用中可以免费使用吗?例如,让用户从电影标题中获取电影的详细信息?
  • 看起来他们没有区分商业或非商业应用程序。您可以随时在这里查看他们的 TOS:developer.rottentomatoes.com/apps/tos 虽然您将被限制为每天 10,000 次调用和每秒 10 次调用
  • 如果您提供的是非商业计划并且每天需要超过 10,000 个电话,您可以与他们讨论许可事宜。这些条款相当简单且易于遵守,因为您必须显示他们的徽标和/或评级的特定措辞。
  • WTF? “该 API 仅供在美国使用。在该地区以外部署内容必须得到 Rotten Tomatoes 团队的批准。该 API 不得与任何第三方共享。”
  • @DanDascalescu 真可惜。我打算在美国以外的地方使用它
【解决方案9】:

IMDb 有一个公共 API,虽然没有记录,但快速且可靠(通过 AJAX 在官方网站上使用)。

搜索建议 API

// 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 to the clean `/suggestion` API.
jQuery.getJSON('/api/imdb/?q=foo', function (results) {
    /* ... */
});

// 4) Pure JSON (plain JavaScript; Modern ES6, ES2017, and Fetch API)
// Serve a "/api" route in your app, that proxies (and caches!)
// to v2.sg.media-imdb.com/suggestion/h/hello.json
const resp = await fetch('/api/imdb/?q=foo');
const results = await resp.json();

高级搜索


请注意,这些 API 是非官方的,可能随时更改!


更新(2019 年 1 月):高级 API 不再存在。好消息是,Suggestions API 现在还支持按电影标题和演员姓名搜索的“高级”功能。

【讨论】:

  • RE:JSONP API 没有优雅地回退,(至少)它确实返回了一个 HTTP 错误代码,但我同意响应正文是 XML 很有趣。
  • 我最近注意到它还包含图像的“i”属性。然而,其中提到的 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 } }.
  • 如果您使用 jquery 获取 json 并且我认为 getjson 已被弃用,即使在编写时它也已被弃用,我相信它是否已被弃用
  • @ChrisMcGrath:我没有考虑过使用 jQuery.ajax jsonpCallback,我已经将它添加到答案中,谢谢!至于 $.getJSON:不,这肯定没有被弃用。它只是 $.ajax 的一个小包装器。
  • 有谁知道如何在高级搜索中获取包含的图像?似乎他们只提供建议......
【解决方案10】:

最近在 2012 年 SXSWi 上,在他们的“Mashery Lounge”中,有一个类似 IMDB 的 API 的展位,从 rovi 调用。它不是免费的 API,但根据我与之交谈的销售人员的说法,他们根据您的预算提供 rev share 或固定使用费。我还没有用过,但看起来很酷。

【讨论】:

  • 不再活着。
【解决方案11】:

我非常有信心,您找到的应用程序实际上是从 Themoviedb.org 的 API 中获取信息的(他们从 IMDB 获取大部分信息)。他们有一个免费的开放 API,用于很多电影管理器/XMBC 应用程序。

【讨论】:

    【解决方案12】:

    http://app.imdb.com 有一个供移动应用程序使用的 JSON API

    但是,警告相当严重:

    仅供 IMDb 书面授权的客户使用。
    未经授权的客户的作者和用户对其行为承担全部法律风险/责任。

    我认为这适用于那些为通过其 API 访问数据的许可付费的开发人员。

    编辑:只是为了好玩,我写了一个客户端库来尝试从 API 读取数据,你可以在这里找到它:api-imdb

    显然,您应该注意警告,实际上,使用TheMovieDB 之类的东西作为更好、更开放的数据库。

    然后你可以使用这个 Java API 包装器(我写的):api-themoviedb

    【讨论】:

    【解决方案13】:

    NetFilx 更多的是个性化媒体服务,但您可以将其用于有关电影的公共信息。它支持 Javascript 和 OData。
    也看JMDb:信息基本和你使用IMDb网站时一样。

    【讨论】:

    • Netflix 大约一年前关闭了他们的公共 API。由于他们关闭了整个开发者子域,包括说他们正在关闭它的帖子,这里有一个新闻链接:gigaom.com/2014/11/14/…
    【解决方案14】:

    好的,我找到了这个 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

    另外一个 c# 的 imdbapi.org 实现:

    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; }
        }
    
    }
    

    【讨论】:

    【解决方案15】:

    这是一个简单的解决方案,它根据来自 Krinkle 的查询按名称获取节目:

    您可以通过让服务器获取 URL 而不是尝试直接使用 AJAX 获取 URL 来绕过同源策略,并且您不必使用 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");
    

    【讨论】:

      【解决方案16】:

      找到这个

      IMDbPY 是一个 Python 包,可用于检索和管理 IMDb 电影数据库,关于电影、人物、角色和 公司。

      http://imdbpy.sourceforge.net/

      【讨论】:

      【解决方案17】:

      如果你想要电影详情API,那么你可以考虑

      OMDB API 是开放电影数据库。它 返回 IMDB Ratings,IMDB Votes,它也有 Rotten Tomato 评级。

      否则你可以使用

      My Api Films 允许您使用 IMDB ID 进行搜索,它返回详细信息但它有请求限制。

      【讨论】:

        【解决方案18】:

        如果您需要电视信息,可以尝试TVmaze.com

        它免费、快速且可靠。这是开发者页面:

        http://api.tvmaze.com/

        【讨论】:

          【解决方案19】:

          截至 2016 年 8 月,IMDB 似乎还没有直接的 API,但我看到很多人在上面写爬虫和东西。 Here 是使用票房嗡嗡声 API 访问电影数据的更标准方法。所有 JSON 格式的响应和每天 5000 个免费计划的查询

          API 提供的东西列表

          1. 电影致谢
          2. 电影 ID
          3. 电影图片
          4. 通过 IMDB id 获取电影
          5. 获取最新电影列表
          6. 获取新版本
          7. 获取电影上映日期
          8. 获取特定电影的可用翻译列表
          9. 获取电影的视频、预告片和预告片
          10. 按标题搜索电影
          11. 还支持电视节目、游戏和视频

          【讨论】:

            猜你喜欢
            • 2016-09-01
            • 2014-12-20
            • 2011-09-21
            • 2018-01-07
            • 2011-02-05
            • 1970-01-01
            • 1970-01-01
            • 2019-10-21
            相关资源
            最近更新 更多