Advertisement
IntergalacticApps

Adblock for VK posts

Aug 17th, 2016
1,481
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name           Adblock for VK posts
  3. // @version        1.2.16
  4. // @include        *://vk.com/*
  5. // @run-at         document-end
  6. // @grant          none
  7. // ==/UserScript==
  8.  
  9. (function run() {
  10.    
  11.     'use strict';
  12.    
  13.   // Ad words groups.
  14.   // Each item describes a one rule with `and` boolean logic, so rule '[1,2,3]' will hide posts
  15.   // that contains '1', '2' and '3' irrespective of order.
  16.   // Original text will be lowercased before search operation, so each rule should be in lowercase to work.
  17.   var junkGroups = [
  18.     ['vk.cc/'],
  19.     ['$link-text=покaзaть пoлнocтью'],
  20.     ['$link-text=продолжение'],
  21.     ['$link-text=кликай'],
  22.     ['$link-text=смотреть'],
  23.     ['$link-text=тебе сюда'],
  24.     ['$link-text=я парень'],
  25.     ['$link-text="•"'],
  26.     ['$repost-author=max twain'],
  27.     ['$repost-author=nine store'],
  28.     ['$repost-author=стоп бред!'],
  29.     ['$repost-author=красное&белое 18+'],
  30.     ['$repost-author=яуза парк'],
  31.     ['$repost-author=дисконт'],
  32.     ['$repost-author=fisher-price'],
  33.     ['$repost-author=adidas originals'],
  34.     ['$repost-author=drinkenergy.ru'],
  35.     ['$repost-author=history porn'],
  36.     ['$repost-author=apple room'],
  37.     ['$repost-text=жми '],
  38.     ['подпишись'],
  39.     ['подписывайся'],
  40.     ['подписывайтесь'],
  41.     ['подписываемся'],
  42.     ['уже подписался'],
  43.     ['подписался на'],
  44.     ['подписалась на'],
  45.     ['не подписан'],
  46.     ['присоединяйтесь к нам'],
  47.     ['присоединяй', 'только самое полезное'],
  48.     ['присоединяйтесь', 'vk.com/'],
  49.     ['заказать сейчас'],
  50.     ['заказать', 'акци'],
  51.     ['заказать', 'здесь'],
  52.     ['для заказа писать'],
  53.     ['успей заказать'],
  54.     ['смотреть ответ'],
  55.     ['узнать ответ'],
  56.     ['ответ в источнике'],
  57.     ['результат в источнике'],
  58.     ['смотри сюда'],
  59.     ['смотреть фото в'],
  60.     ['читать продолжени'],
  61.     ['читать все'],
  62.     ['подробности здесь'],
  63.     ['тут подробности'],
  64.     ['узнайте подробности'],
  65.     ['узнать подробности в'],
  66.     ['узнать больше', 'зарегистрироваться'],
  67.     ['инфа здесь'],
  68.     ['читать полностью'],
  69.     ['читать далее'],
  70.     ['читайте далее'],
  71.     ['прoчитaть пoлнocтью'],
  72.     ['розыгрыш', 'репост'],
  73.     ['розыгрыш', 'условия'],
  74.     ['конкурс', 'репост'],
  75.     ['конкурс', 'рекомендую'],
  76.     ['репост', 'если'],
  77.     ['за репост', 'к карме'],
  78.     ['максимальный репост'],
  79.     ['нашёл', 'рекомендую'],
  80.     ['набира', 'лайков', 'сколько набер'],
  81.     ['набира', 'лайков', 'заслужива'],
  82.     ['распродажа'],
  83.     ['скачaть', 'android'],
  84.     ['скачaть', 'ios'],
  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.     ['проверить себя', 'здесь', 'http'],
  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.     ['iphone', 'репост'],
  154.     ['iphone', 'бесплатно'],
  155.     ['скачать', 'iphone', 'android'],
  156.     ['бесплатно на'],
  157.     ['бесплатный', 'за две недели'],
  158.     ['гороскоп на'],
  159.     ['узнай', 'гороскоп'],
  160.     ['пожалуй', 'самый'],
  161.     ['скачать на'],
  162.     ['скачай', 'удиви'],
  163.     ['успей скачать'],
  164.     ['скачать', 'в itunes'],
  165.     ['смотреть все'],
  166.     ['скидк'],
  167.     ['некоммерческ', 'идеи', 'подробнее'],
  168.     ['необычны', 'доставка', 'подробнее'],
  169.     ['подробнее в приложении'],
  170.     ['отправлено через приложение'],
  171.     ['анонимные знакомства'],
  172.     ['только для совершеннолетних'],
  173.     ['похудеть', 'реально'],
  174.     ['заказывал тут'],
  175.     ['заказывала тут'],
  176.     ['купил тут'],
  177.     ['купила тут'],
  178.     ['егэ', 'присоединяйтесь'],
  179.     ['бесплатное образование'],
  180.     ['как привлечь клиентов'],
  181.     ['купить полис'],
  182.     ['для старта', 'бизнеса'],
  183.     ['портал', 'аренды'],
  184.     ['однажды', 'может пpоизoйти c тoбoй'],
  185.     ['смoтреть рецепт'],
  186.     ['смoтреть', 'рецепты'],
  187.     ['смотри', 'удивляйся'],
  188.     ['просто попробуй'],
  189.     ['вдохните жизнь'],
  190.     ['начни играть'],
  191.     ['начать играть'],
  192.     ['затягивает', 'играть'],
  193.     ['начинайте экономить'],
  194.     ['посмотреть по ссылке'],
  195.     ['смотреть здесь'],
  196.     ['просто нажми'],
  197.     ['диплом', 'поступить', 'подробнее'],
  198.     ['выиграть подарки'],
  199.     ['одевайтесь в'],
  200.     ['перевернут', 'представление'],
  201.     ['не для слабонервных', 'не смотреть'],
  202.     ['новая коллекция', 'доставка'],
  203.     ['доставка', 'бесплатная', 'заказ'],
  204.     ['курс', 'записывайтесь'],
  205.     ['сохраняй', 'на стенку'],
  206.     ['получи', 'кросс'],
  207.     ['подать заявку'],
  208.     ['бизнес-идея'],
  209.     ['круто', 'добавить нечего'],
  210.     ['новейший хит'],
  211.     ['только сегодня', 'цена'],
  212.     ['огромный выбор'],
  213.     ['заказ', 'в подарок'],
  214.     ['жилье посуточно'],
  215.     ['подписыва', 'там смешно'],
  216.     ['рекоменду', 'подписаться'],
  217.     ['подробнее на стене'],
  218.     ['легко и просто', 'смотреть полностью'],
  219.     ['суперэффективн', 'тренировк'],
  220.     ['советуем, чтобы не быть обманутыми'],
  221.     ['советуем', 'подписаться'],
  222.     ['уникальн', 'подойдет всем'],
  223.     ['шок', 'бесплатно'],
  224.     ['регистрация', 'за пару секунд'],
  225.     ['хочешь', 'стоит заглянуть'],
  226.     ['выиграл', 'казино'],
  227.     ['прямо сейчас', 'бесплатно'],
  228.     ['не пожалеете', 'групп'],
  229.     ['новый тизер', 'шикарны'],
  230.     ['полезный сервис', 'геймер'],
  231.     ['взломать блогеров'],
  232.     ['открытие китая с евгением'],
  233.     ['бесплатный билет'],
  234.     ['пройди тест', 'узнай'],
  235.     ['нет времени объяснять', 'тебя ждет'],
  236.     ['ломаем стереотипы', 'вместе'],
  237.     ['присоединяйся', 'ждет тебя'],
  238.     ['взорвала интернет', 'подробнее'],
  239.     ['куплен', 'здесь', 'цена'],
  240.     ['заказ', 'подробности'],
  241.     ['fastppc.net'],
  242.     ['amsterdamday.ru'],
  243.     ['бесплатный мастер-класс'],
  244.     ['курс', 'условия', 'подробности'],
  245.     ['курс', 'абсолютно бесплатно'],
  246.     ['добавляйтесь в друзья'],
  247.     ['для заказа пишите'],
  248.     ['телефон', 'наша группа'],
  249.     ['выигрывайте приз'],
  250.     ['читaть продолжение'],
  251.     ['заказать', 'на нашем сайте'],
  252.     ['нашли', 'рекомендуем'],
  253.     ['підписуйся'],
  254.     ['підписуйтесь'],
  255.     ['підпишись'],
  256.     ['вступай', 'паблік'],
  257.     ['хочется', 'новенького'],
  258.     ['розіграш'],
  259.     ['знижк'],
  260.     ['дивитися відповідь'],
  261.     ['акція', 'ціна'],
  262.     ['акція', 'супер'],
  263.     ['розіграш', 'репост'],
  264.     ['ціна', 'супер'],
  265.     ['цін', 'придбати'],
  266.     ['завантажуйте безкоштовно'],
  267.     ['вигравай', 'iphone'],
  268.     ['скачай', 'виграй'],
  269.     ['ловіть фішку'],
  270.     ['тільки у нас'],
  271.     ['для покупки пишіть'],
  272.     ['шукаєш', 'заробіток'],
  273.     ['оформити замовлення'],
  274.     ['доставка', 'замовити'],
  275.     ['замовляйте зараз'],
  276.     ['замовляй', 'на сайті'],
  277.     ['долучайтесь', 'буде цікаво', 'спільнота'],
  278.     ['додаток', 'заробив'],
  279.     ['пропоную послуги']
  280.   ];
  281.  
  282.   // Check post to contain one or more 'junkGroups'.
  283.   function isJunk(post) {
  284.     var postTextDiv = post.querySelector('.wall_post_text');
  285.     if (postTextDiv) {
  286.         var postText = postTextDiv.textContent.toLowerCase();
  287.         var repostDiv = post.querySelector('.copy_quote');
  288.         if (repostDiv) {
  289.             var repostAuthorA = repostDiv.querySelector('.copy_author');
  290.             var repostAuthor = '"' + repostAuthorA.textContent.toLowerCase() + '"';
  291.             var repostTextDiv = repostDiv.querySelector('.wall_post_text');
  292.             if (repostTextDiv) {
  293.                 if (postTextDiv != repostTextDiv) {
  294.                     var repostText = repostTextDiv.textContent.toLowerCase();
  295.                     postText += '\n' + repostText;
  296.                 } else {
  297.                     postText = repostText = repostTextDiv.textContent.toLowerCase();
  298.                 }
  299.             }
  300.         }
  301.         var postLinks = postTextDiv.querySelectorAll('.mem_link');
  302.         if (postLinks) {
  303.             var postLinksTexts = [];
  304.             postLinks.forEach(function(e) {
  305.                 postLinksTexts.push('"' + e.textContent.toLowerCase() + '"');
  306.             });
  307.         }
  308.         return junkGroups.some(function(junkGroup) {
  309.             var isJunkDetected = junkGroup.every(function(junk) {
  310.                 var linkTextModifier = junk.indexOf('$link-text=');
  311.                 if (linkTextModifier == 0) {
  312.                     if (postLinks) {
  313.                         var junkText = junk.slice(11); // '$link-text='.length
  314.                         return postLinksTexts.some(function(e) {
  315.                             return e.indexOf(junkText) >= 0;
  316.                         });
  317.                     }
  318.                     return false;
  319.                 }
  320.                 var repostAuthorModifier = junk.indexOf('$repost-author=');
  321.                 if (repostAuthorModifier == 0) {
  322.                     if (repostDiv) {
  323.                         var junkText = junk.slice(15); // '$repost-author='.length
  324.                         return repostAuthor.indexOf(junkText) >= 0;
  325.                     }
  326.                     return false;
  327.                 }
  328.                 var repostTextModifier = junk.indexOf('$repost-text=');
  329.                 if (repostTextModifier == 0) {
  330.                     if (repostTextDiv) {
  331.                         var junkText = junk.slice(13); // '$repost-text='.length
  332.                         return repostText.indexOf(junkText) >= 0;
  333.                     }
  334.                     return false;
  335.                 }
  336.                 return postText.indexOf(junk) >= 0;
  337.             });
  338.             if (isJunkDetected) {
  339.                 console.log('\nJunk detected!');
  340.                 console.log('Rule: ' + junkGroup);
  341.                 console.log('Text: ' + postText);
  342.                 if (repostDiv) {
  343.                     console.log('Repost author: ' + repostAuthor);
  344.                 }
  345.                 if (repostTextDiv) {
  346.                     console.log('Repost text: ' + repostText);
  347.                 }
  348.                 if (postLinks) {
  349.                     postLinksTexts.forEach(function(e) {
  350.                         console.log('Link text: ' + e);
  351.                     });
  352.                 }
  353.             }
  354.             return isJunkDetected;
  355.         });
  356.     }
  357.   }
  358.  
  359.   function isHidden(post) {
  360.       return post.style.display == 'none';
  361.   }
  362.  
  363.   function hide(post) {
  364.       post.style.display = 'none';
  365.   }
  366.  
  367.   // Periodic main function
  368.   function inner() {
  369.     var posts = document.querySelectorAll('.post');
  370.     for (var i = 0; i < posts.length && i < 10; i++) {
  371.         var post = posts[posts.length - 1 - i];
  372.         if (!isHidden(post) && isJunk(post)) {
  373.             hide(post);
  374.             console.log('Junk removed!');
  375.         }
  376.     }
  377.   }
  378.  
  379.   function run() {
  380.       if (window.location.pathname == '/feed') {
  381.           var target = document.getElementById('feed_rows');
  382.       } else {
  383.           var target = document.getElementById('page_wall_posts');
  384.       }
  385.       if (target) {
  386.           inner();
  387.           var observer = new MutationObserver(function(mutations) {
  388.               inner();
  389.           });
  390.           observer.observe(target, { childList: true });
  391.       } else {
  392.           console.log('No posts found on this page.');
  393.       }
  394.   }
  395.  
  396.   run();
  397.  
  398. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement