Обновить README.md

This commit is contained in:
olilovedani 2025-04-13 14:55:30 +00:00
parent 7222ac8c9e
commit 5c0f57f36e

View File

@ -1,2 +1,98 @@
# youtube_mass_unsubscriber
# 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()`: Главная асинхронная функция, которая оркеструет весь процесс (получение данных, цикл по каналам, вызов отписки, задержки, отчет).
---
Удачи и будьте осторожны!