wikibot

GitHub commit activity the past week, 4 weeks, year

CeJS MediaWiki bots demo

Some MediaWiki bot examples including wikipedia, wikidata using MediaWiki module of CeJS library and wikiapi. 採用 CeJS MediaWiki 自動化作業用程式庫來製作 MediaWiki (維基百科/維基數據) 機器人的範例。

You might also be interested in wikiapi.

Node.js usage

Installation

  1. Please install node.js and 7-Zip 18.01+.
  2. Creating a working directory and extracting files via executing commands under Windows:
    npm i gh-updater
    node_modules\.bin\gh-updater kanasimi/wikibot
    cd wikibot-master
    npm i wikiapi
    copy "wiki configuration.sample.js" "wiki configuration.js"
    

Or under Linux:

npm i gh-updater
node_modules/.bin/gh-updater kanasimi/wikibot
cd wikibot-master
npm i wikiapi
cp "wiki configuration.sample.js" "wiki configuration.js"
  1. Setup wiki configuration.js: Edit wiki configuration.js and fill username / password.

Execution

Let’s try it:

$ node
// Load CeJS library.
require('cejs');

// Load modules.
CeL.run([ 'application.net.wiki', 'application.net.wiki.data', 'application.net.wiki.admin' ]);

// Set default language. 改變預設之語言。
CeL.wiki.set_language('en');

// Set up the wiki instance.
var wiki = CeL.wiki.login(user_name, password, 'en');

wiki
// Select page(s) and get the contents of the page(s).
.page('Wikipedia:Sandbox')

// Replace the contents of a page.
.edit('wikitext to replace', {
	nocreate : 1
})

// Add a new section to a normal page or a Flow page.
.edit(': text to add.', {
	section : 'new',
	sectiontitle : 'Sandbox test section',
	summary : 'Sandbox test edit (section)',
	nocreate : 1
})

// Modify the page contents.
.edit(function(page_data) {
	/** {String}page title */
	var title = CeL.wiki.title_of(page_data),
	/** {String}page content, maybe undefined. */
	content = CeL.wiki.content_of(page_data);
	// append a new section
	return content + '\n== New section ==\n: text to add.';
}, {
	summary : 'summary'
});

wiki.categorymembers(category_title, function(page_data_list, error) {
	;
}, {
	limit : 'max'
});

Wikidata example:

// Cache the id of "性質" first. 先快取必要的屬性id值。
CeL.wiki.data.search.use_cache('性質', function(id_list) {
	// Get the id of property '性質' first.
	// and here we get the id of '性質': "P31"
	CeL.log(id_list);
	// 執行剩下的程序. run rest codes.
}, {
	must_callback : true,
	type : 'property'
});

// ----------------------------
// rest codes:

// Set up the wiki instance.
var wiki = CeL.wiki.login(user_name, password, 'zh');

wiki.data('維基數據沙盒2', function(data_JSON) {
	data_JSON.value('性質', {
		// resolve wikibase-item
		resolve_item : true
	}, function(entity) {
		// get "Wikidata Sandbox"
		CeL.log(entity.value('label', 'en'));
	});
});

// Old style. The same effect as codes above.
wiki.data('維基數據沙盒2', function(data_JSON) {
	wiki.data(data_JSON.value('性質'), function(entity) {
		// via wikidata_entity_value()
		// get "维基数据测试沙盒"
		CeL.log(entity.value('label'));
	});
});

// edit properties
wiki.edit_data(function(entity) {
	// add new / set single value with references
	return {
		生物俗名 : '維基數據沙盒2',
		language : 'zh-tw',
		references : {
			臺灣物種名錄物種編號 : 123456,
			// [[d:Special:AbuseFilter/54]]
			// 導入自 : 'zhwikipedia',
			載於 : '臺灣物種名錄物種',
			來源網址 : 'https://www.wikidata.org/',
			檢索日期 : new Date
		}
	};

	// set multiple values
	return {
		labels : {
			ja : 'ウィキデータ・サンドボックス2',
			'zh-tw' : [ '維基數據沙盒2', '維基數據沙盒#2', '維基數據沙盒-2' ]
		},
		descriptions : {
			'zh-tw' : '作為沙盒以供測試功能'
		},
		claims : [ {
			生物俗名 : [ 'SB2#1', 'SB2#2', 'SB2#3' ],
			multi : true,
			language : 'zh-tw',
			references : {
				臺灣物種名錄物種編號 : 123456
			}
		}, {
			読み仮名 : 'かな',
			language : 'ja',
			references : {
				'imported from Wikimedia project' : 'jawikipedia'
			}
		} ]
	};

	// remove specified value 生物俗名=SB2
	return {
		生物俗名 : 'SB2',
		language : 'zh-tw',
		remove : true
	};

	// to remove ALL "生物俗名"
	return {
		生物俗名 : CeL.wiki.edit_data.remove_all,
		language : 'zh-tw'
	};

}, {
	bot : 1,
	summary : 'bot test: edit properties'
});

Screenshot

Screenshot of WPCHECK.js (fix_16 only):

Features of CeJS MediaWiki module