Skip to content

Instantly share code, notes, and snippets.

@purcell
Created December 14, 2011 17:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save purcell/1477475 to your computer and use it in GitHub Desktop.
Save purcell/1477475 to your computer and use it in GitHub Desktop.
//////////////////////////////////////////////////////////////////////
// Wikipedia
//////////////////////////////////////////////////////////////////////
(function(w) {
var call_wikipedia_api = function(data, callback) {
$.ajax({
url: "http://en.wikipedia.org/w/api.php",
data: $.extend({ format: "json" }, data),
dataType: "jsonp",
success: callback
});
};
w.wikipedia = {
full_url: function(title, callback) {
if (!title) return callback(null);
call_wikipedia_api(
{action: "query", prop: "info", inprop: "url", titles: title },
function(data) {
var pages = data.query.pages;
for (var p in pages) // Should only be 1 result
return callback(p == "-1" ? null : pages[p].fullurl);
}
);
},
title_search: function(term, callback) {
if (!term) return callback([]);
call_wikipedia_api(
{ action: "opensearch", search: term },
function(data) {
callback(data[1]);
}
);
},
categories_for_title: function(title, callback) {
if (!title) return callback(null);
call_wikipedia_api(
{ action: "query", prop: "categories", cllimit: 500, titles: title },
function(data) {
var pages = data.query.pages;
for (var p in pages)
return callback(_.pluck(pages[p].categories, 'title'));
return callback([]);
}
);
},
resolve_redirect: function(title, callback) {
if (!title) return callback(null);
call_wikipedia_api(
{ action: "query", redirects: "1", titles: title },
function(data) {
var redirects = data.query.redirects;
if (redirects && redirects[0].from == title)
callback(redirects[0].to);
}
);
}
};
})(window);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment