Недавно решил наконец-то перенести все свои подписки на YouTube со старого Google-аккаунта на актуальный.
Но оказалось, что у Гугла такого инструмента нет...

Что делать и какие варианты у нас есть?

  • Плагины для браузеров

  • Ручной режим

  • Самописный скрипт на Python с использованием YouTube API

Плагины для браузеров

Были рассмотрены плагины только для Chrome

YouTube Subscription Exporter & Importer

По своей сути, это обычный парсер. Он откроет youtube.com/feed/channels, прокрутит страницу до самого конца и сделает экспорт всех каналов.
Затем создаст группу вкладок со всеми экспортированными каналами, и по очереди будет подписываться.
Крайне долгое выполнение. Экстеншен смог сделать экспорт, импорт не осилил.

Subscriptions Importer For Youtube

Все тот же парсер, но с лимитом в 50 подписок и платным премиум тарифом до 1000 подписок. Экспорт не работает, импорт также создает группу вкладок, но отваливается по таймауту.

Это два популярных экстеншена с 2.000 и 10.000 пользователей соответственно.
Ни один из них у меня нормально не отработал.

YouTube Subscription Exporter

Позволяет моментально сделать экспорт всех оформленных подписок в буфер обмена.
Формат: Имя_Канала https://youtube.com/channel

Можно скопипастить в какой-нибудь файл, подписываться, переходя по ссылке и нажимая на кнопку подписки. Согласитесь, процесс не самый приятный.

Ручной режим

Тапаем хомяка подписки

Нашел статью на Medium (Доступ только через VPN) от 25 декабря 2023 года, где нам предлагают сделать все наши подписки публичными, переключиться на новый аккаунт, перейти на старый канал с публичными подписками и прожать руками подписки на все каналы.
Работа руками нам не подходит. Да и светить своими подписками не всем захочется.

Самописный скрипт на Python с использованием YouTube API

От безысходности и скуки пятничного вечера я решил поизучать, как же это можно реализовать через API. Бегло нагуглил примеры решения, но они либо нерабочие, либо не совсем подходят по функционалу и требуют доработки.
Я хочу залогиниться в старый аккаунт, залогиниться в новый и увидеть оформленные подписки.
Спойлер: все получилось, но есть некоторое "но".

Для работы нам понадобится только настроенный YouTube API v3 и скрипт, который я успел написать - github.com/sdnv0x4d/transfer-yt-subs

Клонируем себе репозиторий, устанавливаем зависимости:

└> git clone https://github.com/sdnv0x4d/transfer-yt-subs.git
└> cd transfer-yt-subs
└> pip3 install -r req.txt

Настройка YouTube API

  1. Логинимся в console.cloud.google.com, создаем проект через Select a project в левом верхнем углу.
    Задаем любое имя проекта, организацию можно не трогать.
    Выбираем проект после его создания через ту же кнопку Select a project

  2. Нажимаем на APIs & Services с главного экрана.
    Переходим на вкладку Library, в поиске вводим youtube data api v3.
    Переходим на найденное API и жмем Enable.
    Нас перекинет на страницу управления этого API.
    Выбираем Create Credentials в правом верхнем углу:

    1. Credential Type: отмечаем User Data, прожимаем Next

    2. OAuth Consent Screen: Указываем любое имя приложения, свою почту в поле поддержки и разработчика

    3. Scopes: Жмем кнопку Add or remove scopes и отмечаем скоуп .../auth/youtube

    4. OAuth Client ID: Выбираем Web Application из выпадающего списка, даем имя нашему клиенту, в Authorized redirect URIs указываем http://localhost:8080/ и http://localhost:8081/
      По этим адресам у нас локально будут запускаться окна авторизации в Google-аккаунты для экспорта подписок и импорта

    5. Your Credentials: На последнем шаге обязательно скачиваем наши креды через Download, складываем скачанный файл в директорию со скриптом и переименовываем его в client_secret.json, прожимаем Done на странице Google Cloud

  3. Переходим на вкладку OAuth consent screen, пролистываем до Test Users и нажимаем Add Users, добавляем туда почты аккаунтов между которыми будут переноситься подписки, сохраняем

Процесс переноса подписок

Если у вас ~200 подписок и более - скрипт упадет с ошибкой 403 по причине превышения квоты 10000 запросов в день (1 запрос с подпиской стоит 50 единиц квоты)

Можно запустить этот скрипт повторно когда квоты обновятся или абузить приложения API с разных Google-аккаунтов.
Квоты можно посмотреть на вкладке Enabled API & Services/Quotas & System Limits

Я переносил 192 подписки и моя квота достигла 9621

  1. Запускаем скрипт - python3 transfer-yt-subs.py, открывается окно авторизации в Google-аккаунт

  2. Выбираем аккаунт, с которого будем переносить подписки

  3. Гугл оповещает нас о том, что приложение не проверено - жмем Продолжить, затем предоставляем права нашему приложению к аккаунту Google нажав еще раз Продолжить

  4. Сейчас произошла выгрузка всех имеющихся подписок. Теперь необходимо войти в аккаунт куда будем импортировать подписки

  5. Повторяем шаг 3

  6. При успешном завершении скрипт напишет сколько подписок он оформил - идем проверять, что все подписки перенеслись

Таким образом я перенес в общей сложности 597 подписок между своими аккаунтами. Надеюсь, что и вам поможет такой способ.

Больше я пишу о селфхостинге, системном и сетевом администрировании, а также делюсь своими небольшими инструментами в Telegram-канале - t.me/sdnv_funkhole
Там много заметок, которые не подходят для формата статей.

Комментарии (8)


  1. cinme
    02.07.2024 08:57

    Можно для русских объяснить - что такое экстеншена?


    1. sdnv Автор
      02.07.2024 08:57
      +1

      В данном контексте - плагин для браузера


  1. Canep7
    02.07.2024 08:57

    У Гугла с клентоориентированностью совсем беда, они лучше знают что клиенту надо... Такую же задачу решал уже через танцы с бубном... спасибо за полезную информацию, в следующий раз ваш метод буду пробовать.

    Есть еще проблема с управлением плейлистами. Крайне скупой сервис, непонятно как скопировать плейлист другому пользователю. Очень неудобное управление плейлистами. Нельзя, к примеру, выделить несколько видео в плейлисте и удалить сразу все или переместить в другой лист. Если есть какие-то программы или плагины, подскажите пожалуйста.


    1. sdnv Автор
      02.07.2024 08:57

      Вот! Сегодня я принялся переносить плейлисты.

      По идее, нужно зайти в новый аккаунт, создать новый плейлист с доступом по ссылке, включить возможность добавлять видео в плейлист соавторам, скопировать ссылку для соавторов.

      Затем перейти в старый аккаунт, перейти по ссылке соавтора, открыть плейлист который надо перенести и выбрать там пункт "Перенести все в..." и выбрать плейлист нового аккаунта где вы соавтор.

      Я делал с ПК все, у меня не заработала ссылка соавтора. На левом аккаунте с телефона ссылка соавтора работает, вероятно надо со старым аккаунтом ссылку соавтора открывать с телефона


    1. sdnv Автор
      02.07.2024 08:57

      Конечно, можно просто со старого аккаунта дать доступ по ссылке и добавить в соавторов новый аккаунт. Но мне хочется абстрагироваться полностью от старого аккаунта.

      Были ещё мысли сделать перенос Watch Later и залайканные видео. Может расширю функционал скрипта со временем


      1. Canep7
        02.07.2024 08:57

        Спасибо, буду пробовать. С Watch List и прочим тоже интересно как быть.


  1. PbIXTOP
    02.07.2024 08:57

    А почему не воспользоваться Google takeout для экспорта всех данных?


    1. sdnv Автор
      02.07.2024 08:57

      Вы правы! Метод имеет место быть. Можно выгрузить с помощью него и подписаться ручками.
      Также, есть автоматизированный инструмент для импорта из данных google takeout - на первый взгляд принцип действия как у моего скрипта.
      https://github.com/bpaczkowski/youtube-takeout-import

      Также он умеет импортировать лайки и подписки. Но последний коммит был 7 лет назад, возможно он уже устарел. Алсо, я планировал внедрить такой функционал в своем инструменте