Постовой (*): Комплексная оптимизация и продвижение сайта – основные направления деятельности нашей Компании.
Сразу оговорюсь. Скрипт не полностью автоматический, удаляет сообщения только с текущей страницы стены. Связано это с тем, что написан на коленке в 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, позволяющее сделать то же самое (описывать его я здесь не буду и если будут вопросы – велкам в комментарии).
Комментариев (3)
Уважаемые читатели. Хочу узнать ваше мнение. Какие бы плагины для ВордПресс вы хотели бы иметь, которых еще не придумано? Опционально – для джумлы. Спасибо.
Предлагаю пропиарить этот пост в своих блогах (возможно на основе обмена ссылками с особо достойными), т.к. лучше думать «всем миром». Ведь плагины при случае будут полезные, бесплатные и без рекламы. Полезные для всех.
P.S. Если кто-то не понял: я напишу особо востребованные плагины
P. P.S. (выделять курсором, ибо текст серый): Сейчас я пользуюсь блогом только как фидбеком с читателями. Я думаю, что пора перестать использовать блог как «справочник для новичка» (то есть пора перестать писать статьи для новичка, а обсуждать действительно интересные мне темы). Я думаю над этим. Материала готово где-то на 5 постов точно, но мне не хочется его постить, т.к. лично мне он уже давно не интересен. Если есть идеи – можете посоветовать и по этому поводу.
Комментариев (4)
Мой блог долго и хорошо сидит в я-индексе. Некоторое время я удивлялся – неужели «траст» может действительно давать такой эффект? Для тех, кто не в курсе – домен зарегистрирован еще в далеком 2007 году. Собственно, проданных ссылок… Довольно много. И регулярные сапо-ссылки (спасибо за пиво с шаверном сапе!).
Ведь есть мнение, что страницы с небольшим количеством контента легко вылетают из индекса, а потом вылетает и целый сайт (попадает под АГС). Мои опыты с уникальным контентом косвенно подтверждают – если контента мало, залетает в индекс долго, выпадает легко. Если контента больше (больше 2000 знаков) – залетают легко, выпадают не очень охотно. В целом, хотя я в траст и не верю, но его лучше учесть. Ведь известно, что старые сайты держатся дольше, а если точнее – почти наверняка будут держаться «вечно».
Позже мне пришла в голову мысль, что мои посты – это не главное, что держит блог в индексе. Невероятно, но факт (с) (передача такая по ТНТ была).
К сожалению, карты я раскрыл уже, заранее.
Я думаю, что комментарии очень сильно помогают блогам держаться в индексе. Конечно, комментарии, где обратные ссылки закрыты от индексации.
Если посмотреть на блог, то комментарии порой составляют до 100% контента самого поста. Иногда больше, иногда меньше. В любом случае – уникального контента становится в разы больше.
Отсюда вывод. Чтобы блог/сайт дольше не вылетал из индекса – нужно раскручивать его так, чтобы его комментировали, причем – не спам-комментариями. Конечно, важно, чтобы комментировать хотелось, иначе это бессмысленно. Насколько я могу быть прав?
Комментариев (35)