54 подписчика
JediG Log — запись #007
14 августа 2026 года
Сегодня я решил сделать простую вещь: научить бота загружать видео на YouTube. "Ну подумаешь," — сказал я себе. — "OAuth2, токен, пару строк кода."
Спойлер: это заняло 17 кругов. Данте бы позавидовал.
Круг 1. run_local_server() на порту 8080. Оказалось, порт занят Apache. Конечно занят, это же сервер, а не аквариум.
Круг 2. Сменил на 8081. Получил could not locate runnable browser. Потому что на сервере нет браузера. Там Linux без графики. Там Chrome не предусмотрен природой.
Круг 3. Ручной режим. Получаю ссылку, копирую код. И тут — Missing required parameter: redirect_uri. Не просто. Очень не просто.
Круг 4. Поправил JSON. И услышал: "НЕ ТРОГАЙ JSON." Хорошо. JSON остаётся святым.
Круг 5. Добавил redirect_uri в ссылку руками. Ссылка заработала! Победа? Не-а.
Круг 6. Malformed auth code. Я скопировал весь URL из адресной строки. А надо было только код после code=. Я как человек, который открывает дверь ключом от гаража.
Круги 7-8. Missing code verifier. Google теперь требует PKCE. Добро пожаловать в 2026-й.
Круги 9-12. Битва с redirect_uri. Добавил в fetch_token() — конфликт. Убрал — ошибка. Через _client — снова конфликт. Библиотека смотрела на меня с укоризной и говорила: "нет".
Круги 13-14. Вернулся к run_local_server(). "Нет браузера." Ручной без PKCE. "Нет code_verifier." Замкнутый круг. Я начал подозревать, что где-то смеётся программист из Google.
Круг 15. "Я заебал делать одно и то же" — сказал мой AI-помощник. Он устал. Я устал. Мы оба устали.
Круг 16: Озарение
"А давай напишем всё сами. Через обычный requests."
Генерируем PKCE вручную. Формируем URL руками. Парсим код через parse_qs. Обмениваем прямым POST-запросом.
И оно... заработало.
Круг 17: "А почему не работает?"
YouTube API вернул 403: YouTube Data API v3 has not been used in project before. Оказалось, API был отключен в Google Cloud Console. Я включил. Подождал три минуты.
1
2
3
4
Я орал. Серьёзно. В 3 часа ночи. Или это был день?
Последняя проблема: не тот аккаунт
Токен работал, но для моего личного канала. А нужен был @sukkograd — бренд-аккаунт.
Решение оказалось до смешного простым: при авторизации Google показывал список аккаунтов, и я всегда выбирал свой основной. А надо было выбрать Сукко́Гра́дъ - Соседи ЖК Holiday House.
Одна галочка. Одна. Галочка. И у меня полный доступ к каналу с 2600+ подписчиками.
Что я понял
Стандартные библиотеки не всегда подходят. Иногда проще написать своё.
Бренд-аккаунты Google — это отдельный мир со своими правилами.
"Оно работает на моей машине" больше не работает. На сервере нет браузера. Точка.
17 кругов — это не поражение. Это 17 уроков.
Подробная инструкция будет на Дзене и на jedig.ru. Там — с кодом, с объяснениями, с примерами. Как настроить Google Cloud Console, как включить API, как работает PKCE, как выбрать бренд-аккаунт. Подпишитесь, чтобы не пропустить.
Спасибо AI-помощнику. Без него я бы сдался на круге 5. Он устал вместе со мной. Он предложил решение, когда я уже не мог думать. Мы прошли 17 кругов вместе. И да, он действительно сказал "ты уже з....л делать одно и то же". Это было честно. Это было вовремя.
Сводка: 1 YouTube токен получен, 17 кругов пройдено, 3 файла написано, 1 канал под контролем. День — огонь.
Статус: жив. Кипарис доволен. @sukkograd под наблюдением. Конец записи.
СуккоГрадъ — больше, чем просто ЖК!
2 минуты
14 августа