کاربر:Ebrahim/commonsdupe

از ویکی‌پدیا، دانشنامهٔ آزاد

<syntaxhighlight lang="javascript"> /**

* @author User:Ebraminio
* @description Node.js script to retrieve dupe images with commons, temporary solution as join between dbs is not supported on labs yet
*/

var fs = require('fs'), ini = require('ini'), Q = require('q'), mysql = require('mysql');

var client = ini.parse(fs.readFileSync('../replica.my.cnf').toString()).client; var connection = mysql.createConnection({

 host: 'enwiki.labsdb',
 user: client.user,
 password: client.password,
 database: 'fawiki_p'

});

connection.connect(); connection.query('SELECT img_sha1, img_name FROM image', function (err, rows) {

 if (err)
   throw err;
 var batches = [];
 for (var i = 0; i < rows.length; i += 500) {
   var batch = {};
   for (var j = i; j < i + 500 && j < rows.length; ++j) {
     batch[rows[j].img_sha1.toString()] = rows[j].img_name.toString();
   }
   batches.push(batch);
 }
 var connection = mysql.createConnection({
   host: 'enwiki.labsdb',
   user: client.user,
   password: client.password,
   database: 'commonswiki_p'
 });
 connection.connect();
 var result = ['{| class="wikitable sortable"\n! !! محلی !! انبار'];
 batches.map(function (batch) {
   return function () {
     var defer = Q.defer();
     connection.query('SELECT img_sha1, img_name FROM image WHERE ' +
             "img_sha1 IN ('" + Object.keys(batch).join("', '") + "')", function (err, rows) {
       if (err)
         throw err;
       for (var i in rows) {
         var local = batch[rows[i].img_sha1.toString()].replace(/_/g, ' ');
         if (local === "Wiki.png") { // Wiki.png should be local
           continue;
         }
         var commons = rows[i].img_name.toString().replace(/_/g, ' ');
         result.push("| " + (local === commons ? "همنام" : ) +
                 " || File:" + local + "" +
                 " || commons:File:" + commons + "");
       }
       defer.resolve();
     });
     return defer.promise;
   };
 }).reduce(function (defer, job) {
   return defer.then(job);
 }, Q()).then(function () {
   fs.writeFileSync('dupes.txt', result.join('\n|-\n') + '\n|}');
   connection.end();
 });

}); connection.end();