

JavaScript MediaWiki API
A simple way to access MediaWiki API via JavaScript with wikitext parser.
This is basically a modern syntax version of CeJS MediaWiki module. For example, using async functions.
Features
- Read / edit pages.
- Get list of categorymembers, pages transclude specified template, and more...
- Auto-limited editing rate.
- Parse wikitext / pages. You may modify parts of the wikitext, then regenerate the page just using .toString(). See wikitext parser examples.
Installation
Install node.js first.
npm install wikiapi
Usage
Here lists some examples of this module.
As node.js module
const Wikiapi = require('wikiapi');
(async () => {
const wiki = new Wikiapi(user, password, 'en');
})();
(async () => {
const wiki = new Wikiapi('en');
let page_data = await wiki.page('Universe', {
});
console.log(page_data.wikitext);
})();
(async () => {
const wiki = new Wikiapi;
let page_data = await wiki.page('Universe', {
revisions: 2
});
console.log(page_data.wikitext);
})();
(async () => {
const enwiki = new Wikiapi;
await enwiki.login('bot name', 'password', 'en');
const SB_page_data = await enwiki.page('Wikipedia:Sandbox');
const parsed = SB_page_data.parse();
parsed.each('template', template_token => {});
await enwiki.edit(parsed.toString(), {bot: 1, minor: 1, nocreate: 1});
await enwiki.edit(function(page_data) {
return page_data.wikitext
+ '\nTest edit using {{GitHub|kanasimi/wikiapi}}.';
}, {bot: 1});
await enwiki.edit('Just replace by this wikitext', {bot: 1, minor: 1, nocreate: 1});
console.log('Done.');
})();
(async () => {
const enwiki = new Wikiapi;
await enwiki.login('bot name', 'password', 'en');
await enwiki.edit_page('Wikipedia:Sandbox', function(page_data) {
return page_data.wikitext
+ '\nTest edit using {{GitHub|kanasimi/wikiapi}}.';
}, {bot: 1, nocreate: 1, minor: 1});
console.log('Done.');
})();
(async () => {
const enwiki = new Wikiapi('en');
const link_from = await wiki.redirects_here('ABC');
await wiki.for_each_page(link_from, page_data => {
return Wikiapi.skip_edit;
return 'You may also modify page contents for each page';
}, {
summary: 'summary',
bot: 1, nocreate: 1, minor: 1
});
})();
(async () => {
const zhwiki = new Wikiapi('zh');
await zhwiki.login('user', 'password');
let page_data = await zhwiki.page('Universe');
page_data.parse().each('template',
token => console.log(token.name));
})();
(async () => {
const wiki = new Wikiapi('en');
const page_data = await wiki.page('JavaScript');
const parsed = page_data.parse();
let infobox;
parsed.each('template', template_token => {
if (template_token.name.startsWith('Infobox')) {
infobox = template_token.parameters;
return parsed.each.exit;
}
});
for (const [key, value] of Object.entries(infobox))
infobox[key] = value.toString();
console.log(infobox);
})();
(async () => {
const wiki = new Wikiapi;
wiki.listen(function for_each_row() { ... }, {
delay: '2m',
filter: function filter_row() { ... },
with_diff: { LCS: true, line: true },
namespace: '0|talk',
});
})();
(async () => {
const wiki = new Wikiapi;
let page_data = await wiki.data('Q1');
console.assert(CeL.wiki.data.value_of(page_data.labels.zh) === '宇宙');
})();
(async () => {
const wiki = new Wikiapi;
let data = await wiki.data('Universe', 'P1419');
console.assert(data.includes('shape of the universe'));
})();
(async () => {
const wiki = new Wikiapi;
let list = await wiki.categorymembers('Chemical elements');
console.log(list);
await wiki.for_each_page(
list,
page_data => { });
})();
(async () => {
const wiki = new Wikiapi;
let list = await wiki.embeddedin('Template:Periodic table');
console.log(list);
})();
(async () => {
const wiki = new Wikiapi;
await wiki.login('user', 'password', 'test');
let result = await wiki.upload_file({ file_path: '/local/file/path', comment: '', text: '' });
result = await wiki.upload_file({ media_url: 'https://media.url/name.jpg', comment: '', text: '' });
})();
(async () => {
delete CeL.wiki.query.default_maxlag;
const wiki = new Wikiapi;
await wiki.login('user', 'password', 'test');
let entity = await wiki.data('Q7');
await entity.modify({ claims: [{ P17: 'Q213280' }] });
await entity.modify({ claims: [ { language: 'en', country: [, 'Test Country 1'] } ] });
await entity.modify({ claims: [ { language: 'en', country: [, 'Test Country 1'], remove: true } ] });
await entity.modify({ labels: [ { language: 'zh-tw', value: '地球' } ] });
})();
More examples: Please see test.js.
OS support
Platform | support |
---|
Windows | ✔️ |
macOS | ✔️ |
UNIX, Linux | ✔️ |
See also
For old style JavaScript, or general environment usage, please see wikibot.
Contact
Contact us at GitHub.
