Киевский разработчик Макс Фрай создал скрипты для приращения работы в Facebook
- Stats: 2745 2
- Author: admin
- Category: Статті, Технології
- Comments: Комментариев нет
Киевский разработчик Макс Фрай выложил в общий доступ собственные скрипты, которые облегчают и автоматизируют работу с социальными сетями. Они могут пригодиться как обычным пользователям, так и администраторам страниц: с их помощью можно отслеживать ботов или неактивных пользователей среди друзей, отписываться от групп, следить за тем, кто репостит записи и т.д.
По словам разработчика, к нему часто за решением подобных задач обращались друзья, из этого и возникла идея опубликовать в Facebook какие-то универсальные инструменты, которыми мог бы пользоваться каждый.
Он уточняет, что такие скрипты выполняются на стороне клиента — по сути эмулируют действия пользователя, поэтому не нарушают правил Facebook.
Скрипт для поиска и удаления ботов и неактивных пользователей
После установки этот скрипт отметит неактивные аккаунты и аккаунты, которые могут быть ботами. Когда он проверил скрипт на своей Facebook-странице, ботами оказались 80% из предложенных программой.
Чтобы его использовать, нужно зайти в панель разработчика (F12 или Ctrl + Shift + I), затем открыть вкладку Console, затем скопировать текст скрипта, вставить в поле и нажать Enter. В результате для Facebook-страницы появится окно со списком аккаунтов, подозрительные будут выделены красным. Разработчик советует вручную проверить каждый аккаунт перед удалением.
Вот скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
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..."); |
Скрипт для набора друзей в Facebook
По словам разработчика, с этого скрипта он начинал ведение собственного профиля в Facebook. Чтобы запустить скрипт, нужно перейти на страницу со списком предложенных друзей (ее формирует сам Facebook во вкладке «Друзья»). Затем, как и в прошлом примере, открыть панель разработчиков, зайти во вкладку консоли, скопировать код (есть на GitHub), вставить и нажать Enter. Скрипт добавит 100 людей из предложенных.
Скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
// Run at this location: https://www.facebook.com/?sk=ff 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); }); |
Скрипт для отписки от публичных групп
Пока в Facebook существует возможность добавления пользователя в группу без его согласия, этот скрипт будет актуальным. Чтобы запустить отписку, нужно перейти на страницу со списком групп, открыть панель разработчика, вставить код, указанный по ссылке, нажать Enter и подождать надписи Finish.
Скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
// https://www.facebook.com/groups/?category=groups 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); |
Скрипт, формирующий список тех, кто сделал репост записи
По словам разработчика, этот скрипт поможет, к примеру, брендам, проводящим конкурсы в Facebook. Как и в предыдущих случаях, чтобы его запустить, нужно зайти в окно со списком репостов, зайти в консоль разработчика, скопировать код и нажать Enter.
Скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
var lastScroll = -1; var loadTryCount = 70; var nowTryCount = 0; var result = "\n"; var INTERVAL = window.setInterval(function() { if (nowTryCount >= loadTryCount) { window.clearInterval(INTERVAL); var items = document.querySelectorAll('#repost_view_dialog .fbUserContent'); for (var i=0; i < items.length; ++i) { var account = items[i].querySelector('a.profileLink'); result += account['href'] + ' — ' + account.textContent + '\n'; } console.log(result); } if (window.scrollY == lastScroll) nowTryCount += 1; else nowTryCount = 0 lastScroll = window.scrollY; window.scrollBy(0, 1000); }, 700); |
Макс Фрай обещает дополнить список скриптов для работы с социальными сетями, он регулярно выкладывает их в своем Facebook.
Вот и все, если Вы хотите «поблагодарить» наше IT сообщество — у вас есть такая возможность: справа есть варианты для пожертвований на развитие портала. Или поделитесь статьей в ваших соц.сетях через сервис ниже.
Отправить ответ