Я пытаюсь найти общее количество просмотров всех видео в моем плейлисте на YouTube. Я вижу, что под названием плейлиста указано число «общее количество просмотров». Однако, похоже, это количество просмотров, полученных при первом входе в плейлист. Когда я суммирую количество просмотров отдельных видео, я получаю значительно большее число, потому что, как я полагаю, большинство видео просматриваются по ссылке, отличной от плейлиста.
В поисках ответа я вижу два предложения
ytInitialData.header.playlistHeaderRenderer.viewCountText.simpleText
Но это просто дает тот же номер, который доступен под именем плейлиста.
var totalViews = 0;
var videos = document.querySelectorAll('ytd-playlist-video-renderer');
for (var i= 0; i < videos.length; i++) {
var viewsElement = videos[i].querySelector('#metadata > span:nth- child(1)');
if (viewsElement !== null) {
var views = viewsElement.textContent.trim().replace(/\D/g,'');
totalViews += parseInt(views);
}
}
console.info('Total views of all videos in the playlist: ' + totalViews);
Но это дает общий счет 0.
Я попробовал этот скрипт, и он, кажется, работает в браузере. Я не мог понять никаких возможных крайних случаев. Я также предположил, что общее количество просмотров никогда не превысит максимально безопасное целое число в javascript. Также обратите внимание, что представления, которые говорят как 1.3M
560K
, аппроксимированы/округлены. Таким образом, вы никогда не сможете получить точное количество просмотров из плейлиста. Только приближение. Однако это будет точно, если в плейлисте есть видео с просмотрами менее 1000.
const videos = document.querySelectorAll('ytd-playlist-video-renderer');
const convertViews = (views) => {
let num = parseFloat(views);
if (views.includes("K")) {
num *= 1000;
} else if (views.includes("M")) {
num *= 1000000;
} else if (views.includes("B")) {
num *= 1000000000;
}
return num;
}
let totalViews = 0
videos.forEach((vid) => {
const views = vid.querySelector('#video-info > span:nth-child(1)')?.textContent.split(' ')[0] || '0'
const converted = convertViews(views)
totalViews += converted
})
console.info(totalViews)
Можете ли вы предоставить рабочую демонстрацию?