![Как запретить ненужные каналы на Youtube Как запретить ненужные каналы на Youtube](https://habrastorage.org/getpro/habr/upload_files/c9d/3ca/35a/c9d3ca35a8d136255167dbcf6082cc98.jpg)
Вступление
Меня зовут Михаил и я придумал, как организовать на компьютере белый список каналов в Youtube. Да, прям белый список – видео с каналов, которые явно не разрешены к просмотру – не откроется.
Если вы относитесь к меньшинству ответственных родителей, то, скорее всего, вы уже искали какую-то информацию на этот счёт. Цели у каждого свои – кому-то нужно разрешить смотреть только хорошие мультики, кому-то нужно разрешить смотреть только обучающие видео по подготовке к ЕГЭ. При этом вам, несомненно, попадались советы «забанить нахрен этот чёртов Ютуб» через файл hosts, установить на смартфон специальное приложение, поставить какой-то дополнительный фильтр в плагин блокировщика рекламы в браузере, кто-то пишет, как запретить отдельные каналы средствами самого «ютубчика» и т.п.
Но это всё не то… Запретишь отдельный канал – ребёнок найдёт десять новых дебильных каналов. Поставишь плагин блокировщика рекламы – удалит плагин. А приложение для смартфона, который давно уже должен быть у ребёнка отобран, не поставишь на компьютер.
Краткое описание моего решения
Если говорить упрощённо, мой способ основан на перехвате трафика прокси-сервером Privoxy и внедрении в HTML-код Youtube нехитрых JavaScript'ов, для чего пришлось разработать специальный фильтр для Privoxy.
Эти скрипты анализируют, находится ли канал, видео с которого ребёнок собирается посмотреть, в списке разрёшённых. Если нет – страница блокируется средствами Privoxy. Также блокируются страница и самого канала, если он не разрешён.
Этот самый «фильтр для Youtube» я три раза переделывал почти с нуля. В процессе эксплуатации «старых» версий выяснилось, что отдельные раздолбаи, которым по идее нужно готовиться к ЕГЭ, готовы смотреть видео даже в превьюшках (да-да, без звука!) на главной странице или в результатах поиска Youtube, лишь бы не учиться…
В текущей версии фильтра эта возможность устранена. Причём на главной странице эта возможность устранена радикально (вырезается соответствующий DIV с превьюшками).
Весь свой опыт создания белых списков (в т.ч. и белого списка сайтов) я, насколько мог, описал у себя на сайте в разделе БЕЛЫЙ СПИСОК - там подробно расписано, как установить Privoxy с самоподписанным SSL сертификатом, как направить весь трафик через Privoxy, как закрыть доступ к Privoxy юзерам с ограниченными правами, как запретить браузеру работать не через прокси.
Да, к сожалению, если всё делать более-менее по уму, то приходится совершать массу дополнительных телодвижений. Но если делать не по уму - то будьте уверены: юные пытливые умы найдут способ пинать обойти наложенные вами ограничения.
Обращаюсь к опытным пользователям (тут, наверное, таких большинство):
уверен, что вы сочтёте мои статьи на сайте перегруженными банальностями, ;-) но я старался писать так, чтобы моим способом мог воспользоваться даже полный чайник…
Вы, как профи, можете сразу начинать со страницы белый список каналов Youtube - там можно скачать и сам фильтр, и посмотреть, как его применять.
Технически белый список каналов выглядит как массив JavaScript с, соответственно, списком разрешённых каналов в самом начале фильтра и его можно дополнять (править) в любом текстовом редакторе.
Технические подробности
Теперь позволю себе вдаться в технические детали работы разработанного мной фильтра для Privoxy.
На самом деле, этот фильтр внедряет JavaScript'ы не только в HTML-код YouTube, но и немного модифицирует один из скриптов, отвечающих за проигрывание видео.
Сам код внедряемых скриптов довольно тупой :-) и нет особого смысла на нём останавливаться. Однако стоит упомянуть, что пришлось сделать так, что эти скрипты срабатывают по событиям scroll и mousemove (практика показала, что по window.onload оно работает довольно криво).
Помимо всего прочего, Youtube как-то настолько хитро всё кэширует, что при переходе со страницы с видео с разрешённого канала на страницу с видео с запрещённого канала из-за этого самого кэширования скриптам «кажется», что название канала не изменилось.
Для борьбы с этим кэшированием не придумал ничего умнее, как при исходной загрузке какой-либо страницы создавать переменную, в которую прописывать значение window.location.href, а по событиям scroll и mousemove сравнивать это значение с текущим значением window.location.href и, если оны не равны, делать location.reload().
Недостатки моего решения
Основной недостаток моего решения – само это решение. :-)
Внедрять в страницу JavaScript’ы и на стороне клиента что-то там парсить и анализировать, причём при загрузке практически каждой новой страницы делать location.reload() – не самая лучшая затея.
И практика это подтверждает. В частности, замечался такой глючок: если в результатах поиска по какому-либо ключевому слову кликнуть по ссылке на какое-либо видео до окончательной загрузки страницы, то при открытии страницы по этой ссылке на ней (не пойму почему) замысловатым образом может поехать вёрстка и лечится это только сбросом кэша браузера.
У профессиональных JavaScript программистов моё поделие, наверное, вызовет либо улыбку, либо праведный гнев. :-)
Я, увы, особо на JavaScript ничего не умею, да и задача была «накостылить» фильтр для Privoxy, а не создать академически правильный код.
Если кто-то переделает всё более по уму – буду рад.
Ещё один из недостатков – это не очень очевидная возможность для малолетних раздолбаев вмешаться в работу фильтра посредством всё того же блокировщика рекламы, который теоретически можно настроить на блокировку скриптов фильтра Youtube. Но это лечится запретом на установку всяких там плагинов (у меня на сайте есть отдельная статья по этому поводу – там всё просто). А если использовать белый список Youtube совместно с белым списком сайтов, то и никакой блокировщик рекламы будет не нужен, так как большая часть доменов и поддоменов с рекламой окажется «за белым списком», а то, что просочится – можно додавить средствами Privoxy.
Что можно было бы сделать для улучшения
Куда более правильным было бы обрабатывать содержимое страниц и скриптов Youtube каким-то отдельным скриптом, запускаемым Privoxy, и сразу отдавать пустой контент, если страница не соответствует разрешённым каналам. Такое решение работало бы существенно быстрее и стабильнее.
Причём в Privoxy предусмотрена такая возможность – запускать внешние скрипты (external-filter action)! Но, к сожалению, в версии под Windows она не работает - только под Linux... :-(
Эх, если бы кто-нибудь смог скомпилировать из исходников Privoxy с поддержкой external-filter action под Windows… Я бы, например, точно смог какими-нибудь консольными скриптами на PHP обрабатывать страницы и скрипты Youtube. Кто-то другой – на Python. Да хоть на том же JavaScript или на Go.
Ещё было бы неплохо сделать какой-то BAT'ник, который делал бы вот это всё:
добавить самоподписанный SSL сертификат в доверенные
установить преднастроенный прокси-сервер Privoxy
организовать автозагрузку Privoxy как службы Windows
установить ограничения для пользователей с ограниченными правами
направить через Privoxy весь сетевой трафик Windows
запретить браузеру работать не через прокси
запретить установку расширений в браузеры
Вполне возможно, что сам выбор Privoxy как некоего базиса – тоже не очень оптимально.
Может, есть какое-то решение по организации такого вот прокси на PHP – знает кто-нибудь? ;-)
Послесловие
В первую очередь, данная статья адресована родителям, которые хотят воспитать и вырастить своего ребёнка образованным, всесторонне развитым, с достойными интересами и увлечениями, а не «дофаминовой обезьяной», сидящей по ночам в мессенджерах, «общаясь» с себе подобными, или часами просматривающей идиотские видео. И готовы на всё ради этой великой цели! Даже поставить Privoxy на компьютер.
Я вообще считаю преступлением давать несовершеннолетнему ребёнку смартфон с неограниченным доступом ко всему и/или компьютер, на котором у ребёнка есть права администратора. Вот только подробное обоснование этой моей позиции выходит за рамки настоящей статьи…
К сожалению, подавляющее большинство родителей относятся к времяпрепровождению своих детей весьма попустительски, так как сами примерно такие же «дофаминщики» (ну или просто не понимают всей опасности). Возможно, в комментариях к этой статье образуется перепись таких безответственных родителей, которых будет видно по комментариям а-ля «да как можно в современном мире ограничивать доступ к информации», «да как можно у ребёнка отбирать телефон», «да это каменный век», «это вмешательство в личную жизнь ребёнка», «автор – параноик и маньяк» и т.п. Я останусь при своём мнении…
Во вторую очередь статья адресована IT-шникам, которых может заинтересовать сама задача бана каналов Youtube как таковая, с технической точки зрения.
Как говорится, одна голова хорошо, а две лучше. Всегда полезно знать стороннее мнение. А если у кого-то зачешутся руки сделать что-то своё – ну и совсем хорошо. :-)
Спасибо за внимание!