کاربر:Ebrahim/bot
(تغییرمسیر از کاربر:Ebraminio/bot)
removecoord.js[ویرایش]
/*!
* Simple bot to remove extra {{Coord}}
* User:Ebraminio
*/
var Bot = require('nodemw'),
bot = new Bot('config.js'),
mybot = require('./mybot'),
summary = 'ربات: برداشتن الگوی مختصات اضافه',
category = 'صفحههای دارای برچسب مختصات ناقص',
$ = require('jquery');
function removeCoord(page) {
return $.when(mybot.getPageContent(page.title), mybot.getParsedPage(page.title)).pipe(function (content, parsed) {
console.log('');
console.log('A page is fetched: ' + page.title);
var newContent, defer = $.Deferred();
if (parsed.indexOf('cannot have more than one primary tag per page') !== -1) {
console.log('Start editing the page');
newContent = content.replace(/\{\{Coord\|[^<\}\n]+\}\}\n*/i, '');
if (content === newContent) {
defer.resolve('Page skipped');
} else {
bot.edit(page.title, newContent, summary, function (status) {
defer.resolve('An edit was: ' + status.result);
});
}
} else {
defer.resolve('Page skipped');
}
return defer.promise();
}).done(function (message) { console.log(message); });
}
bot.logIn(function () {
bot.getPagesInCategory(category, function (pages) {
pages.filter(function (page) { return page.ns === 0; }).reduce(function (defer, page) {
return defer.pipe(function () { return removeCoord(page); });
}, $.Deferred().resolve());
});
});
mybot.js[ویرایش]
/*!
* My bot library
* User:Ebraminio
*/
var $ = require('jquery'),
fs = require('fs'),
config = JSON.parse(fs.readFileSync('config.js'));
function post(data) {
return $.ajax({
dataType: "json",
url: 'http://' + config.server + config.path + '/api.php',
data: data,
type: 'POST'
});
}
function getFirstObjectValue(object) {
return object[Object.keys(object)[0]];
}
function getPageContent(title) {
return post({
action: 'query',
format: 'json',
titles: title,
prop: 'revisions',
rvprop: 'content'
}).pipe(function (result) {
return getFirstObjectValue(result.query.pages).revisions[0]['*'];
});
}
function getParsedPage(title) {
return post({
action: 'parse',
format: 'json',
page: title,
prop: "text"
}).pipe(function (result) {
return result.parse.text['*'];
});
}
module.exports = {
getPageContent: getPageContent,
getParsedPage: getParsedPage
};