Last active
January 10, 2026 18:11
-
-
Save inilim/5a167d2c781ab92880d1a4cc8d0718fd to your computer and use it in GitHub Desktop.
YouTube - скрыть старые видео | hide old videos
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
| // ==UserScript== | |
| // @name YouTube — скрыть старые видео | |
| // @namespace http://tampermonkey.net/ | |
| // @version 1.3 | |
| // @description Скрывает видео старше 1 года | |
| // @author You | |
| // @match https://www.youtube.com/* | |
| // @grant none | |
| // ==/UserScript== | |
| (function() { | |
| 'use strict'; | |
| // Настройка: сколько месяцев считать "старым" (12 = 1 год) | |
| const MAX_AGE_MONTHS = 12; | |
| // Интервал проверки в миллисекундах (1000 мс = 1 секунд) | |
| const CHECK_INTERVAL_MS = 2000; | |
| function parseAge(text) { | |
| if (!text) return 0; | |
| const yearMatch = text.match(/(\d+)\s*(year|год|года|лет)/i); | |
| if (yearMatch) { | |
| return parseInt(yearMatch[1]) * 12; | |
| } | |
| const monthMatch = text.match(/(\d+)\s*(month|месяц|месяца|месяцев)/i); | |
| if (monthMatch) { | |
| return parseInt(monthMatch[1]); | |
| } | |
| return 0; | |
| } | |
| function hideOldVideos() { | |
| const videoItems = document.querySelectorAll('ytd-rich-item-renderer:not([data-checked-age])'); | |
| videoItems.forEach(item => { | |
| // Если видео уже обработано (скрыто или проверено), пропускаем | |
| if (item.dataset.checkedAge) return; | |
| // 1. Получаем заголовок | |
| const titleEl = item.querySelector('h3'); | |
| const title = titleEl ? titleEl.getAttribute('title') : 'Без названия'; | |
| // 2. Получаем ссылку | |
| let videoUrl = 'Ссылка не найдена'; | |
| const videoUrlEl = item.querySelector('h3 > a'); | |
| if (videoUrlEl) { | |
| videoUrl = videoUrlEl.getAttribute('href'); | |
| } | |
| // 3. Проверяем возраст | |
| // Ищем контейнер с метаданными (зависит от версии интерфейса YT) | |
| const metaEl = item.querySelector('yt-content-metadata-view-model'); | |
| if (!metaEl) { | |
| // Если метаданные еще не прогрузились, просто выходим из этой итерации | |
| // (не ставим checkedAge, чтобы проверить в следующий раз) | |
| return; | |
| } | |
| const text = metaEl.textContent.trim(); | |
| const age = parseAge(text); | |
| if (age > 0) { | |
| // Помечаем, что видео проверено (чтобы не проверять его снова) | |
| item.dataset.checkedAge = 'true-' + age; | |
| } else { | |
| // Если возраст не распарсился (например "2 hours ago"), | |
| // тоже помечаем как проверенное, чтобы не тратить ресурсы | |
| if (text.length > 0) { | |
| item.dataset.checkedAge = 'true-' + age; | |
| } | |
| return; | |
| } | |
| // 4. Скрываем и логируем, если старое | |
| if (age >= MAX_AGE_MONTHS) { | |
| item.style.display = 'none'; | |
| // OR | |
| // item.style.setProperty('opacity', '0.2', 'important'); | |
| console.log(`[Hide video] MONTHS: "${age}" | Raw text: "${text}" | URL: https://www.youtube.com${videoUrl} | Title: "${title}"`); | |
| } | |
| }); | |
| } | |
| // Запускаем сразу при загрузке... | |
| hideOldVideos(); | |
| // ...и далее каждые 5 секунд | |
| setInterval(hideOldVideos, CHECK_INTERVAL_MS); | |
| })(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment