You are currently viewing Загружайте видео(ы) с Youtube или весь плейлист целиком с помощью Python

Загружайте видео(ы) с Youtube или весь плейлист целиком с помощью Python

Предпосылка:

Python предлагает несколько вариантов разработки графического интерфейса пользователя (GUI). Из всех методов графического интерфейса наиболее часто используется Tkinter. Это стандартный интерфейс Python для инструментария Tk GUI, поставляемого вместе с Python. Python с Tkinter-это самый быстрый и простой способ создания приложений с графическим интерфейсом.

В этой статье мы обсудим, как мы можем создать графическое приложение для загрузки видео на YouTube или полного списка воспроизведения на YouTube с помощью python.

Прежде чем мы начнем, мы обсудим модуль pyyoutube. Модуль pyyoutube обеспечивает простой способ использования API данных YouTube версии 3.

Установка:

pip install python-youtube

Загрузите выбранное видео из списка воспроизведения YouTube

В этом разделе мы узнаем, как загружать только выбранные видео из плейлиста YouTube с помощью Tkinter на Python.

Подход:

  • Во-первых, мы получим всю ссылку на видео из плейлиста YouTube, используя модуль pyyoutube.
  • Затем мы выберем ссылку на видео, которую хотим загрузить.
  • Затем мы будем загружать каждое видео по одному, используя модуль pytube.

Ниже показано, как выглядит графический интерфейс:

Давайте разберемся с пошаговой реализацией:

  • Создайте окно настройки и добавьте кнопки, метки, полосу прокрутки и т. д.
# Import Required Modules
from tkinter import *

# Create Object
root = Tk()

# Set geometry
root.geometry('400x400')

# Add Label
Label(root, text="Youtube Playlist Downloader",
	font="italic 15 bold").pack(pady=10)
Label(root, text="Enter Playlist URL:-", font="italic 10").pack()

# Add Entry box
playlistId = Entry(root, width=60)
playlistId.pack(pady=5)

# Add Button
get_videos = Button(root, text="Get Videos")
get_videos.pack(pady=10)

# Add Scorllbar
scrollbar = Scrollbar(root)
scrollbar.pack(side=RIGHT, fill=BOTH)
list_box = Listbox(root, selectmode="multiple")
list_box.pack(expand=YES, fill="both")
list_box.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=list_box.yview)

download_start = Button(root, text="Download Start", state=DISABLED)
download_start.pack(pady=10)

# Execute Tkinter
root.mainloop()
  • Теперь мы создадим три функции:
  1. get_list_videos: — Это даст список всех видео-ссылок плейлиста YouTube.
  2. threading: — Он используется для нарезания резьбы в Tkinter.
  3. download_videos: — Он используется для загрузки видео с YouTube.
def get_list_videos():
	global playlist_item_by_id
	# Clear ListBox
	list_box.delete(0, 'end')

	# Create API Object
	api = Api(api_key='Enter API Key')

	if "youtube" in playlistId.get():
		playlist_id = playlistId.get()[len(
			"https://www.youtube.com/playlist?list="):]
	else:
		playlist_id = playlistId.get()

	# Get list of video links
	playlist_item_by_id = api.get_playlist_items(
		playlist_id=playlist_id, count=None, return_json=True)

	# Iterate through all video links and insert into listbox
	for index, videoid in enumerate(playlist_item_by_id['items']):
		list_box.insert(
			END, f" {str(index+1)}. {videoid['contentDetails']['videoId']}")

	download_start.config(state=NORMAL)


def threading():
	# Call download_videos function
	t1 = Thread(target=download_videos)
	t1.start()


def download_videos():
	download_start.config(state="disabled")
	get_videos.config(state="disabled")

	# Iterate through all selected videos
	for i in list_box.curselection():
		videoid = playlist_item_by_id['items'][i]['contentDetails']['videoId']

		link = f"https://www.youtube.com/watch?v={videoid}"

		yt_obj = YouTube(link)

		filters = yt_obj.streams.filter(progressive=True, file_extension='mp4')

		# download the highest quality video
		filters.get_highest_resolution().download()

	messagebox.showinfo("Success", "Video Successfully downloaded")
	download_start.config(state="normal")
	get_videos.config(state="normal")

Ниже приведена полная реализация:

# Import Required Modules
from tkinter import *
from pyyoutube import Api
from pytube import YouTube
from threading import Thread
from tkinter import messagebox


def get_list_videos():
	global playlist_item_by_id
	# Clear ListBox
	list_box.delete(0, 'end')

	# Create API Object
	api = Api(api_key='Enter API Key')

	if "youtube" in playlistId.get():
		playlist_id = playlistId.get()[len(
			"https://www.youtube.com/playlist?list="):]
	else:
		playlist_id = playlistId.get()

	# Get list of video links
	playlist_item_by_id = api.get_playlist_items(
		playlist_id=playlist_id, count=None, return_json=True)

	# Iterate through all video links and insert into listbox
	for index, videoid in enumerate(playlist_item_by_id['items']):
		list_box.insert(
			END, f" {str(index+1)}. {videoid['contentDetails']['videoId']}")

	download_start.config(state=NORMAL)


def threading():
	# Call download_videos function
	t1 = Thread(target=download_videos)
	t1.start()


def download_videos():
	download_start.config(state="disabled")
	get_videos.config(state="disabled")

	# Iterate through all selected videos
	for i in list_box.curselection():
		videoid = playlist_item_by_id['items'][i]['contentDetails']['videoId']

		link = f"https://www.youtube.com/watch?v={videoid}"

		yt_obj = YouTube(link)

		filters = yt_obj.streams.filter(progressive=True, file_extension='mp4')

		# download the highest quality video
		filters.get_highest_resolution().download()

	messagebox.showinfo("Success", "Video Successfully downloaded")
	download_start.config(state="normal")
	get_videos.config(state="normal")


# Create Object
root = Tk()
# Set geometry
root.geometry('400x400')

# Add Label
Label(root, text="Youtube Playlist Downloader",
	font="italic 15 bold").pack(pady=10)
Label(root, text="Enter Playlist URL:-", font="italic 10").pack()

# Add Entry box
playlistId = Entry(root, width=60)
playlistId.pack(pady=5)

# Add Button
get_videos = Button(root, text="Get Videos", command=get_list_videos)
get_videos.pack(pady=10)

# Add Scrollbar
scrollbar = Scrollbar(root)
scrollbar.pack(side=RIGHT, fill=BOTH)
list_box = Listbox(root, selectmode="multiple")
list_box.pack(expand=YES, fill="both")
list_box.config(yscrollcommand=scrollbar.set)
scrollbar.config(command=list_box.yview)

download_start = Button(root, text="Download Start",
						command=threading, state=DISABLED)
download_start.pack(pady=10)

# Execute Tkinter
root.mainloop()

Выход:

Скачать полный плейлист с YouTube

Здесь мы узнаем, как загрузить полный плейлист YouTube в Tkinter с помощью Python.

Подход:

  • Во-первых, мы получим все ссылки на видео из плейлиста YouTube с помощью модуля pyyoutube.
  • Затем мы пройдемся по всем видео и скачаем каждое видео по одному, используя модуль pytube.

Ниже показано, как выглядит графический интерфейс:

Давайте разберемся с пошаговой реализацией:

  • Создайте окно Tkinter и добавьте кнопки, надписи и т. д.
# Import Required Modules
from tkinter import *

# Create Object
root = Tk()

# Set geometry
root.geometry('400x200')

# Add Label
Label(root, text="Youtube Playlist Downloader",
	font="italic 15 bold").pack(pady=10)
Label(root, text="Enter Playlist URL:-", font="italic 10").pack()

# Add Entry box
playlistId = Entry(root, width=60)
playlistId.pack(pady=5)

download_start = Button(root, text="Download Start")
download_start.pack(pady=10)

# Execute Tkinter
root.mainloop()
  • Теперь мы создадим две функции:
  1. threading: — Он используется для нарезания резьбы в Tkinter.
  2. download_videos: — Он используется для загрузки видео с YouTube.
def threading():
	# Call download_videos function
	t1 = Thread(target=download_videos)
	t1.start()


def download_videos():
	# Create API Object
	api = Api(api_key='Enter API Key')

	if "youtube" in playlistId.get():
		playlist_id = playlistId.get()[len(
			"https://www.youtube.com/playlist?list="):]
	else:
		playlist_id = playlistId.get()

	# Get list of video links
	playlist_item_by_id = api.get_playlist_items(
		playlist_id=playlist_id, count=None, return_json=True)

	# Iterate through all video links
	for index, videoid in enumerate(playlist_item_by_id['items']):

		link = f"https://www.youtube.com/watch?v={videoid['contentDetails']['videoId']}"

		yt_obj = YouTube(link)

		filters = yt_obj.streams.filter(progressive=True, file_extension='mp4')

		# download the highest quality video
		filters.get_highest_resolution().download()

		print(f"Downloaded:- {link}")

	messagebox.showinfo("Success", "Video Successfully downloaded")

Ниже приведена полная реализация:

# Import Required Modules
from tkinter import *
from pyyoutube import Api
from pytube import YouTube
from threading import Thread
from tkinter import messagebox


def threading():
	# Call download_videos function
	t1 = Thread(target=download_videos)
	t1.start()


def download_videos():
	# Create API Object
	api = Api(api_key='Enter API Key')

	if "youtube" in playlistId.get():
		playlist_id = playlistId.get()[len(
			"https://www.youtube.com/playlist?list="):]
	else:
		playlist_id = playlistId.get()

	# Get list of video links
	playlist_item_by_id = api.get_playlist_items(
		playlist_id=playlist_id, count=None, return_json=True)

	# Iterate through all video links
	for index, videoid in enumerate(playlist_item_by_id['items']):

		link = f"https://www.youtube.com/watch?v={videoid['contentDetails']['videoId']}"

		yt_obj = YouTube(link)

		filters = yt_obj.streams.filter(progressive=True, file_extension='mp4')

		# download the highest quality video
		filters.get_highest_resolution().download()

		print(f"Downloaded:- {link}")

	messagebox.showinfo("Success", "Video Successfully downloaded")


# Create Object
root = Tk()
# Set geometry
root.geometry('400x200')

# Add Label
Label(root, text="Youtube Playlist Downloader",
	font="italic 15 bold").pack(pady=10)
Label(root, text="Enter Playlist URL:-", font="italic 10").pack()

# Add Entry box
playlistId = Entry(root, width=60)
playlistId.pack(pady=5)

download_start = Button(root, text="Download Start", command=threading)
download_start.pack(pady=10)

# Execute Tkinter
root.mainloop()

Выход: