Parsing Wikipedia Articles with Node.js and jQuery
github.com
github.com
E.g.
about {{convert|55|km|0|abbr=on}} east of
will turn into about 55 km (34 mi) east of
and {{As of|2010|7|5}}
will turn into As of 5 July 2010
and so on (there are thousands of relevant templates). It's simply not possible to get the full plain text without processing the templates, and the only system that can correctly and completely parse the templates is MediaWiki itself.Yes it's a huge system entirely written in PHP, but you can make a simple command line parser with it pretty easily (though it took me quite a while to figure out how). The key points are to put something like
$IP = strval(getenv('MW_INSTALL_PATH')) !== ''
? getenv('MW_INSTALL_PATH')
: '/usr/share/mediawiki';
require_once("$IP/maintenance/commandLine.inc");
at the start of it, and then use the Parser class. You get HTML out, but it's simple and well-formed (to get text, start with the top level p tags).To get it to process templates, get a Wikipedia dump, extract the templates, and use the mwdumper tool to import them into your local MediaWiki database.
I don't know if this is the best or "right" way to do it, but it's the only way I've found that actually works.
Could you please explain this more? Specifically, what is meant by "extract" the templates? From what I gather from your message, you are proposing using MediaWiki itself to process the templates and output more of a plain text (within the HTML output).
<page>
<title>Template:Convert</title>
...
</page>
It's these page tags that need to be copied to a new XML file, along with the header and footer from the original.From what I gather from your message, you are proposing using MediaWiki itself to process the templates and output more of a plain text (within the HTML output).
Correct. The MediaWiki parser outputs HTML containing all the text to be displayed, including that generated by templates.
Is there a documentation of at least the relevant ones somewhere?
http://en.wikipedia.org/w/api.php
It's part of mediawiki and available for each and every wikipedia subsite – as far as I can tell. We are using this as well to autocomplete data. And it works really well.
I prefer this method over 'scraping' the content.
Everything should be fine as long as you respect their 1 request per second rule and their robots.txt