Greasemonkey скрипт для скачування музики з Вконтакте

  1. Скрипт скачування музики з вконтакте Увага! За посиланням доступна нова версія скрипта для скачування...
  2. Як працює скрипт

Скрипт скачування музики з вконтакте

Увага! За посиланням доступна нова версія скрипта для скачування музики вконтакте .

Виглядає це справа після причісування і застосування моїх дизайнерських талантів так:

Виглядає це справа після причісування і застосування моїх дизайнерських талантів так:

Бачимо дві складові. По-перше, посилання "DL" у кожній мелодії на сторінці. Якщо клікнути по цьому посиланню - браузер або відкриє музичний плеєр і почне грати мелодію, або почне завантажувати файл. Якщо ваш браузер відкриває медіа-плеєр, а вам треба скачати - просто натисніть на це посилання правою кнопкою і натисніть "Зберегти об'єкт як ...".

Ці посилання з'являються відразу при заході на сторінку аудіо, але спрацьовують не завжди. Це тому що у вконтакте хмара всього подгружается Аяксом і за всім не встежиш. Тому ці посилання з'являються самі тільки при першому заході на сторінку. При переходах по розділах або в інші пункти меню посилання можуть не з'являтися. І тут вступає в справу другий елемент.

Другий елемент - це іконка ноти, що з'явилася в шапці сайту. Якщо натиснути на неї - з'являються посилання "DL" якщо їх раніше не було. Це все її функції, власне.

Завантажити скрипт для скачування музики вконтакте

Як встановити скрипт

Установка проста, але скрипт вимагає наявності плагіна Greasemonkey . Якщо він у вас вже є - все відмінно. Просто перетягніть скрипт на вікно браузера і підтвердіть установку. Якщо грісманкі у вас немає - встановіть. Це корисна штука.

Після установки він відразу почне працювати.

Як працює скрипт

Для допитливих я опишу як скрипт влаштований і працює. Адже у мене тут блог про веб-розробку;) До речі, я вже писав про greasemonkey-скрипти на цьому блозі і давав один, яким користуюся до сих пір досить успішно. це скрипт виділення nofollow і noindex посилань .

А зараз поговоримо про цей. Для початку, ось код.

// == UserScript == // @name vk-get // @namespace http://vkontakte.ru // @description 4> 102; O5B AAK;: C "A: 0G0BL" 25745 345 5ABL 0C48> 70? 8AL // @include http://vkontakte.ru/* // @require http://yandex.st/jquery/1.6.1/jquery.min.js // == / UserScript == if (unsafeWindow.console ) {var GMlog = unsafeWindow.console.log; } UnsafeWindow.detect_audio = detect_audio; function detect_audio () {$ ( '. ifman_dl_link'). remove (); $ ( 'Input [id * = audio_info]'). Each (function () {var val = $ (this) .attr ( 'value'); var arr = val.split ( ','); var mp3 = arr [0]; var html = '<a href="'+mp3+'" class="ifman_dl_link"> DL </a>'; $ (this) .after (html);}); } Function true_load () {if ($ ( 'ifman_tone'). Attr ( 'rel')! = 'Loaded') {var btn = '<div id = "ifman_tone" rel = "loaded" style = "background-image : url (http://vkontakte.ru/images/icons/audio_iconset.gif); height: 11px; width: 11px; background-position: bottom; position: absolute; top: 15px; left: 50%; cursor: pointer ; " title = "Показати посилання для скачування аудіо" onclick = "detect_audio ()"> </ div> '; $ ( '# Top_links'). Before (btn); }} True_load ();

Розповім спочатку ідею. Посилання для прослуховування файлів вконтакте доступні кожному залогіненним користувачеві. Біда в тому, що вони залежать від сесій. Тобто, поки сесія є - посилання працює і може бути відкрита навіть іншим користувачем. Як сесія руйнується (користувач виходить) - посилання перестає працювати. В цьому одна з труднощів використання вконтакте як медіа-сервера на своєму сайті. А що, зручно було б - музика лежить там, посилання отримуєш, вбудовувати в свій сайт і граєш на ньому. Але ж ні.

Але ми-то виконуємо JS будучи залогіненним! Так що посилання у нас завжди є. Залишилося тільки знайти їх в коді і намалювати посилання на них в явному вигляді.

Труднощі виникають через те, що вконтакт дуже багато чого вантажить і оновлює Аяксом. Тому посилання можуть пропадати або навіть не малюватися взагалі. Щоб обійти це можна намагатися ловити події вікна, але простіше зробити кнопку, яка робить зазначене вище дію (пошук і відображення посилань на музику) на вимогу. Зрештою, не завжди і не всім потрібно бачити посилання на скачування, вони досить спецефічно виглядають.

Тепер за кодом. Головна рядок в шапці greasemonkey - require. Вона підключає jquery зі сховищ Яндекса.

Далі йде створення функції налагодження GMlog. Якщо доступний об'єкт console - його функція log стає доступна всередині GM-скрипта під ім'ям GMlog. Ця функція просто виводить в консоль файрбага якісь дані.

Далі ми реєструємо функцію визначення посилань і малювання їх в об'єкті вікна, а не в локальному просторі імен GM-скрипта.

А далі ми визначаємо дві функції. Одна - власне знаходження музики і відображення посилань на скачування. Друга - малювання іконки у вигляді ноти.

Функція detect_audio робить наступне:

  1. Знаходить і видаляє посилання на скачування музики, якщо вже такі є. Це потрібно щоб посилання не плодилися при повторному натисканні на кнопку.
  2. Шукає все input, де id починається з "audio_info" і перебирає їх.
  3. Для кожного такого елемента шукається значення атрибута value. Воно містить посилання на файл і якесь число через кому.
  4. Тому ми розбиваємо цей рядок по коми
  5. І беремо тільки першу частину.
  6. Далі формуємо html-код посилання, яку будемо відображати.
  7. І вставляємо її відразу після знайденого input.

Загалом, нічого складного. Самий інетересний момент - це знаходження input з id, які починаються часткою з сaudio_info.

Функція true_load взагалі не обов'язкова і зроблена для краси. Вона робить взагалі просту річ. Якщо іконка ще не відображається - генерується html-код цієї ікони і вставляється в код сторінки.

Два тонких моменту. Перше - відображається посилання чи ні я визначаю намагаючись знайти значення її атрибуту. Природно, цей атрибут включений в генерований код самої кнопки.

Другий момент - сама ікона. Я вирішив використовувати іконку самого Вконтакте. Але виявилося, що вона є частиною спрайту з двох ікон - знака плюс і ноти. Це був мій перший досвід роботи з спрайтами) Нічого складного насправді. Беремо іконку, ставимо її в фон div-а і за допомогою background-position добиваємося її відображення.

От і все. Такий ось скрипт для скачки музики з вконтакте. Він не дуже функціональний, але своє завдання виконує. Особисто у мене на домашньому комп'ютері такий стоїть і я вже скачав якусь кількість музики, надівши попередньо чорну бандану з веселим Роджером.

Буду вдячний, якщо ви будете використовувати цей скрипт і залишите свої відгуки та побажання нижче. На питання теж спробую відповісти якомога оперативніше. Ще, звичайно, буду вдячний якщо поділіться посиланням на цей пост з друзями вконтакте. Ну і підписуйтесь, не соромтеся, мені подобається писати GM-скрипти і я маю намір роздавати їх безкоштовно. НЕ пропустіть!


Сподобалася стаття? Постав плюс один!

Ru // @description 4> 102; O5B AAK;: C "A: 0G0BL" 25745 345 5ABL 0C48> 70?
Сподобалася стаття?