11 KiB
YouTube Mass Unsubscriber Script
Скрипт для браузерной консоли, который помогает автоматизировать процесс отписки от YouTube каналов на вашей странице управления подписками.
Версия: 4.0 (Использует SAPISIDHASH для аутентификации)
🚨 ВНИМАНИЕ / ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ 🚨
- ИСПОЛЬЗУЙТЕ ЭТОТ СКРИПТ НА СВОЙ СТРАХ И РИСК!
- Автоматизация действий на платформе YouTube может нарушать Условия использования сервиса.
- Использование скрипта может привести к временным или постоянным ограничениям вашего аккаунта YouTube.
- YouTube регулярно обновляет свой веб-сайт и внутренние API. Любое обновление может сломать этот скрипт без предупреждения.
- Разработчик скрипта не несет ответственности за любые последствия его использования, включая блокировку аккаунта.
- Используйте скрипт ответственно! Рекомендуется устанавливать значительные задержки между запросами (несколько секунд) и не использовать его слишком часто.
Как это работает?
Скрипт имитирует действия, которые ваш браузер выполняет при ручной отписке от канала:
- Поиск каналов: Скрипт анализирует внутренние данные страницы YouTube (
window.ytInitialData
) или, в крайнем случае, структуру HTML (DOM), чтобы найти идентификаторы (Channel ID) всех каналов, отображаемых на текущей странице управления подписками (https://www.youtube.com/feed/channels
). - Получение Ключа API: Извлекает временный ключ API (
INNERTUBE_API_KEY
) из JavaScript-переменных страницы. - Аутентификация: Считывает необходимую куку аутентификации (
SAPISID
) из вашего браузера. - Генерация Заголовка: Создает специальный заголовок
Authorization: SAPISIDHASH ...
на основе вашей кукиSAPISID
, текущего времени и домена YouTube. Этот заголовок требуется для подтверждения подлинности запроса к внутреннему API. - Отправка Запросов: Для каждого найденного ID канала скрипт отправляет POST-запрос на внутренний API YouTube (
/youtubei/v1/subscription/unsubscribe
), включая полученный ключ API, заголовок авторизации и данные о сессии (контекст). - Задержка: Между отправкой запросов для разных каналов делается пауза (настраивается), чтобы снизить нагрузку на серверы YouTube и уменьшить риск обнаружения автоматизации.
Требования
- Современный веб-браузер (например, Google Chrome, Mozilla Firefox, Microsoft Edge).
- Вы должны быть авторизованы в аккаунте YouTube, подписками которого хотите управлять.
Как использовать
- Перейдите на страницу управления подписками YouTube в вашем браузере:
https://www.youtube.com/feed/channels
Убедитесь, что список ваших подписок загрузился и виден на странице. - Откройте Консоль разработчика в браузере. Обычно это делается нажатием клавиши
F12
. Перейдите на вкладкуКонсоль
(Console). - Скопируйте весь код из файла
youtube_mass_unsubscriber.js
(или из блока кода выше). - Вставьте скопированный код в поле ввода консоли.
- Нажмите клавишу
Enter
, чтобы запустить скрипт. - Следуйте инструкциям: Появятся всплывающие окна (
alert
) с предупреждениями и информацией о начале работы. Следите за сообщениями, которые скрипт выводит в консоль – там будет информация о ходе выполнения, найденных каналах, успешных отписках и возможных ошибках. - Обработка страниц: Скрипт обрабатывает только те каналы, которые видны на текущей загруженной странице. Если у вас много подписок и они разбиты на несколько страниц, вам нужно будет перейти на следующую страницу после завершения работы скрипта и запустить его снова.
- Проверка результата: После того, как скрипт завершит работу (появится финальное сообщение
alert
), обновите страницу (клавишаF5
), чтобы увидеть фактические изменения в списке подписок.
Конфигурация
В начале скрипта есть несколько констант, которые можно изменить:
-
DELAY_BETWEEN_REQUESTS_MS
: Время ожидания в миллисекундах между запросами на отписку. Настоятельно рекомендуется не ставить значение ниже 2000-3000 (2-3 секунды). Чем выше значение, тем безопаснее для вашего аккаунта.- Пример:
const DELAY_BETWEEN_REQUESTS_MS = 5000;
// Пауза 5 секунд
- Пример:
-
providedContextData
: ВАЖНО! Текущая версия скрипта использует жестко заданный объектcontext
(данные сессии). Этот объект был добавлен по специфическому запросу и не будет работать для других пользователей или даже для вас через некоторое время.- Для того чтобы скрипт работал универсально, необходимо заменить этот блок на код, который динамически получает актуальный контекст со страницы из
window.ytcfg.data_.INNERTUBE_CONTEXT
илиwindow.yt.config_.INNERTUBE_CONTEXT
. Если вы адаптируете скрипт для общего пользования, удалите или закомментируйтеprovidedContextData
и раскомментируйте/добавьте функцию для динамического получения контекста. Использование жестко заданного контекста не рекомендуется для распространения скрипта.
- Для того чтобы скрипт работал универсально, необходимо заменить этот блок на код, который динамически получает актуальный контекст со страницы из
Возможные проблемы (Troubleshooting)
- Ошибка
401 Unauthorized
,Куки SAPISID не найдена
или скрипт внезапно перестает работать:- Ваша сессия YouTube могла истечь. Попробуйте выйти из аккаунта YouTube и зайти снова.
- Убедитесь, что ваш браузер или расширения (например, блокировщики рекламы или скриптов) не блокируют куки для домена
youtube.com
. - Возможно, YouTube изменил механизм аутентификации, и требуется обновить логику генерации
SAPISIDHASH
.
- Ошибка
Не найдено ID каналов
,Channels not found
, или скрипт не находит ваши подписки:- YouTube мог изменить HTML-структуру страницы управления подписками или структуру объекта
window.ytInitialData
. - Функция
getChannelIdsFromPageData()
в скрипте требует обновления для соответствия новым реалиям. Потребуется анализ актуальной структуры страницы.
- YouTube мог изменить HTML-структуру страницы управления подписками или структуру объекта
- Другие ошибки (400, 403, 500 и т.д.):
- 400 Bad Request: Возможно, формат отправляемых данных (payload) неверен или контекст устарел.
- 403 Forbidden: YouTube мог заблокировать действие с вашего IP или аккаунта из-за подозрительной активности. Увеличьте задержку
DELAY_BETWEEN_REQUESTS_MS
и попробуйте позже. - 500 Internal Server Error: Временные проблемы на серверах YouTube. Попробуйте позже.
- Внимательно читайте сообщения об ошибках в консоли – они могут дать подсказку.
Структура Кода
Основные функции скрипта:
getCookie(name)
: Вспомогательная функция для чтения значения куки.sha1(str)
: Асинхронная функция для вычисления SHA-1 хеша.generateSapisidHashHeader()
: Асинхронная функция для создания заголовкаAuthorization: SAPISIDHASH ...
.getApiKey()
: Получает актуальный ключINNERTUBE_API_KEY
со страницы.getChannelIdsFromPageData()
: Находит ID каналов для отписки на текущей странице.sendUnsubscribeRequest(channelId, apiKey, context)
: Асинхронная функция, отправляющая запрос на отписку для одного канала.massUnsubscribeWithSapisidHash()
: Главная асинхронная функция, которая оркеструет весь процесс (получение данных, цикл по каналам, вызов отписки, задержки, отчет).
Удачи и будьте осторожны!