کاربر: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
};