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


lamara-nsk.ru
Это блог о сео, деньгах, заработке в сети, разработке своих проектов, программировании
и "жизни программиста", бизнесе, блогосфере, фрилансе и многом другом.


Контакты, Реклама в блоге




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

Автор DimoninG, написано 12.10.2010
Рубрика 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, позволяющее сделать то же самое (описывать его я здесь не буду и если будут вопросы – велкам в комментарии).



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


ae471697

    пишет:

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


    пишет:

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


    пишет:

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


    пишет:

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


    пишет:

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


    пишет:

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


    пишет:

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


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

Что здесь почитать?



1.   Разработки.
1.1 Плагин "Я не робот"
1.2 Плагин "Код Adsense прямо в пост"

2.   Заработай.
2.1 Блогун: 20$ в день
2.2 Уходим от налогов в Sape
2.3 Хватит думать, пора зарабатывать

3.   Акции и конкурсы.
3.1 Ссылка за "Рабочий стол"

Показать весь список.

-->







Блог на движке WordPress и тема для него создана DimoninG'ом в 2007 году.
Все материалы авторские, их копирование запрещено законом об авторском праве.