fbpx

Фокусы для работы с продвижением в Facebook

18 апреля

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

Как найти и удалить ботов у себя в друзьях

У меня в друзьях чуть более 700 человек и я 99% из этих людей не знаю. Часто ко мне добавляются разные боты, которых я отлавливаю и удаляю вручную. Но что делать, если друзей много, и вручную мы просто устанем всех удалять? Для этого подойдет приведенный ниже код:

var accountTag = 'own_remove_account_tag';
var css = " \
    .own_popup { \
        width: 50%; min-width: 676px; height: 80%; padding: 15px; \
        background: white; border: 1px solid #eee; border-radius: 15px; \
        z-index: 999999; position: fixed; margin: auto; \
        top: 50px; left: 0; right: 0; \
        -webkit-box-shadow: 0px 3px 38px 0px rgba(50, 50, 50, 0.32); \
        -moz-box-shadow:    0px 3px 38px 0px rgba(50, 50, 50, 0.32); \
        box-shadow:         0px 3px 38px 0px rgba(50, 50, 50, 0.32); \
    } \
    .own_success { \
        position: absolute; padding: 20px; top: 10%; width: 50%; left: 0; right: 0; \
        background: rgba(177, 253, 185, 0.7); border-radius: 5px; \
        font-size: 2em; text-align: center; z-index: 999; \
        margin-left: auto; margin-right: auto; display: none;\
    } \
    .own_friends_list { \
        overflow: hidden; overflow-y: scroll; \
        width: 100%; height: 95%; margin-top: 10px; \
        font-size: 1.3em; border-top: 1px solid rgba(204, 204, 204, 0.7); \
    } \
    #own_do_delete { font-weight: bold; text-transform: uppercase; font-size: 1.1em; cursor: pointer; float: right; \
        border-radius: 5px; background: rgba(255, 0, 0, 0.44); padding-left: 5px; padding-right: 5px; color: white; \
    } \
    .own_inactive { opacity: 0.5; pointer-events: none; } \
    #own_header { font-size: 1.3em; } \
    .own_account_container { white-space: nowrap; overflow: hidden; margin: 2px; padding: 2px; width: 32%; float: left; cursor: pointer; border-radius: 5px; } \
    .own_friends_list img { border-radius: 50%; vertical-align: middle; margin-right: 15px; width: 40px; height: 40px;} \
    ."+ accountTag +" { background: rgba(255, 0, 0, 0.07); } \
";

var userId   = document.cookie.match(/c_user=(\d+)/)[1];
var TYPEHEAD = "\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x66\x61\x63\x65\x62\x6F\x6F\x6B\x2E\x63\x6F\x6D\x2F\x61\x6A\x61\x78\x2F\x74\x79\x70" +
               "\x65\x61\x68\x65\x61\x64\x2F\x66\x69\x72\x73\x74\x5F\x64\x65\x67\x72\x65\x65\x2E\x70\x68\x70\x3F\x5F\x5F\x61\x3D\x31\x26\x66\x69\x6C" +
               "\x74\x65\x72\x5B\x30\x5D\x3D\x75\x73\x65\x72\x26\x70\x72\x65\x74\x74\x79\x3D\x30\x26\x6C\x61\x7A\x79\x3D\x30\x26\x76\x69\x65\x77\x65" +
               "\x72\x3D" +userId+ "\x26\x74\x6F\x6B\x65\x6E\x3D\x76\x37\x26\x73\x74\x61\x6C\x65\x5F\x6F\x6B\x3D\x30\x26\x6F\x70\x74\x69\x6F\x6E\x73" +
               "\x5B\x30\x5D\x3D\x66\x72\x69\x65\x6E\x64\x73\x5F\x6F\x6E\x6C\x79\x26\x6F\x70\x74\x69\x6F\x6E\x73\x5B\x31\x5D\x3D\x6E\x6D";

var REMOVE   = "\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x66\x61\x63\x65\x62\x6F\x6F\x6B\x2E\x63\x6F\x6D\x2F\x61\x6A\x61\x78\x2F\x70\x72\x6F" +
               "\x66\x69\x6C\x65\x2F\x72\x65\x6D\x6F\x76\x65\x66\x72\x69\x65\x6E\x64\x63\x6F\x6E\x66\x69\x72\x6D\x2E\x70\x68\x70\x3F\x64\x70\x72\x3D\x32";

var ADD      = "\x68\x74\x74\x70\x73\x3A\x2F\x2F\x77\x77\x77\x2E\x66\x61\x63\x65\x62\x6F\x6F\x6B\x2E\x63\x6F\x6D\x2F\x61\x6A\x61\x78\x2F\x61\x64\x64" +
               "\x5F\x66\x72\x69\x65\x6E\x64\x2F\x61\x63\x74\x69\x6F\x6E\x2E\x70\x68\x70\x3F\x64\x70\x72\x3D\x32";

function get(url)
{
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open('GET', url, false);
    xmlHttp.send(null);
    return xmlHttp.responseText;
}

function post(path, params, method)
{
    var http   = new XMLHttpRequest();
    var params = serialize(params);

    http.open("POST", path, true);

    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http.send(params);
}

function injectCss(css)
{
    var style = document.createElement('style');
    style.type = 'text/css';
    style.innerHTML = css;
    document.getElementsByTagName('head')[0].appendChild(style);
}

serialize = function(obj) {
  var str = [];
  for(var p in obj)
    if (obj.hasOwnProperty(p)) {
      str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
    }
  return str.join("&");
}

function createPopup()
{
    var div = document.createElement("div");
    div.innerHTML = '<span id="own_header">Список друзей с наименьшей активностью</span>'
                  + ' | Выделено <b id="own_selected_count">0</b>'
                  + '<div id="own_do_delete" onClick="doDelete()">Удалить выделенных друзей</div>'
                  + '<div class="own_friends_list"></div>'
                  + '<div class="own_success">Выделенные друзья удалены!</div>';

    div.className = 'own_popup';
    document.body.appendChild(div);
}

function toggleClass(elem)
{
    if (elem.classList.contains(accountTag))
        elem.classList.remove(accountTag);
    else 
        elem.classList.add(accountTag);

    var selectedCount = document.querySelector('#own_selected_count');
    selectedCount.innerHTML = document.querySelectorAll("." + accountTag).length;
}

function getDtsg()
{
    var token = document.documentElement.innerHTML.match(/fb_dtsg" value="(.*?)"/g)[0];
    token = token.replace('fb_dtsg" value="', '');
    token = token.substring(0, token.length - 1);
    return token;
}

function removeFriend(uid)
{
    console.log("Remove friend with id: " + uid);
    var removeParams = {
        "uid"   : uid,
        "unref" : "bd_profile_button",
        "floc"  : "profile_button",
        "__user": userId,
        "nctr[_mod]" : "pagelet_timeline_profile_actions",
        "__dyn" : "",
        "fb_dtsg" : getDtsg(),
    };
    post(REMOVE, removeParams);
}

function doDelete()
{
    console.log("Start deleting selected friends...");

    document.querySelector('#own_do_delete').classList.add('own_inactive');
    document.querySelector('.own_friends_list').classList.add('own_inactive');

    var tagged = Array.prototype.slice.call(document.querySelectorAll('.' + accountTag));
    var handle = window.setInterval(function() {
        if (!tagged.length)
        {
            window.clearTimeout(handle);
            document.querySelector('.own_success').style.display = "block";
            return;
        }

        var account = tagged.pop();
        removeFriend(account.getAttribute('data-uid'));
    }, 2500);
}

var data = get(TYPEHEAD).replace("for (;;);", "");
var json = JSON.parse(data);

var friends = json.payload.entries.reverse().slice(0, 100);

var html = "";
for (var i=0; i < friends.length; ++i)
{
    var data = friends[i];
    html += '<div class="own_account_container" data-uid="'+data['uid']+'" onClick="toggleClass(this)">'
         +  '<img src="http://graph.facebook.com/' + data['uid'] + '/picture?type=square">' 
         +  '<a target="_blank" href="/' + data['uid'] + '">' + data['names'][0] + '</a></div>';
}

injectCss(css);
createPopup();

document.querySelector('.own_friends_list').innerHTML = html;
console.log("Choose friends to remove...");

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

Скрипт для добавления друзей в Facebook

Это весьма полезный скрипт, который позволяет добавить 100 друзей из вкладки «рекомендуемые друзья». Соответственно, вы переходите на вкладку рекомендуемых facebook друзей и используете инструкцию выше. Только код в этот раз вставляете следующий:

var addFriendsCount = 100;
var addPause        = 3 * 1000;

function waitForScroll() {
    return new Promise(function(resolve, reject) {
        var it = 0;
        var interval = window.setInterval(function() {
            console.log('Wait...');
            if (it++ > 15)
            {
                window.clearInterval(interval);
                resolve();
            }
            window.scrollBy(0, 2000);
        }, 800, resolve);
    });
}

waitForScroll().then(function() {
    var added = 0;
    var addFriends = document.querySelectorAll('#fbSearchResultsBox button.FriendRequestAdd');
        addFriends = Array.prototype.slice.call(addFriends).reverse();

    var clickInterval = window.setInterval(function() {
        if (!addFriends.length || added++ == addFriendsCount)
        {
            window.clearInterval(clickInterval);
            return;
        }

        var button = addFriends.pop();
        button.scrollIntoView(false);
        button.click();
        console.log('Send request #' + added);

        try{document.querySelector('div[role="dialog"] a.layerCancel').click()}catch(e){};
    }, addPause);
});

Я использовал фильтр перед тем, как применить код, чтобы выбрать из рекомендаций друзей наиболее релевантные варианты.

Отписываемся от публичных групп

Так же весьма полезным будет опционально отписаться от всех публичных групп, которые вам не нужны. Для этого на соответствующей странице, вам нужно использовать следующий код:

var formSelector = 'form[action*="leave.php"]';
var leavePause   = 4 * 1000;

var leftGroupsCount = 0;
var leaveGroupTitle = "";

function waitFor(selector) {
    return new Promise(function(resolve, reject) {
        var interval = window.setInterval(function() {
            var container = document.querySelector(selector);
            if (container.length) {
                resolve(container);
                window.clearInterval(interval);
            }
        }, 500, resolve);
    });
}

var clickInterval = window.setInterval(function() {
    var decline = document.querySelector('a[ajaxify*="leave.php"]');

    if (!decline) {
        console.log('Finish!');
        window.clearInterval(clickInterval);
        return;
    }

    try {
        groupTitle = decline.parentNode.parentNode.parentNode.querySelector('a[href*="group_browse_new"]').textContent;
    } catch(e) {groupTitle = '';}

    decline.click();
    waitFor(formSelector).then(function() {
        document.querySelector(formSelector + ' .uiInputLabelLabel').click();
        document.querySelector(formSelector + ' button.layerConfirm').click();

        leftGroupsCount += 1;
        console.log('#' + leftGroupsCount + ' ' + groupTitle + ' — unsubscribed');

        decline.parentNode.removeChild(decline);
    });

}, leavePause);

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

Приглашения пользователям для подписки на страницу

Самый полезный, на мой взгляд, код. Позволяет опционально пригласить друзей поставить like вашей странице, без необходимости отмечать всех и каждого по одному. (Facebook уже добавил кнопку «выбрать всех»)

var scroll     = document.querySelector('div.uiLayer div[role=dialog] div.uiScrollableAreaWrap'); 
var lastScroll = -1; 
var it         = 0; 
var inviteIt   = 0;
var allInvites = [];
var invitePause= 1000; // ms

var INTERVAL = window.setInterval(function() { 
    if (it >= 7) 
    { 
        console.log('Start inviting');
        window.clearInterval(INTERVAL); 
        allInvites = document.querySelectorAll('div[role=dialog] div.uiScrollableAreaWrap a[ajaxify*="invite"]'); 

        var INTERVAL2 = window.setInterval(function() { 
            if (inviteIt < allInvites.length) 
            { 
                allInvites[inviteIt++].click(); 
                console.log("Invited #" + inviteIt); 
            } 
            else
            {
                window.clearInterval(INTERVAL2); 
            }
        }, invitePause); 
    } 

    it = (scroll.scrollTop == lastScroll) ? (it+1) : 0;
    lastScroll = scroll.scrollTop; 

    var seeMore = document.querySelector('#reaction_profile_pager .uiMorePagerPrimary'); 
    if (seeMore)
        seeMore.click(); 

    scroll.scrollTop += 1000; 
}, 700);

На этом все, хотя на странице программиста есть еще пара скриптов, которые могут быть вам полезны. Важно! По моим экспериментам, если не быть жадным и двигаться поэтапно, никаких санкций не будет. Скрипты, которые вы запускаете, работают только внутри вашего браузера и имитируют вашу деятельность.

Если знаете еще более полезные скрипты для продвижения в facebook, пишите в комментариях!


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован.