Как стать автором
Обновить

Как скачать все треки в BOOM / Как добавить все свои треки в плейлист ВК

Как добавить в плейлист ВК все свои аудио разом?


Разом — не знаю. Но знаю, как это сделать последовательно без усилий.

Что нужно? Компутер, браузер, страница в ВК с треками.

Инструкция:

1) Переходим во вкладку «Музыка»

2) Создаем плейлист. Либо используем имеющийся (созданный вами), но перемещаем его в начало, чтобы было так:



3) Пролистываем страницу до конца, чтобы все треки прогрузились

4) Открываем консоль (В Chrome: F12 -> вкладка «Console»)



5) Вставляем этот скрипт:

let delay = 500;
let amount = 0;
let unavailable = 0;

window.x = document.querySelector(".CatalogBlock__itemsContainer");
window.audios = x.querySelectorAll(".audio_row");
let total = audios.length;

let result = prompt("Сколько треков добавить? (-1 = все): ", "-1");
amount = +result;

result = prompt("Задержка (чем меньше, тем быстрее. Если появляются ошибки, то лучше поставить побольше - 1000 и выше)", "500");
delay = +result;

let t1 = delay;
    t2 = t1 + delay;
    t3 = t2 + delay;
    t4 = t3 + delay;
    t = t4 + 100;

if (amount == -1) { amount = total; }

let time = ((delay * 4) + 100) / 1000;
let alltime = time * amount; 

function f1(it){
    window.btn1 = audios[it];
    btn1.scrollIntoView(false);
    btn1.onmouseover();
}

function f2(){
    btn2 = btn1.querySelector(".audio_row__action_more");
    if (btn2 != null) {
        btn2.click();
    }
}

function f3(){
    window.btn3 = btn1.querySelector(".audio_row__more_action_add_to_playlist");
    if (btn3 != null) {
        btn3.click();
    }
}

function f4(it){
    let num = total - it;
    
    if (btn2 == null) { 
        ++unavailable;
        console.log("Аудиозапись недоступна! Пропуск...");
        return; 
    }
    window.actions = btn1.querySelector(".audio_row__more_actions");
    window.moreactions = actions.querySelectorAll(".audio_row__more_action");
    if (moreactions.length == 7) {
        window.add = moreactions[3]
    }
    else {
        window.add = moreactions[4]
    }
    add.click();

    let tmp = btn1.querySelector(".eltt");
    tmp.style.display = "none";

    if (num == amount) {
        let str = "Треков добавлено: " + (amount - unavailable);
        if (unavailable > 0) {
            str += " (Недоступно: " + unavailable + " аудио )";
        }
        str += "\nЕсли на деле добавилось меньше, нужно увеличить задержку";
        alert(str);
    }

    let left = amount - (num);
    alltime  = time * left;
    let hour = Math.floor(alltime / 3600)
        min = Math.floor((alltime - hour * 3600) / 60)
        sec = Math.floor(alltime - hour * 3600 - min * 60)

    let str1 = "Осталось примерно: ";
    if (hour > 0) { str1 += (hour + " ч "); }
    if (min > 0) { str1 += (min + " м "); }
    str1 += (sec + " с ");

    let str2 = "Выполнено: " + Math.floor((num/amount)*100) + "% " + "(" + num + "/" + amount + ")";

    console.clear();
    console.log(str2);
    console.log(str1);
}

function AddAudio(it) {
    setTimeout(f1, t1, it);
    setTimeout(f2, t2);
    setTimeout(f3, t3);
    setTimeout(f4, t4, it);
}

for (let i = total-1; i >= total-amount; --i) {
    setTimeout(AddAudio, t * (total-1-i), i);
}

6) Enter, следуем подсказкам во всплывающих окнах

7) Ждем. Ничего не трогаем!

Треки будут добавляться снизу вверх. Это сделано для того, чтобы в плейлисте был такой же порядок, как и в аудиозаписях. Если не хочется добавлять все треки, можно выбрать количество самому. Также можно выбрать задержку (не рекомендуется). Скрипт эмулирует ручную работу, поэтому придется подождать. Зато все автоматизировано! Поставил работать, ушел пить чай. Вернулся, все готово.

Для удобства я добавил таймер, он отобразится в консоли.



Придирчивый читатель может заметить, что если у вас несколько тысяч треков, то всё добавить в один плейлист не получится, и окажется прав. Ведь один плейлист может вместить максимум 1000 треков. Что в таком случае делать? Да ничего особенного, сделать несколько плейлистов. Да уж, небольшой такой кликбейт в заголовке получился. Уже и не разом и не в один плейлист. Но лучше уж так, чем «Как добавить не разом не все треки в разные плейлисты». В общем, не суть. Если у вас 2450 треков, то создаете 3 плейлиста, чтобы они шли по порядку.



Скрипт добавляет в первый плейлист. Когда он заполнится, добавление пойдет во второй и т.д.

Т.е. первая тысяча треков будет в BOOM_1, вторая тысяча в BOOM_2, остальные, соответственно в BOOM_3. Вся ваша фонотека будет разбита по плейлистам, причем в хронологическом порядке!

А зачем это все нужно?


К сожалению, в приложении BOOM нет кнопки «скачать всё». По крайней мере, я не нашел. Но там можно скачать плейлист целиком. Нажимаете квадратную кнопочку и всё. Так и зародилась эта идея.



Правда, у меня BOOM опупел от количества треков в плейлисте и почему-то скачал только 984 из 1000. 16 куда-то затерялись. Надеюсь, это не были песни из моего повседневного рациона. А если и так, то не составит труда их найти и загрузить «вручную». В BOOM, кстати, треки скачиваются в порядке плейлиста. Т.е. в результате проделанных действий, в приложении будет такая же хронология аудиозаписей, как и в вашей странице ВК. Это важно!

Теперь можно вздохнуть с облегчением и быть уверенным, что вы не зря взяли пробную подписку на BOOM.

В заключение хочу отметить, что предложенный код не претендует на оптимальность. Автор потратил на изучение особенностей JavaScript и HTML два вечера.

Надеюсь, что кому-то эта статься оказалась полезна. Но если кто-то предложит более удобное решение проблемы, буду только рад.

А, и еще. Скрипт протестирован в Яндекс.Браузере. Будет неплохо, если кто-то даст знать, как обстоят дела в других браузерах.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.