我最近发现了一个从IMDB 数据库中获取数据的电影管理器应用程序。
IMDB是否为此提供 API,或任何可用的第三方 API?
IMDb 有一个公共 API,虽然没有记录,但快速且可靠(通过 AJAX 在官方网站上使用)。
https://v2.sg.media-imdb.com/suggests/h/hello.json(截至 2019 年)
imdb${searchphrase}
格式)。或者,可以通过本地代理去除或替换填充。https://v2.sg.media-imdb.com/suggestion/h/hello.json(截至 2020 年)
// 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 现在还支持按电影标题和演员姓名搜索的“高级”功能。
新的 api@ http: //www.omdbapi.com
编辑:由于法律问题,不得不将服务移至新域:)
IMDB 本身似乎分发数据,但仅限于文本文件:
http://www.imdb.com/interfaces
有几个 API 可以通过 Google 搜索。屏幕抓取是明确禁止的。官方 API 似乎正在开发中,但多年来一直如此。
获取电影信息的另一个合法替代方法是Rotten-Tomatoes API(由 Fandango 提供)。
What about TMDb API ?
You can search by imdb_id with GET /find/{external_id}
在http://app.imdb.com上有一个供移动应用程序使用的 JSON API
但是,警告相当严重:
仅供 IMDb 书面授权的客户使用。
未经授权的客户的作者和用户对其行为承担全部法律风险/责任。
我认为这适用于那些支付许可以通过其 API 访问数据的开发人员。
编辑:只是为了好玩,我写了一个客户端库来尝试从 API 读取数据,你可以在这里找到它:api-imdb
显然,您应该注意警告,实际上,使用TheMovieDB 之类的东西作为更好、更开放的数据库。
然后你可以使用这个 Java API 包装器(我写的):api-themoviedb
https://deanclatworthy.com/tools.html是一个 IMDB API,但由于滥用而被关闭。
截至 2016 年 8 月,IMDB 似乎还没有直接的 API,但我看到很多人在上面写爬虫和东西。这是使用票房嗡嗡声 API 访问电影数据的更标准方法。所有 JSON 格式的响应和每天 5000 个免费计划的查询
API提供的东西列表
那 deanclatworthy 似乎仍然有效,还有另一个:http: //imdbapi.poromenos.org/
这是一个简单的解决方案,它根据来自 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");
如果您想要电影详细信息 API,那么您可以考虑
OMDB API,即开放电影数据库。它返回 IMDB Ratings、IMDB Votes,并且还具有 Rotten Tomato 评级。
否则你可以使用
My Api Films允许您使用 IMDB ID 进行搜索,它返回详细信息,但有请求限制。
最近在 2012 年 SXSWi 上,在他们的“Mashery Lounge”中,有一个展位用于展示来自rovi的类似 IMDB 的 API 。它不是免费的 API,但根据我与之交谈的销售人员的说法,他们根据您的预算提供 rev share 或固定使用费。我还没有使用它,但它看起来很酷。
好的,我找到了这个 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; }
}
}
这是一个 Python 模块,提供从 IMDB 网站获取数据的 API
我非常有信心,您找到的应用程序实际上是从 Themoviedb.org 的 API 中获取信息的(他们从 IMDB 获取大部分内容)。他们有一个免费的开放 API,用于很多电影管理器/XMBC 应用程序。