Go to file
2025-04-13 14:55:30 +00:00
README.md Обновить README.md 2025-04-13 14:55:30 +00:00

YouTube Mass Unsubscriber Script

Скрипт для браузерной консоли, который помогает автоматизировать процесс отписки от YouTube каналов на вашей странице управления подписками.

Версия: 4.0 (Использует SAPISIDHASH для аутентификации)


🚨 ВНИМАНИЕ / ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ 🚨

  • ИСПОЛЬЗУЙТЕ ЭТОТ СКРИПТ НА СВОЙ СТРАХ И РИСК!
  • Автоматизация действий на платформе YouTube может нарушать Условия использования сервиса.
  • Использование скрипта может привести к временным или постоянным ограничениям вашего аккаунта YouTube.
  • YouTube регулярно обновляет свой веб-сайт и внутренние API. Любое обновление может сломать этот скрипт без предупреждения.
  • Разработчик скрипта не несет ответственности за любые последствия его использования, включая блокировку аккаунта.
  • Используйте скрипт ответственно! Рекомендуется устанавливать значительные задержки между запросами (несколько секунд) и не использовать его слишком часто.

Как это работает?

Скрипт имитирует действия, которые ваш браузер выполняет при ручной отписке от канала:

  1. Поиск каналов: Скрипт анализирует внутренние данные страницы YouTube (window.ytInitialData) или, в крайнем случае, структуру HTML (DOM), чтобы найти идентификаторы (Channel ID) всех каналов, отображаемых на текущей странице управления подписками (https://www.youtube.com/feed/channels).
  2. Получение Ключа API: Извлекает временный ключ API (INNERTUBE_API_KEY) из JavaScript-переменных страницы.
  3. Аутентификация: Считывает необходимую куку аутентификации (SAPISID) из вашего браузера.
  4. Генерация Заголовка: Создает специальный заголовок Authorization: SAPISIDHASH ... на основе вашей куки SAPISID, текущего времени и домена YouTube. Этот заголовок требуется для подтверждения подлинности запроса к внутреннему API.
  5. Отправка Запросов: Для каждого найденного ID канала скрипт отправляет POST-запрос на внутренний API YouTube (/youtubei/v1/subscription/unsubscribe), включая полученный ключ API, заголовок авторизации и данные о сессии (контекст).
  6. Задержка: Между отправкой запросов для разных каналов делается пауза (настраивается), чтобы снизить нагрузку на серверы YouTube и уменьшить риск обнаружения автоматизации.

Требования

  • Современный веб-браузер (например, Google Chrome, Mozilla Firefox, Microsoft Edge).
  • Вы должны быть авторизованы в аккаунте YouTube, подписками которого хотите управлять.

Как использовать

  1. Перейдите на страницу управления подписками YouTube в вашем браузере: https://www.youtube.com/feed/channels Убедитесь, что список ваших подписок загрузился и виден на странице.
  2. Откройте Консоль разработчика в браузере. Обычно это делается нажатием клавиши F12. Перейдите на вкладку Консоль (Console).
  3. Скопируйте весь код из файла youtube_mass_unsubscriber.js (или из блока кода выше).
  4. Вставьте скопированный код в поле ввода консоли.
  5. Нажмите клавишу Enter, чтобы запустить скрипт.
  6. Следуйте инструкциям: Появятся всплывающие окна (alert) с предупреждениями и информацией о начале работы. Следите за сообщениями, которые скрипт выводит в консоль там будет информация о ходе выполнения, найденных каналах, успешных отписках и возможных ошибках.
  7. Обработка страниц: Скрипт обрабатывает только те каналы, которые видны на текущей загруженной странице. Если у вас много подписок и они разбиты на несколько страниц, вам нужно будет перейти на следующую страницу после завершения работы скрипта и запустить его снова.
  8. Проверка результата: После того, как скрипт завершит работу (появится финальное сообщение 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() в скрипте требует обновления для соответствия новым реалиям. Потребуется анализ актуальной структуры страницы.
  • Другие ошибки (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(): Главная асинхронная функция, которая оркеструет весь процесс (получение данных, цикл по каналам, вызов отписки, задержки, отчет).

Удачи и будьте осторожны!