ChatGPT解决这个技术问题 Extra ChatGPT

Does IMDB provide an API? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers. We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations. Closed 5 years ago. Improve this question

I recently found a movie organizer application which fetches its data from the IMDB database.

Does IMDB provide an API for this, or any third party APIs available?

Is there any API for reviews on IMDB ?
To just link IMDB use following format.<a href="http://www.imdb.com/title/{{{ $imdb_id }}}">{{{ $imdb_id }}}</a> BTW: imdb_id follows this pattern: tt0000000
whats the name of this movie organizer application? I am looking for something like that
@Airlike Possibly Plex. I know for sure that one organizes movies and can retrieve data from IMDB.

T
Timo Tijhof

The IMDb has a public API that, although undocumented, is fast and reliable (used on the official website through AJAX).

Search Suggestions API

https://sg.media-imdb.com/suggests/h/hello.json

https://v2.sg.media-imdb.com/suggests/h/hello.json (as of 2019) Format: JSON-P Caveat: It's in JSON-P format, and the callback parameter can not customised. To use it cross-domain you'll have to use their function name for the callback (which is in the imdb${searchphrase} format). Alternatively, one could strip or replace the padding via a local proxy.

Format: JSON-P

Caveat: It's in JSON-P format, and the callback parameter can not customised. To use it cross-domain you'll have to use their function name for the callback (which is in the imdb${searchphrase} format). Alternatively, one could strip or replace the padding via a local proxy.

https://v2.sg.media-imdb.com/suggestion/h/hello.json (as of 2020) Format: JSON Caveat: It's not CORS-enabled. This is fine for use in apps and server-side scripts. For use in a web app, you'll need to route it through a simple proxy (and consider enabling caching, too!)

Format: JSON

Caveat: It's not CORS-enabled. This is fine for use in apps and server-side scripts. For use in a web app, you'll need to route it through a simple proxy (and consider enabling caching, too!)

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

Advanced Search

Name search (json): http://www.imdb.com/xml/find?json=1&nr=1&nm=on&q=jeniffer+garner

Title search (xml): http://www.imdb.com/xml/find?xml=1&nr=1&tt=on&q=lost

Format: XML

Upside: Supports both film titles and actor names (unlike Suggestions API).

Beware that these APIs are unofficial and could change at any time!

Update (January 2019): The Advanced API no longer exists. The good news is, that the Suggestions API now supports the "advanced" features of searching by film titles and actor names as well.


RE: The JSONP API not gracefully falling back, (at least) it does return an HTTP error code, but I agree that it's funny that the response body is XML.
I recently noticed that it also includes an 'i' property for images. The url mentioned therein however is a very large image (likely the original). To get a thumbnail, IMDb uses the following: if (ua.i) { c.img = { src: ua.i[0].replace("._V1_.jpg", "._V1._SX40_CR0,0,40,54_.jpg"), width: 40, height: 54 } }.
could you not just specify jsonp with.Ajax if you getting json with jquery and i think getjson has been deprecated even when this was written it was deprecated i do believe
@ChrisMcGrath: I hadn't thought about using jQuery.ajax jsonpCallback, I've added it to the answer, Thanks! As for $.getJSON: No, that has most certainly not been deprecated. It is just a small wrapper around $.ajax.
Does anyone know how to get included images in the advanced search? Seems they only come with the suggestions...
b
bfritz

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

edit: due to legal issues had to move the service to a new domain :)


That's awesome, not sure if this is actually yours or you just found it but would love to see something around uptime stats so I could know how much I can count on it :D
In case anyone is wondering, this is not the official API. See Pekka or Krinkle answers for that.
its really slow..;(
@IanDavis, I'm currently working on getting a new faster/bigger dedicated server for the API, Which isn't cheap! I've almost got enough donations to acquire this within the next few days. The API is getting over 2 million requests a day!
@OptimusCrime I had an issue the other day with IP's from the 85.XXX.XXX.XXX range and had to temporarily block ALL of them until I could get things under control. Sadly this is one of the trade-offs I have to deal with by not requiring API keys, people tend to just abuse the hell out of it.
P
Pekka

IMDB themselves seem to distribute data, but only in text files:

http://www.imdb.com/interfaces

there are several APIs around this that you can Google. Screen scraping is explicitly forbidden. A official API seems to be in the works, but has been that for years already.


How is it possible for screen scraping to be forbidden?
@omouse From the terms: 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. that doesn't make these terms automatically enforceable in every jurisdiction, but they are in many.
Yes but this dialog was directed at "Robots". Apparently my robot doesn't understand English so oh well.
As of December 2017, these files are no longer being updated by IMDb. There is a new API that supplies data in a new format. While easier to parse, this new format is a very small subset of the previous format.
I realize this is an extremely old question and answer. However, data mining publicly accessible data is not legally enforceable if you didn't sign a EULA. Even if you did, if the information is publicly accessible through other means, the EULA is still not legally binding. A major decision was recently made to this very effect against LinkedIn. See: eff.org/deeplinks/2019/09/… IANAL but the EFF are. It's a very sensible ruling. If you put information on the Internet, you should expect people to do stuff with it.
J
Johann

Another legal alternative to get movie info is the Rotten-Tomatoes API (by Fandango).


Is the rotten tomatoes API free to use in a commercial application? Say, for example, to have users get the details of a movie from its title?
It doesn't look like they're making any distinction between commercial or non-commercial app. You can always have a look at their TOS here: developer.rottentomatoes.com/apps/tos Although you will be limited to 10,000 calls per day and 10 per seconds
If you are providing a non-commercial program and need more than 10,000 calls per day, you can talk to them about licencing. The terms are fairly simple and easy to comply with, in that you have to display their logo and/or a particular phrase of wording for the rating.
WTF? "The API is intended for use in the U.S. only. Deploying content outside of this territory must be approved by the Rotten Tomatoes team. The API may NOT be shared with any third parties."
@DanDascalescu What a pity. I was going to use it outside de US
h
hdorio

What about TMDb API ?

You can search by imdb_id with GET /find/{external_id}

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


Requires a registration and a 3 business day approval process though
tmdb api can use the dvd's unique id to lookup the imdb_id, if that helps. Assuming they have it listed, of course. dvdid.info might help, too.
vrinek - wrong, it sent me API key immediately.
It's no problem to get an API key for this. Have been using one for years, and its API is well designed.
@Kostas Not for development account. The dev account is instantly registered.
M
MRT

Yes, but not for free.

.....annual fees ranging from $15,000 to higher depending on the audience for the data and which data are being licensed.

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


appears it's free for "personal" use only otherwise you have to contact them...wow we really need an open equivalent of imdb, though I suppose tmdb is close...
hi, this is not really an answer to the question, more a comment to above.
@IanVaughan, I believe my answer directly addresses this question: Q: "Does IMDB provide an API for this...?". A: "Yes...[link to data licensing info]." It's not my fault, IMDB doesn't publicly document an API reference.
Sorry, I think you are right, I stand corrected. Apologies.
O
Omertron

There is a JSON API for use by mobile applications at http://app.imdb.com

However, the warning is fairly severe:

For use only by clients authorized in writing by IMDb. Authors and users of unauthorized clients accept full legal exposure/liability for their actions.

I presume this is for those developers that pay for the licence to access the data via their API.

EDIT: Just for kicks, I wrote a client library to attempt to read the data from the API, you can find it here: api-imdb

Obviously, you should pay attention to the warning, and really, use something like TheMovieDB as a better and more open database.

Then you can use this Java API wrapper (that I wrote): api-themoviedb


I will write your library for NodeJS. Thank you for sharing!
How could someone get API key for using it?
m
markiv

Found this one

IMDbPY is a Python package useful to retrieve and manage the data of the IMDb movie database about movies, people, characters and companies.

http://imdbpy.sourceforge.net/


It's also available from PyPi: pypi.org/project/IMDbPY
D
Dan Dascalescu

https://deanclatworthy.com/tools.html is an IMDB API but has been down due to abuse.


unfortunately, it will be closed down soon. Do you know how does it work?
It only offers a very limited search too, by movie title only
Checkout malhar2010.blogspot.com/2011/02/… for using IMDb api.
As the author of this API, I should point out that the above comments are now redundant as it's not being closed down, and that you can now search by IMDB ID.
for free imdb API see this 99webtools.com/get-movie-info-imdb.php
P
PirateApp

IMDB doesn't seem to have a direct API as of August 2016 yet but I saw many people writing scrapers and stuff above. Here is a more standard way to access movie data using box office buzz API. All responses in JSON format and 5000 queries per day on a free plan

List of things provided by the API

Movie Credits Movie ID Movie Images Get movie by IMDB id Get latest movies list Get new releases Get movie release dates Get the list of translations available for a specific movie Get videos, trailers, and teasers for a movie Search for a movie by title Also supports TV shows, games and videos


A
Akshay Khale

If you want movie details API then you can consider

OMDB API which is Open movies Database. It returns IMDB Ratings, IMDB Votes and it also has Rotten Tomato rating.

Or else You can use

My Api Films which allows you to search with IMDB ID, it returns detailed information but it has request limits.


佚名

that deanclatworthy still seems to work and there's another one: http://imdbapi.poromenos.org/


and (I almost wrote, "even better!", the developer-caveman-instinct is strong ;-) the latter's source is at github.com/skorokithakis/imdbapi
B
Brett Pennings

Here is a simple solution that fetches shows by name based on the query from Krinkle:

You can get around the same-origin policy by having your server fetch the URL instead of trying to fetch it directly with AJAX and you don't have to use JSONP to do it.

Javascript (jQuery):

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

PHP (in file ajax.php):

$q = urlencode($_GET["q"]);
echo file_get_contents("http://www.imdb.com/xml/find?json=1&nr=1&tt=on&q=$q");

b
bpapa

Recently at SXSWi 2012, in their "Mashery Lounge", there was a booth for an IMDB-like API called from rovi. It's not a free API, but according to the sales guy I talked to they offer either a rev share or a flat fee for usage, depending on your budget. I haven't used it yet but it seems pretty cool.


no longer alive.
T
ThePCWizard

NetFilx is more of personalized media service but you can use it for public information regarding movies. It supports Javascript and OData.
Also look JMDb: The information is basically the same as you can get when using the IMDb website.


Netflix shut down their public API almost a year ago. Since they took down the entire developer sub-domain, including the post saying they were shutting it down, here's a link to a news piece on it: gigaom.com/2014/11/14/…
S
Saeed Masoumi

If you need TV information you can try TVmaze.com.

It's free, fast and reliable. Here is the developer page:

http://api.tvmaze.com/


f
fubo

ok i found this one IMDB scraper

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

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

alternatively a imdbapi.org implementation for 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; }
    }

}

It looks good but according to IMDB, it's forbidden to use this kind of tools. More information help.imdb.com/article/imdb/general-information/…
v
vikas

Here is a Python module providing API's to get data from IMDB website

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


That module uses screen-scraping, which is against the TOS
Using IMDB at all in an app is against their TOS, apparently...
ya, you have to contact them and request to use their content in your commercial application. It says in their TOS you have to have written consent from IMDB.
M
Mike

Im pretty confident that the application you found actually gets their information form Themoviedb.org's API(they get most of there stuff from IMDB). They have a free open API that is used alot of the movie organizer/XMBC applications.