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/a/aa.json
- https://v2.sg.media-imdb.com/suggests/h/hello.json (alternate)
- 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 the function name they choose (which is in the
imdb${searchphrase} format). Alternatively, one could strip or replace the padding via a local proxy.
// 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();
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.