WikiJs is a node.js library which serves as an interface to Wikipedia (or any MediaWiki).
What can it do?
- Search wiki articles
- Fetch article content
- Find all links/images/categories in a article page
- Get parsed information about articles
- Find articles by geographical location
- and much more!
Documentation
Install
npm install wikijs
Usage
import wiki from 'wikijs';
// const wiki = require('wikijs').default;
wiki()
.page('Batman')
.then(page => page.info('alterEgo'))
.then(console.log); // Bruce Wayne
Build yourself
You can run these commands in order to build and test WikiJs:
git clone git@github.com:dijs/wiki.git
cd wiki
npm install
npm run build
npm test
Usage with webpack
In order for webpack to build wikijs properly, you must add an option to your webpack configuration file. Documentation
externals: {
"isomorphic-fetch": "fetch"
}
Usage with other MediaWiki's
You can use the API options configuration:
wiki({
apiUrl: 'https://awoiaf.westeros.org/api.php',
origin: null
}).search('Winterfell');
Usage with other languages
You just need to change the API to the proper URL. This is normally just changing the subdomain of wikipedia.
wiki({ apiUrl: 'https://es.wikipedia.org/w/api.php' })
.page('Cristiano Ronaldo')
.then(page => page.info())
.then(console.log);
Read more about Cross Domain Requests here
Usage with custom headers
If you need to pass authentication headers or anything else.
wiki({
headers: {
Cookie: 'name=value; name2=value2; name3=value3'
}
}).search('Winterfell');
Chain data requests together for more efficient applications
Query a specific page:
wiki()
.page('albert einstein')
.then(page =>
page
.chain()
.summary()
.image()
.links()
.request()
);
Or query many pages at once:
wiki()
.chain()
.geosearch(52.52437, 13.41053)
.summary()
.image()
.coordinates()
.request();
Parsing Wiki Infobox Data
The code Wikipedia uses for infobox data is strange and complex. So I have split the parsing code into another library. You can find it here.
We not only parse out the information, but also try to transform the data into a convenient structure for data processing.
Contribute!
I always welcome help. Please just stick to the lint rules and write tests with each feature/fix.
Artwork
Thanks to Heather van der Dys for the awesome logo!