Удаление всех видеозаписей из ВКонтакте

Почти сразу после предыдущего поста пишу этот. Как обычно заходим на http://vkontakte.ru/video?act=editи запускаем скрипт. Но есть одно но. В данном случае никаких изменений визуально не будет видно сразу. Итак скрипт.

javascript:a=document.getElementsByTagName("a");for(i=0;i<a.length;++i){if(a[i].innerHTML=="удалить"){ajax.post('al_video.php',{act:'delete_video',vid:a[i].onclick.toString().split("(")[2].split(",")[0],oid:a[i].onclick.toString().split("(")[2].split(" ")[1].split(",")[0],hash:a[i].onclick.toString().split("'")[1],sure:0,from:'list'});}}

Здесь как и в прошлый раз используется ajax запрос к серверу. Будем надеяться никто сильно ВКонтакте этим спамить не будет. Если что, я ни при чем =).

Ну и конечно код, в котором ничего сложного нет:

Спасибо за внимание, я пошел готовиться к экзаменам.

Удаление всех заметок из ВКонтакте

Все как всегда просто. Заходим на http://vkontakte.ru/notes и запускаем скрипт:

javascript:a=document.getElementsByTagName("a");for(i=0;i < a.length;++i){if(a[i].innerHTML=="Удалить")ajax.post('/notes',{act:'do_delete',nid:a[i].href.split("(")[1].split(",")[0],hash:a[i].href.split("\"")[1],lj:0});}

В этот раз я пошел немного дальше и разобрался, а что же вообще выполняют готовые JavaScipt функции. Так вот. Они выполняют (кто бы сомневался) ajax запрос к серверу. Так почему бы просто не отправлять запрос самостоятельно? Ну и как обычно код с разметкой:

В этот раз получилось как-то коротко, зато по делу =).

Скачиваем всю музыку из ВКонтакта разом

Серия про ВКонтакте продолжается =). Сразу после предыдущего поста @lenta4ka_red попросила сделать так, что бы можно было всю музыку из ВКонтакте закачать разом. Я подумал что это очень даже интересно и вот что у меня получилось.

Уже довольно давно известно что прямые ссылки на аудиозаписи можно получить из исходного кода странички ВКонтакте. Поэтому получить ссылки на все записи будет не так уж сложно. Другой вопрос что с этими ссылками потом делать. Один вариант составить список и скормить какой-либо программе, которая умеет массово скачивать файлы. Однако это еще надо искать такую программу. Второй вариант скачивать средствами браузера, открывая страницу для каждой аудиозаписи. Тут есть другая проблема. Chrome открывает mp3 файлы для проигрывания, а не для сохранения, поэтому в данном случае придется от него отказаться. Дальнейшие действия будут происходить с Opera. В принципе работать должно и в Internet Explorer и в Mozilla Firefox, но я проверял только для Opera.

Для того, что бы все работало максимально быстро и без нашего вмешательства необходимо отключить блокировку всплывающих окон и задать сохранение по умолчанию для mp3 файлов. Что бы отключить блокирование всплывающих окон, надо зайти в Общие настройки на вкладку основные. Теперь надо указать единое место для сохранения mp3 файлов что бы Opera нас не спрашивала каждый раз куда сохранять. Это делается в Общих настройках на вкладке Расширенные. Там в разделе Загрузки необходимо найти запись для mp3.

Если такая запись уже есть, то мы ее редактируем, если нет, то создаем и тоже редактируем =). Стоит отметить, что MIME-тип должен быть именно "audio/mpeg". Устанавливаем "Сохранить на диске", "Сохранять на диске без запроса в папку:". Папку выбираем на свое усмотрение.

Теперь осталось только запустить скрипт. Заходим на vkontakte.ru/audio, открываем нужный вам альбом, ищем нужную вам музыку, или просто оставляем все как есть и вставляем в строку запроса следующее:

javascript:a=document.getElementsByTagName("input");for(i=0;i<a.length;++i){if(a[i].id.substring(6,10)=="info")open(a[i].value.split(",")[0])}

Ждем пока все загрузится. Радуемся всей музыке у себя на компьютере.

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

Ну и для тех кому интересен JavaScript:

Удаление всех диалогов из ВКонтакте

В продолжении предыдущей статьи решил разобраться с тем, как удалять все сообщения. В итоге получился скрипт, для строки запроса. Правда в Opera скрипт работать не захотелось, но его можно вставить напрямую в консоль (Ctrl + Shift + I, затем иконка ">_"). Перед выполнением скрипта надо зайти на http://vkontakte.ru/im.

javascript:var a=document.getElementsByTagName("div");var b=[];for(i=0;i<a.length;++i){if(a[i].className=="dialogs_row "||a[i].className=="dialogs_row"){b.push(a[i].id.substring(9));}}i=0;c=setInterval(function(){IM.selectDialog(b[i]);setTimeout(function(){IM.deleteHistory(b[i++]);},500);setTimeout(function(){d=document.getElementsByTagName("button");j=0;while(d[j++].parentNode.className!="button_blue");d[j-1].click();},1000);if(i>b.length)clearInterval(c)},2000);

Если посмотреть повнимательнее на диалоги, в каждом диалоге можно найти "Действие" -> "Очистить историю сообщений". Эта ссылка вызывает функцию IM.deleteHistory(id), где id - это идентификатор диалога. Однако эта функция работает только в том случае, если соответствующий диалог открыт. Открывается этот диалог функцией IM.selectDialog(id). Получить же все необходимые идентификаторы можно на странице всех диалогов. Вот собственно код:

Id диалогов записаны в элементах, имеющих одинаковый класс. Так как JavaScript не умеет делать выборку элементов по классу, то это делается отсеиванием из div-ов. Кстати, почему-то одинаковые элементы могут иметь класс отличающийся на символ пробела. Может быть это специально для чего-то сделано? У каждого элемента нужного нам класса есть поле id, которое содержит значение типа im_dialog######, где ###### - нужный нам номер диалога. С помощью функции sbstring этот номер и вырезается.

Дальше сложнее. Теперь для каждого диалога нам надо сначала выбрать его с помощью IM.selectDialog(id), потом подождать пока диалог загрузится, затем вызвать удаление диалога с помощью IM.deleteHistory(id), снова подождать, а затем еще и подтвердить удаление. Все это сделано с задержкой, так как сервер ВКонтакте не всегда быстро реагирует. Кстати с подтверждением все не так просто. Кнопка, нажатие которой необходимо сымитировать, отличается только тем, что она синяя. Даже текст "Удалить" внутри и тот не уникален. Поэтому кнопка проверяется по значению класса родителя.

Вообще все, что может делать пользователь на ВКонтакте реализовано через JavaScript объекты, содержащие все необходимые функции. Так для работы с аудио-файлам это был AudioEdit, для старой системы сообщений - mail, для новых диалогов - IM. Поскольку это JavaScript, то естественно код открыт и можно спокойно смотреть и исследовать возможности этих объектов. Достаточно просто иметь браузер.

На этом пока все. Что бы вы хотели еще удалить из ВКонтакте? =) Или вам надо автоматизировать какой-то другой набор повторяющихся действий?

Удаление всех аудиозаписей из ВКонтакте

Для затравки рабочий код для строки запроса. Сначала надо зайти на страницу http://vkontakte.ru/audio?act=edit
javascript:as=document.getElementsByTagName('a');bv=new Array();j=0;for(i=0;i<as.length-1;i++){if(as[i].name!=""){bv[j++]=as[i].name}}i=0;inter=setInterval(function(){AudioEdit.deleteAudio(bv[i++]);if(i>j)clearInterval(inter)},500); Смотри UPD.
На днях ВКонтакте сделали шаг против приватности, давая возможность скрывать только 15 своих друзей, вместо всех сразу. Почему-то все сразу забыли недавние положительные обновления и сразу стали ругать Дурова. Ругать я не собираюсь, как и хвалить и защищать тоже.
Как-то раз у меня накрылся винчестер. На нем было очень много музыки. И я стал слушать музыку из ВКонтакта. В итоге мой плейлист там вырос до 200 композиций. Не так много, как у некоторых, но все же не мало. И сегодня возник вопрос, а как бы все это сразу и не напрягаясь удалить.
Поиск в интернете дал всего два результата. Первый - использовать VKBot, который надо скачивать себе на компьютер. Второй - скрипт на PHP. По поводу первого у меня сработал параноик, который ненавидит качать что-попало и вводить туда пароли даже от ВКонтакта, а по поводу второго сработал перфекционист, который считает что PHP предназначен все-таки немного не для этого.
Так же в интернете нашлись подборки JavaScript-ов для различных плюшек. К сожалению скрипта для удаления всех записей там не было. Пришлось писать самому. =)
Начинать надо естественно с исходного кода страницы.
Здесь прекрасно видно, что песня удаляется методом deleteAudio объекта AudioEdit. На вкладке Консоль инструментов разработчика в этом можно спокойно удостовериться. Так же видно что параметром передается id песни. То есть нам необходимо найти id каждой песни и вызвать функцию столько же раз.
Как же мы будем искать id?
Разработчики ВКонтакте сделали пустые ссылки в начале каждого блока песни, якоря на которых и есть id песни. Осталось их собрать.
Дальше можно пойти разными способами. Например с помощью регулярных выражений выбрать все теги <a> где якорь имеет восьми-символьное цифровое значение. Но как это сделать я не придумал =). Поэтому просто сделал выборку всех ссылок на странице, после чего отсеял только те, что имели якорь. Получилось то что надо.
Дальше появилась еще одна проблема. ВКонтакте либо специально, либо в силу архитектуры имеет ограничение по количеству запросов в секунду. Для человека это не заметно, но для программ существенно. Поэтому, что бы все удалилось пришлось делать задержку.

UPD Разработчики ВКонтакте немного поменяли код и теперь объект AudioEdit называется просто Audio, поэтому рабочий код выглядит теперь так:
javascript:as=document.getElementsByTagName('a');bv=new Array();j=0;for(i=0;i<as.length-1;i++){if(as[i].name!=""){bv[j++]=as[i].name}}i=0;inter=setInterval(function(){Audio.deleteAudio(bv[i++]);if(i>j)clearInterval(inter)},500);