воскресенье, 23 февраля 2014 г.

Быстро удалить ботов из группы

Плохо, когда в списке подписчиков группы/паблика ВКонтакте много заблокированных аккаунтов - «собачек», это вызывает недоверие пользователей. Собачек надо удалять. Но при количестве подписчиков свыше нескольких тысяч вручную это делать очень долго и утомительно. Все можно автоматизировать - и очень просто:)

Я написал специальный JavaScript код для определения собачек и их автоматического удаления. Код можно выполнить в консоли Chrome Developer, консоли Firebug или - что проще для большинства - просто скопировав его в адресную строку на открытой странице редактирования участников паблика.

Выполняется код некоторое время - его можно запустить и заняться своими делами, после окончания работы нам покажут сообщение со статистикой о количестве собачек в паблике и вопросом, хотим ли мы их автоматически удалить или хотим оставить.



Простейший способ запустить скрипт - открыть страницу редактирования подписчиков паблика и скопировать код в адресную строку, дополнив его в начале текстом javascript:. Таким образом, текст в адресной строке будет выглядеть как-то так: javascript:var timeout = 20; var head = ... . Можно создать закладку с этим кодом и впоследствии вызывать ее быстро со страницы одним кликом.
Код:

var timeout = 20;
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.type= 'text/javascript';
script.src= 'https://code.jquery.com/jquery-2.1.0.min.js';
head.appendChild(script);

function checkJQLoaded(){return typeof $ != 'undefined' && $.fn != 'undefined';}
var loadJQ = setInterval(function () {
    timeout--;
    if (checkJQLoaded()) {
      loadAllAccounts();
      clearInterval(loadJQ);
      return;
    }
    else if (timeout > 0) {
      return;
    }
    else {
      alert('Что-то я не могу загрузить JQuery. '
            + 'Попробуйте обновить страницу и сделать всё заново!');
      clearInterval(loadJQ);
    }
}, 100);


var allCnt = 0;
var dogsCnt = 0;
var accountsCnt;

function loadAllAccounts(){
    var initialHeight = 0; var stops = 0;
    accountsCnt = $('div#gedit_users_summary_members').text()
                  .replace(/\D/g, '');
    var sInterval = setInterval(function(){
        if (initialHeight == document.body.clientHeight
            && $('img.gedit_user_img').length+15 > accountsCnt){
             stops++;
             if (stops > 30
                 && $('img.gedit_user_img').length+15 > accountsCnt) {
                   clearInterval(sInterval); go(); return;
             }
         } else {
             stops = 0;
         }
         initialHeight = document.body.clientHeight;
         $('a#gedit_users_more_members').click();
         scrollTo(0, 9999999999);
    }, 100);
}

function go(){
  $('img.gedit_user_img').each(function(){
    var src = $(this).attr('src');
    allCnt++;
    if (src != '/images/deactivated_200.png' && src != '/images/deactivated_100.png')
      $(this).parent().parent().parent().hide();
    else
      dogsCnt++;
    });

    if (confirm('Всего обработано подписчиков: ' + allCnt
        + '; собачек: '
         + dogsCnt + ' (' + (100*dogsCnt/allCnt).toFixed(2) + '%)\n'
         + 'Удаляем собачек?')){
        var dogsArray = $('img[src="/images/deactivated_200.png"],img[src="/images/deactivated_100.png"]');
        var currentDogIndex = 0;
        var dogsInterval = setInterval(
          function(){
            if (!dogsArray[currentDogIndex]){
              clearInterval(dogsInterval);
              return;
            }

            $(dogsArray[currentDogIndex]).parent().parent().parent()
                .find("a.gedit_user_action").last().click();
            currentDogIndex++;
          },
        1000
      );
    }
}