Getting a definition from Wikipedia using jQuery requires only a PHP script used as a proxy to perform this task. This script will return a JSON object that we can parse with jQuery. I've used a general purpose function taken from this excellent article and I've actually modified it in order to make it return a JSON object. The PHP script is as follows:
header('Content-Type: application/json');
function getWikiDefinition($def)
// http://www.barattalo.it/2010/08/29/php-bot-to-get-wikipedia-definitions/
{
$url = 'http://en.wikipedia.org/w/api.php?action=opensearch&search='.urlencode($def).'&format=xml&limit=1';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPGET, TRUE);
curl_setopt($ch, CURLOPT_POST, FALSE);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, FALSE);
curl_setopt($ch, CURLOPT_VERBOSE, FALSE);
curl_setopt($ch, CURLOPT_REFERER, "");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_MAXREDIRS, 4);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; he; rv:1.9.2.8) Gecko/20100722 Firefox/5.0.0');
$page = curl_exec($ch);
$xml = simplexml_load_string($page);
if((string)$xml->Section->Item->Description) {
return array('term' => (string)$xml->Section->Item->Text,
'desc' => (string)$xml->Section->Item->Description,
'url' => (string)$xml->Section->Item->Url);
} else {
return '';
}
}
$definition = getWikiDefinition($_GET['d']);
echo json_encode($definition);
This script expects a GET parameter named d, which contains our definition term. So we can set up the following HTML form:
<form action="wikipedia/get.php" method="get" id="search"> <div> <label for="d">Term:</label> <input type="text" name="d" id="d" /> <input type="submit" name="submit" id="submit" value="Get definition" /> </div> </form>
Using jQuery now is very easy. In fact, the JSON object has this structure:
{
"term": "...",
"desc": "...",
"url": "..."
}
Here's the jQuery's code:
$('#search').submit(function(event) {
var $form = $(this);
var term = $('#d', $form).val();
$.ajax({
type: 'GET',
dataType: 'json',
url: $form.attr('action'),
data: 'd=' + term,
success: function(data) {
var html = '';
html += '<div class="def">';
html += '<h2>' + data.term + '</h2>';
html += '<p>' + data.desc + '</p>';
html += '<div><a href="' + data.url + '">'
+ data.url + '</a></div>';
html += '</div>';
$(html).appendTo($form);
}
});
event.preventDefault();
});
You can see the demo below.