Skip to content

Instantly share code, notes, and snippets.

@feeedback
Last active May 11, 2021 11:07
Show Gist options
  • Save feeedback/9b41f06625d67794a44ca54c3c893eed to your computer and use it in GitHub Desktop.
Save feeedback/9b41f06625d67794a44ca54c3c893eed to your computer and use it in GitHub Desktop.
(() => {
// нужно открыть аудиозаписи ВК (свои или чужие), открыть консоль (F12) и скопировать код, нажать enter
// когда откроет окно со списком, можно импортировать, например в https://music.yandex.ru/import
const prettify = (str) =>
str
.toLowerCase()
.replace(/ё/g, 'е')
.replace(/[[|(].*?[a-zA-Z0-9а-яА-Я,!@#$%^&*()+-. ][)|\]].*?/g, ' ')
.replace(/[^a-zA-Z0-9а-яА-Я ]+/g, ' ')
.replace(/\d+[^a-zA-Z0-9а-яА-Я]/g, ' ')
.replace(/[',?!@#$%^&*()+-./\\]/g, ' ')
.replace(/\s{2,}/g, ' ')
.trim();
const exportVKMusicList = () => {
const trackElements = [...document.querySelectorAll('.audio_row__performer_title')];
const trackList = trackElements.map((el) => {
const artist = el.getElementsByClassName('audio_row__performers')[0].textContent;
const track = el.getElementsByClassName('_audio_row__title_inner')[0].textContent;
return `${prettify(artist)} - ${prettify(track)}`;
});
const newOpen = window.open();
// console.clear();
if (!newOpen) {
console.log('Открытие нового окна заблокировано браузером. Вывожу список аудио в консоль');
console.log(trackList.join('\n'));
} else {
newOpen.document.write(trackList.join('<br/>')); // открывает текст списка треков в новом окне, для удобства копирования
}
console.log(`Экспортировано треков: ${trackList.length}`);
};
const scrollToEnd = () => {
const startT = Date.now();
const scrollDown = (height = null) => {
document.body.scrollIntoView({ block: 'end' }); // behavior: 'smooth',
setTimeout(() => {
const heightNow = window.pageYOffset;
if (height !== heightNow) {
scrollDown(heightNow);
} else {
console.clear();
console.log('Прокручено до самого низа!', ~~((Date.now() - startT) / 1000), 'секунды');
exportVKMusicList();
}
}, 1000);
// console.log({ height, heightNow });
};
scrollDown();
};
scrollToEnd();
console.clear();
console.log(
'Экспорт запущен....Ожидайте следующего сообщения.\nЭто займет ~10 секунд на каждую 1000 треков.\nНе закрывайте окно во время прокрути, иначе обработаются не все аудиозаписи'
);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment