Как получить массив строк из времени длительности видео на YouTube?
Допустим, есть плейлист на YouTube с несколькими видео. Получить массив со значениями времени по каждому видео, а затем сложить. Через document.QuerySelectorAll по селектору спана со значением времени я получаю огромный NodeList из которого не могу вытащить контент, содержащийся внутри спана.
Ответы (1 шт):
Автор решения: MrYogurt
→ Ссылка
Вроде все правильно работает. Заселектил я конечно криво, но может меня поправят, как этот момент улучшить. Чтобы скрипт заработал, нужно выбрать плейлист и открыть любое видео в нем, в других разделах селекторы отличаются, если вам нужно там, сделайте сами по примеру. Результат возвращается в секундах:
const combineTime = (arr) => {
const arrLength = arr.length
if (arrLength === 3) {
return arr[0] * 3600 + arr[1] * 60 + arr[2]
}
if (arrLength === 2) {
return arr[0] * 60 + arr[1]
}
if (arrLength === 1) {
return arr[0]
}
}
const calculatePlaylistTime = () => {
const playlistItems = document.querySelectorAll('#playlist-items')
if (playlistItems.length === 0) return // если массив плейлиста пустой, стопаем функцию
let calculatedTime = 0
for (let i = 0; i < playlistItems.length; i++) {
const splitedTime = playlistItems[i].children[0].children[0].children[1].children[0].children[0].children[1].children[1].children[1].outerText
.split(':')
.map(item => +item) // достаем время в виде строки, разделяем его на составляющие в массив и перебираем этот массив, чтобы преобразовать в числа
const totalTime = combineTime(splitedTime) // вызываем функцию, которая посчитает время в массиве в секундах
calculatedTime += totalTime
}
return calculatedTime
}