YouTube

YouTube в Al(co)pac состоит из двух частей:

  1. Поиск и воспроизведение — работает через yt-dlp (обязательно)
  2. Подписки и плейлисты — через Google OAuth Device Flow (опционально)

Установка с нуля

Установите yt-dlp

yt-dlp — утилита для извлечения видео-URL из YouTube. Обязательна для работы YouTube.

# Способ 1: бинарник (рекомендуется)
curl -sL -o /usr/local/bin/yt-dlp \
  "https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp_linux"
chmod +x /usr/local/bin/yt-dlp

# Способ 2: pip
pip install yt-dlp

Проверка:

yt-dlp --version
Всегда используйте последнюю версию yt-dlp. YouTube часто меняет API, и старые версии перестают работать. Обновление: yt-dlp -U или повторная установка.

Добавьте cookies.txt (рекомендуется)

Без cookies YouTube может блокировать запросы (“Sign in to confirm you’re not a bot”).

# Экспортируйте cookies из браузера с залогиненным Google-аккаунтом.
# Используйте расширение "Get cookies.txt" или "EditThisCookie".
# Сохраните файл в директорию сервера:

cp cookies.txt /opt/lampac/cookies.txt
# или
cp cookies.txt /opt/lampac/youtube_cookies.txt

Сервер ищет файл cookies в нескольких местах:

  • /opt/lampac/cookies.txt
  • /opt/lampac/youtube_cookies.txt
  • Рядом с бинарником yt-dlp
  • В папке bin/

Настройте прокси (если YouTube заблокирован)

Если YouTube недоступен напрямую (блокировка DPI в России), настройте один из вариантов:

Вариант A: AntiDPI (встроенный, без VPN)

[antidpi]
enable = true
listen = "127.0.0.1:9898"
strategy = "auto"

[youtube]
proxy = "antidpi"   # или "auto" — автоматически выберет AntiDPI

Вариант B: VLESS прокси (внешний VPN)

[[proxy.vless.entries]]
uri = "vless://..."
balancers = ["youtube"]
label = "YT"

[youtube]
proxy = "vless"   # или "auto"

YouTube доступен напрямую:

[youtube]
proxy = "none"

Установите плагины yt-dlp (рекомендуется)

YouTube использует защиту от ботов (nsig challenge, PO Token). Для её обхода нужны два плагина:

1. EJS Challenge Solver — решает JavaScript-challenge для расшифровки URL потоков:

pip install yt-dlp-ejs

yt-dlp-ejs требует Node.js для выполнения JS-кода. Убедитесь что Node.js установлен:

node --version   # должен быть v16+
# Если нет:
apt install -y nodejs

2. PO Token Provider — генерирует Proof-of-Origin токены для обхода ботозащиты:

pip install bgutil-ytdlp-pot-provider

Сервер автоматически обнаруживает оба плагина и передаёт --plugin-dirs в yt-dlp.

Проверка что плагины установлены:

pip show yt-dlp-ejs bgutil-ytdlp-pot-provider

Перезапустите сервер

systemctl restart alcopac

В логах должно появиться:

youtube: yt-dlp found at /usr/local/bin/yt-dlp
youtube: cookies file found (path: /opt/lampac/cookies.txt)
youtube: using AntiDPI SOCKS5 proxy (proxy: 127.0.0.1:9898)

Конфигурация YouTube

[youtube]
proxy = "auto"   # "auto" | "none" | "antidpi" | "vless"
ЗначениеОписание
autoАвтоматически: AntiDPI (если включён) > VLESS (если настроен) > прямое подключение
noneНе использовать прокси (YouTube доступен напрямую)
antidpiПринудительно AntiDPI
vlessПринудительно VLESS

OAuth (подписки и плейлисты)

Опциональная функция — добавляет в Lampa строку «Подписки» с видео из YouTube-аккаунта пользователя.

Как OAuth работает

  sequenceDiagram
    participant U as Пользователь
    participant B as Telegram бот
    participant S as Al(co)pac сервер
    participant G as Google OAuth

    U->>B: /youtube_auth
    B->>S: Запрос кода
    S->>G: Device Code Request
    G->>S: Код + URL
    S->>B: Код ABCD-EFGH
    B->>U: "Перейдите на google.com/device"
    U->>G: Вводит код, авторизуется
    G->>S: Refresh Token (polling)
    S->>B: Привязка успешна
    B->>U: "✅ Канал: ..."

Возможности

  • Лента подписок — последние видео из подписок пользователя
  • Плейлисты — доступ ко всем плейлистам канала
  • Интеграция в Lampa — строка «Подписки» в главной ленте
  • Per-user — каждый пользователь привязывает свой аккаунт

Разделы

Быстрый старт

Создайте OAuth-клиент

В Google Cloud Console создайте OAuth Client ID типа TVs and Limited Input devices. Подробная инструкция → Настройка OAuth.

Добавьте в конфиг

[youtube_oauth]
client_id = "123456789-xxxxxxx.apps.googleusercontent.com"
client_secret = "GOCSPX-xxxxxxxxxxxxx"

Перезапустите сервер

systemctl restart alcopac

Привяжите аккаунт

Отправьте /youtube_auth в Telegram-бот и следуйте инструкциям.