Импорта/Экспорта подписок YouTube

  • Автор темы Sasha3I8I2
  • Дата начала
S

Sasha3I8I2

Original poster
Привет уважаемый читатель!
Сегодня, я расскажу тебе, как я решил задачу по переносу подписок в аккаунте YouTube.

Первым делом хочу сказать, что данный способ не для рядового пользователя, который знает только, что такое Word'дик, Excel'чик, YouTube'чик, Вконтактик и Однокласснички, а для продвинутого юзера, хотя с другой стороны разобраться можно, если захотеть, сложностей особых нет...

Так же хочу отметить, что я не программист(это важно... :)), мне нравится сам процесс создания автоматизированных вещей, как говорится Лень - двигатель прогресса...
Если у вас количество подписок ~30. то заморачиватся с этим не стоит, у меня же их было 130(не скажу, что много но у некоторых и по 1 000 есть), сервис YouTube сделал экспорт подписок, но не сделал их импорт и мне не хотелось открывать один аккаунт, копировать url канал, открывать другой браузер, логинится там под другим аккаунтом, переходить по ранее скопированному линку, нажимать кнопку "Подписаться", и все это повторять 130 раз... Погуглил я на предмет "Импорта/Экспорта подписок YouTube" ничего нет, уныло как то...

Вспомнилось мне, что есть некий инструмент позволяющий автоматизировать действия в браузере, загуглил, нашел!
Выдержка из вики:

Selenium - это Java-приложение, которое может анализировать файлы определенной структуры для того, чтобы находить в них команды для манипуляции браузером и команды для выполнения определенных действий и проверок.​
Selenium поддерживается Microsoft Internet Explorer, Google Chrome, Mozilla Suite и Mozilla Firefox для Microsoft Windows, Linux и Apple Macintosh.​


Приступим...

Первым делом нам потребуется Python, берем его

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

. С установкой проблем возникнуть не должно... далее нам необходим сам модуль Selenium

Открываем меню Пуск->Выполнить, либо нажимаем клавиши Win+R в появившемся окне вводим "cmd" без кавычек, запустится Коммандная строка, вводим туда:

Код:
C:\Users\admin> easy_install selenium
тем самым мы установим модуль Selenium для Python, после этого нам необходимо скачать драйвер Selenium для Chrome(именно через хром мы будем проводить все манипуляции), скачать можно

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

или

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

, на момент написания статьи, версия была 2.16

Скачиваем архив, распаковываем в какую нибудь папку, например C:\Selenium, далее открываем браузер логинемся на YouTube по старым логином с которого мы будем забирать подписки и переходим по ссылке

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

, проматываем страницу в самый низ, там есть кнопка "Экспортировать подписки", жмем ее и скачиваем файл subscription_manager.xml в папку C:\Selenium, выходим из аккаунта YouTube и логинемся снова, но уже под другим аккаунтом в который мы будем импортировать подписки, закрываем все открытые вкладки, что бы ничего нам не мешало, после последней закрытой вкладки , закроется и сам Chrome, то что нам нужно...

В папке C:\Selenium создаем новый текстовый файл и называем его import.py, открываем его в блокноте и вставляем туда следующее:

Внимание! Если вы не знакомы языком Python, то у вас могут возникнуть(и скорее всего возникнут)проблемы после копирования ниже указанного текста, лучше скачайте прикрепленный архив с готовым файлом, дабы избежать проблем!



Python:
# coding=utf-8
from selenium import webdriver
from xml.dom import minidom
import re, time, sys

options = webdriver.ChromeOptions()
options.add_argument('--user-data-dir=C:/Users/user/AppData/Local/Google/Chrome/User Data')
driver = webdriver.Chrome(chrome_options = options)

def subscription(id):
    #Открываем URL канала
    url = u'https://www.youtube.com/channel/' + id[0]
    driver.get(url)
    #Находим кнопку подписки
    button = driver.find_element_by_xpath('//*[@id="c4-primary-header-contents"]/div/span/button[1]')

    #Если на кнопке нет атрибута 'data-is-subscribed="true"' - значит подписка не оформлена
    if button.get_attribute('data-is-subscribed') == None:
        #то кликаем на кнопку
        button.click()
        #Засыпаем на три секунды что-бы клик успел отработать, необходим при медленном интернете
        time.sleep(3)
        sys.stdout.write(" +++\r\n")
    else:
        #Иначе пишем:
        sys.stdout.write(" ---\r\n")

### Парсим XML файл подписок subscription_manager.xml берем здесь https://www.youtube.com/subscription_manager
### в самом низу страницы, есть кнопка "Экспортировать подписки", кладем его рядом с этим скриптом
xmldoc = minidom.parse('subscription_manager.xml')
itemlist = xmldoc.getElementsByTagName('outline')
#Печатаем количество подписок
print(len(itemlist))
#Цикл обработки XML документа
for s in itemlist:
    try:
        feed_url = s.attributes['xmlUrl'].value
        #Находим ID канала регулярным выражением
        p = re.compile('channel_id=(.*)$')
        m = p.findall(feed_url)
        #Печатаем название канала
        sys.stdout.write(s.attributes['title'].value)
        #Вызываем функцию подписки
        subscription(m)
    except:
        pass

Очень важно!!! В строке options.add_argument('--user-data-dir=C:/Users/ВАШ_ПОЛЬЗОВАТЕЛЬ/AppData/Local/Google/Chrome/User Data') в параметре "--user-data-dir=" необходимо указать путь к вашему профилю браузера, это нужно для того, чтобы запустился браузер с вашими настройками и с вашим аккаунтом YouTube

сохраняем и запускаем его двойным щелчком мыши, скрипт запустится и если все хорошо, то вы увидите строки с названием канала и символы "+++" - канал добавлен в подписки, либо "---" подписка уже была оформлена.

Работает это так:

Посмотреть вложение 8712



Всем спасибо!

Ссылка на готовый архив:

Авторизируйтесь или Зарегистрируйтесь что бы просматривать ссылки.

 
  • Like
Реакции: Alex White1
A

Alex White1

Original poster
Спасиб бро а то с 0 подняти акк "надоедливо"