Как получить массив строк из времени длительности видео на YouTube?

Рейтинг: 0Ответов: 1Опубликовано: 18.02.2023

Допустим, есть плейлист на YouTube с несколькими видео. Получить массив со значениями времени по каждому видео, а затем сложить. Через document.QuerySelectorAll по селектору спана со значением времени я получаю огромный NodeList из которого не могу вытащить контент, содержащийся внутри спана.

Ответы

▲ 0

Вроде все правильно работает. Заселектил я конечно криво, но может меня поправят, как этот момент улучшить. Чтобы скрипт заработал, нужно выбрать плейлист и открыть любое видео в нем, в других разделах селекторы отличаются, если вам нужно там, сделайте сами по примеру. Результат возвращается в секундах:

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
}