IMDB API Lookup JQuery Plugin
I spent a few hours last night writing my first ever JQuery plugin, only to realise today that it's completely useless to me! I wanted an easy way to populate the "Add medium" form on RustyShark, as it tends to take me a few hours every time I add a new review (and therefore medium) to the website (y'know, looking up information, finding images, finding box art, editing the review etc), and I wanted to increase my production rate :)
IMDB offers its data for free, for non commercial use, but only in text files. I found an API at http://www.imdbapi.com/, which has gone a long way to simplifying and serializing the information in to something useful, so I decided to use this opportunity to teach myself how to write JQuery plugins. Below is my resulting plugin, queryable by Title + Year, or IMDB ID:
Usage:
Or:
Please read http://www.imdbapi.com/ for notes on usage.
It seems to work for me at the moment, but treat it as completely untested - I've only tried it in Chrome, and I haven't tested the IMDB ID method at all. I just wanted to put the code somewhere before I removed it from the JS in RustyShark :)
IMDB offers its data for free, for non commercial use, but only in text files. I found an API at http://www.imdbapi.com/, which has gone a long way to simplifying and serializing the information in to something useful, so I decided to use this opportunity to teach myself how to write JQuery plugins. Below is my resulting plugin, queryable by Title + Year, or IMDB ID:
; (function ($) {
$.fn.imdbLookup = function (options) {
// Default options
var defaults = {
complete: function (imdbData) {
},
title: null,
date: null,
imdbId: null
};
// Overwrite defaults with passed options
options = $.extend(defaults, options);
return this.each(function () {
var $this = $(this);
$this.click(function () {
// Get defaults
var title = (options.title != null && options.title.val().length > 0) ? options.title.val().trim() : null;
var date = (options.date != null && options.date.val().length > 0) ? $.parseDate(options.date.val().trim()) : null;
var imdbId = (options.imdbId != null && options.imdbId.val().length > 0) ? options.imdbId.val().trim() : null;
if ((title == null || date == null) && imdbId == null) return;
var year = date.getFullYear();
var qs;
if (title != null && date != null) {
qs = {
t: title,
y: year
};
} else {
qs = {
i: imdbId
};
}
$.ajax({
url: 'http://www.imdbapi.com/',
type: "GET",
dataType: "json",
data: $.extend({
r: 'JSON',
plot: 'short',
tomatoes: true
}, qs),
success: function (imdbData) {
options.complete(imdbData);
}
});
});
});
};
})(jQuery);
Usage:
$("#MyElement").imdbLookup({ complete: function (imdbData) { alert(imdbData); // Do something with the resulting object }, title: $("#Title"), date: $("#ReleaseDate") });
Or:
$("#MyElement").imdbLookup({ complete: function (imdbData) { alert(imdbData); // Do something with the resulting object }, imdbId: $("#imdbId") });
Please read http://www.imdbapi.com/ for notes on usage.
It seems to work for me at the moment, but treat it as completely untested - I've only tried it in Chrome, and I haven't tested the IMDB ID method at all. I just wanted to put the code somewhere before I removed it from the JS in RustyShark :)