Удаление сообщений со стены ВКонтакте (пишем скрипт).

Рубрики: JavaScript  


Постовой (*): Комплексная оптимизация и продвижение сайта – основные направления деятельности нашей Компании.

Сразу оговорюсь. Скрипт не полностью автоматический, удаляет сообщения только с текущей страницы стены. Связано это с тем, что написан на коленке в 5 утра, с другой стороны с тем, что я не придумал как перезагружать страницу так, чтобы скрипт оставался в памяти браузера (поэтому если у кого-то есть идеи прошу отписаться во благо всех нас, Великого Павла Дурова и Господа Нашего Б-га, аминь).

С другой стороны, так за 2 минуты можно очистить больше сотни сообщений – а что еще нужно? У меня за 3 года накопилось всего 500, а удаление заняло минут 5 (всплакнул крупной суровой мужской слезой).

Скрипт лучше рассматривать как тренировку JavaScript для программистов и баттхерт для простых пользователей (почему – смотри ниже). Поэтому если ты, дорогой читатель, «простой пользователь», немного пошевелить разными там химикалиями в мозгах все же придется (можно сразу смотреть «Часть 3″).

Часть 1. Обратите внимание на кавычки! При перепечатке в блог они «поехали», нужно подправить вручную. Начну с обзора того, что мы будем делать. Стена ВКонтакте располагается по адресу vkontakte.ru/wall.php. Если мы заглянем в код страницы и посмотрим на ссылку удаления, то увидим следующее:

<a href=»" onclick=»(deletePost(…));return false;»>Удалить</a>

То есть совершенно недвусмысленно понятно, что у ВКонтакта есть функция deletePost, которая и применяется. Например, все скрипты, которые я смог нагуглить применяли давно устаревший API, из-за чего и не работали.

Мы знаем, что в JavaScript любой код можно исполнить с помощью функции eval(). Например код:

eval («alert (‘a’)»);

выдаст нам окошко с сообщением «а». То есть функции eval мы передаем строку, которую она выполняет как если бы такой же javascript был написан в сценарии (подробнее смотри, например, здесь).

Кроме того, нужно не забывать, что работать скрипт должен по таймеру. Сервер просто не успеет обработать 20 запросов (а именно столько сообщений на одной странице) за секунду и просто напросто не ничего удалит. И хорошо, если еще и бан не получим.

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

Часть 2. Теперь сам скрипт и как он работает.

var i = 0 , step_t;

function Step(){
	var myregexp = /<a onclick="(deletePost\(.+\));return false;">Удалить<\/a>/g;
	var match = myregexp.exec(document.body.innerHTML);
	if(match != null){
		eval (match[1]);
		i = i + 1;
	}

	if (i >= 20){
		clearInterval (step_t);
	}
}

if (confirm('Удалить все сообщения со стены?') == true){
	step_t = setInterval("Step()", 500);
}

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

При старте скрипта мы выводим сообщение с помощью confirm (Yes/No Dialog Box) и проверяем ответ. Если ответ был «Да» («Ок» и т.п.), то мы запускаем таймер с помощью setInterval. Таймер срабатывает каждые пол-секунды (второй параметр) и вызывает при каждом срабатывании функцию Step(). Идентификатор таймера step_t (от step timer).

Отлично, теперь таймер запущен и каждые пол-секунды вызывается функция Step(), где и спрятан по сути весь скрипт.

Первым делов в этой функции мы находим на странице строку, содержащую deletePost и вытаскиваем её целиком.

Короткая справка по JavaScript регулярным выражениям (подробнее, например, здесь).

Регулярные выражения в JavaScript можно инициализировать с помощью строки вида /pattern/mods. Где под pattern понимается само регулярное выражение, под mods – модификаторы. Как обычно, все символы «/» нужно закрыть слева-стоящим  »\» если они не являются модификаторами.

При этом здесь мы используем простую конструкцию «.+». Символ «точка» означает в ней «любой символ», а «плюс» – «один или больше». То есть получается «один или больше одного любых символов». Скобками нужно отметить тот участок, который мы хотим выцепить в результате. И, конечно, надо учитывать, что если скобка есть в самой строке, по которой мы делаем поиск, то её нужно «экранировать» с помощью «\».

После всего этого регулярка «запускается» с помощью pattern.exec(string), где pattern – наша регулярка, string – то, по чему мы будем искать, а exec – функция выполнения.

Краткая справка закончена, всем спасибо. *кланяется*

Итак, мы создаем регулярное выражение вида «/<a href=»" onclick=»(deletePost\(.+\));return false;»>Удалить<\/a>/g» (хочу обратить внимание, что в коде оно должно использоваться без кавычек). И обрабатываем с его помощью все тело документа (которое хранится, как мы знаем, в document.body.innerHTML).

Как итог вечеринки найденная строка попадает в match[1] (ибо сам по себе match – это массив строк; например в match[0] хранится полностью найденное выражение, а match[2] не существует, т.к. скобками, с помощью которых «выцепляется» нужный фрагмент, у нас «огорожен» только один кусок).

Дальше все еще проще. В match[1] у нас попадает строка вида «deletePost(…)». Нам нужно её просто выполнить. Поэтому мы используем eval() и передаем ему в качестве аргумента найденное значение (ведь оно содержит уже и имя выполняемой функции – deletePost).

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

Счетчик i служит для определения – сколько сообщений мы уже удалили. Мы знаем, что на странице у нас всего 20 сообщений, поэтому добавлено условие i >= 20. Когда это условие выполняется, мы останавливаем таймер с помощью clearInterval() (функция принимает на входе идентификатор таймера).

Вот, собственно и вся логика работы скрипта.

Часть 3. Лично я «сижу» в Chrome, поэтому, чтобы запустить скрипт, мне нужно сделать следующее:

1) Перейти на страницу vkontakte.ru/wall.php
2) Нажать правой кнопкой куда-нить и выбрать «Проверить элемент». Откроется новое окно.
3) В нем нажать «Console», скопировать туда весь скрипт целиком и нажать Enter.

Для пользователей FireFox существует дополнение FireBug, позволяющее сделать то же самое (описывать его я здесь не буду и если будут вопросы – велкам в комментарии).



Отзывов (42) на «Удаление сообщений со стены ВКонтакте (пишем скрипт).»

    Diamaxx пишет:

    полезный скрипт, особенно когда уехал в отпуск на пару месяцев и тебя зафлудили тонной комментов. Но правда при кол-ве свыше 5000 комментов скрипт малоэффективен.


    DimoninG пишет:

    Кстати, я обнаружил, что бан отхватывается по-любому (ставил промежутку удаления от 0.5 секунды до 5 секунд), так что лучше даже полу-автоматика, чем автоматика.


    Taras пишет:

    А вот за статью спасибо, а то сам этот так задолбал уже.


    Сайтовед пишет:

    Я думал есть способы и попроще, кнопки например удалить. Просто делаешь это каждый раз как заходишь и все


    Саня пишет:

    спасибо за статтю


    Карган пишет:

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


    nightmare пишет:

    Любопытно, надо попробовать реализовать ) А то на самом деле лажа с этими сообщениями порой %(


    Pasha пишет:

    Отличный скриптик. Обязательно поюзаю.


    TriLL пишет:

    Спасибо,было интересно почитать


    TriLL пишет:

    Спасибо


    Mark пишет:

    Всё работает, спасибо.


    vog пишет:

    поюзим посмотрим! но пока спосибо!


    Макс пишет:

    Спасибо за статью, интересная и полезная!


    qmor пишет:

    поправил регэксп, а то не работало

    var myregexp = /»(deletePost\(.+\))/g;


    DimoninG пишет:

    qmor, через сутки после того, как я написал скрипт, ВКонтакте запилили микроблоки :) Спасибо за регексп ;)


    Леха пишет:

    А зачем удалять сообщения в контакте? Что то я не очень понимаю…..


    prokopa пишет:

    спасибо, это реальдно может решить некоторые мои проблемы в контакте


    bighouse пишет:

    К сожалению не работает…


    Jean пишет:

    Что-то я много способов перепробовал, но так и не получилось.
    var myregexp правил по разному, но ничего не происходит.
    Помогите, люди добрые :)


    JeanMichael пишет:

    В общем, пришлось самому по изучать JavaScript на примерах.
    И понял, что в моём случае, ваш код не работал. А именно var myregexp = /»(deletePost\(.+\))/g; скал всё дословно, т.е. »(deletePost\(.+\))
    порывшись немного в инете пришёл решению, которое у меня заработало:
    вместо строк
    var myregexp = /»deletePost\(.+\)/g;
    var match = myregexp.exec(document.body.innerHTML);
    пишем только одну:
    var match = document.body.innerHTML.match(/deletePost\(.+\)/img);
    ну и правим ещё одну строчку:
    eval (match[0]);

    При таймауте 500 у меня пару сообщений не удаляются, получив ошибку сервера, с 1500 норм, но долго. Увеличив число просмотров страницы до 25, сократил и время при 100% результате чистки. Для этого правим строку:
    if (i >= 25){


    SkaSkin пишет:

    Леха, полностью тебя поддерживаю для чего это нужно?


    Рецепты с фотографиями пишет:

    Глючит.. наверное работать не будет


    как_быть пишет:

    А как быть с постами на чужой стене?
    Ссылка http://vkontakte.ru/wall.php?act=s&id=FRIENDID&person=YOURID&section=tete_a_tete

    Для удаления в коде есть onclick=»deleteStatus(462, FRIENDID, ‘f6dc44edbea32ace73′)

    Сдается мне, что никак :(


    Mayor пишет:

    А мне вообще надоела эта дурня, что мне лепили. Закрыл стену вообще. Только я могу там писать. Ы :)


    Анна пишет:

    Для полной автоматизации такое решение не лучший вариант, разве что побаловаться или рядовому юзеру чистить свой акк после утери пароля.


    Gamela пишет:

    Насчёт обработки сервером и бана за «скорость» это в точку. Тоже самое можно сказать и про добавление записей на стену скриптом


    Дмитрий пишет:

    Простое решение это «проблемы», не регистрируйтесь вконтакте :))) P.S. обидеть никого не хотел)


    eic пишет:

    Напишите лучше скрипт, что бы все сообщения отправленные и исходящие удалял за несколько лет а то у меня около 10000


    eic пишет:

    или скрип для очистки ваще всех месаг одновременоо


    Romacho пишет:

    Большое спасибо! Сейчас почти ежеднвно чищу стену)


    Albi пишет:

    Я не могу скопировать в «Console» этот скрипт! мне нужно его перепечатывать или что? подскажите


    DimoninG пишет:

    Скрипт не подходит для микроблога, к сожалению.


    Виктория пишет:

    почему исчезли записи на стене?(((


    Калимушечка пишет:

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


    DimoninG пишет:

    Ждите, может быть глюк сервера.


    Таня пишет:

    Подскажите с FireFox поступать?


    Аня! пишет:

    у меня все со стены удалилось само! а мне надо это восстановить помогите пожалуйста я вообще не себе не могу написать на стену не другим


    Лист пишет:

    И у меня! Что за… >:c


    Елена пишет:

    А у меня со стены только что просто все записи удалились! САМИ! Каким-то мистическим образом! ЧТо за бред опять?! Там была одна очень важная запись, которая мне очень нужна! И что мне теперь делать? Оно все вернется? И почему я не могу ничего написать на своей стене?!
    Выходить и заново заходить ВК я пробовала, ничего не меняется! Что такое блин опять?! Я убьюсь, мне была важна эта запись!


    Артур пишет:

    Ребят у меня 1500 записей на стене хочу удалить все, я ниче не понял из того что вы написали,помоги те пожалуйста , объясните что куда вставлять ,копировать и т.д))))


    брут пишет:

    о чем написано в этой статье? да ни о чем! автор разрекламировал непонятное дополнения для фарфокса а самого скрипта тут нет в памине!


    Вячеслав пишет:

    Фарфокс и так работает, об этом много написано.


Оставьте свой комментарий

Теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


SEO и программирование


  • Дополнительно:

  • По месяцам:



    • Свежий бот для тюряги



  • dimoning.ru © 2008-2011 г.
    Все материалы авторские, но их можно копировать с указанием прямой ссылки на источник.