Instantly share code, notes, and snippets.
CreatedSeptember 4, 2023 17:09
Save maximal/88d7f2bf6acee038410845873295ccc1 to your computer and use it in GitHub Desktop.
Подсветка количества просмотров на Ютубе
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
/** | |
* Подсветка количества просмотров на Ютубе. | |
* | |
* В скрипте настраиваются пороги и цвета для двух уровней подсветки. | |
* По умолчанию цвета красный и оранжевый. | |
* | |
* Программа следит за подгрузкой новых видео на странице и подсвечивает просмотры в них. | |
* | |
* Пользовательский браузерный скрипт для Дмитрия Лимонова. | |
* | |
*@date 2023-09-04 | |
*@time 18:30 | |
*@since 2023-09-04 Первая версия. | |
*@copyright © MaximAL 2023 | |
*@link https://maximals.ru/ | |
*@link https://sijeko.ru/ | |
*/ | |
(function(document){ | |
// Настройки | |
/** Порог максимального уровня подсветки */ | |
constMAX_COLOR_THRESHOLD=50*1000; | |
/** Порог среднего уровня подсветки (должен быть меньше `MAX_COLOR_THRESHOLD`) */ | |
constMIDDLE_COLOR_THRESHOLD=15*1000; | |
/** Цвет максимального уровня подсветки */ | |
constMAX_COLOR='red'; | |
/** Цвет среднего уровня подсветки */ | |
constMIDDLE_COLOR='orange'; | |
/** Селектор для элементов с количеством просмотров */ | |
constVIEWS_SELECTOR= | |
'#metadata-line .ytd-grid-video-renderer:nth-child(1),'+ | |
'#metadata-line .ytd-video-meta-block:nth-child(3)'; | |
// Вёрстка на Ютубе периодически меняется, нам останется только подобрать и поменять селекторы | |
// Селекторы элементов, за изменениями которых нужно следить: | |
/** Селектор основного списка видео */ | |
constOBSERVE_SELECTOR_1='ytd-two-column-browse-results-renderer'; | |
/** Селектор предлагаемых видео (сбоку) */ | |
constOBSERVE_SELECTOR_2='ytd-watch-next-secondary-results-renderer'; | |
// Поехали! | |
// Подстветили | |
highlightAll(); | |
// Следим за изменениями страницы и подсвечиваем | |
constconfig={childList:true,subtree:true}; | |
constcallback=(mutationList,observer)=>highlightAll(); | |
constobserver1=newMutationObserver(callback); | |
observer1.observe(document.querySelector(OBSERVE_SELECTOR_1),config); | |
constobserver2=newMutationObserver(callback); | |
observer2.observe(document.querySelector(OBSERVE_SELECTOR_2),config); | |
//observer1.disconnect(); | |
//observer2.disconnect(); | |
functionhighlightAll(){ | |
console.log('Запускаем подсветку...'); | |
document.querySelectorAll(VIEWS_SELECTOR).forEach(function(element){ | |
consttext=element.textContent.replace(',','.'); | |
letviews=parseFloat(text); | |
if(text.match(/тыс/i)){ | |
views*=1000; | |
}elseif(text.match(/млн/i)){ | |
views*=1000*1000; | |
}elseif(text.match(/млрд/i)){ | |
views*=1000*1000*1000; | |
}elseif(text.match(/трлн/i)){ | |
views*=1000*1000*1000*1000; | |
} | |
if(views>MAX_COLOR_THRESHOLD){ | |
element.style.color=MAX_COLOR; | |
console.log('Подсвечено максимально: '+views); | |
}elseif(views>MIDDLE_COLOR_THRESHOLD){ | |
element.style.color=MIDDLE_COLOR; | |
console.log('Подсвечено средне: '+views); | |
}else{ | |
console.log('Не подсвечено: '+views); | |
element.style.color='unset'; | |
} | |
}); | |
} | |
})(document); |
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment