Skip to content

Instantly share code, notes, and snippets.

@arkan-leki
Created February 19, 2018 20:48
Show Gist options
  • Save arkan-leki/c56080e204ebe559234afafb24d7048b to your computer and use it in GitHub Desktop.
Save arkan-leki/c56080e204ebe559234afafb24d7048b to your computer and use it in GitHub Desktop.
Python Download_YouTube_Video_Playlist by pytube and pyqt5
from pytube import YouTube, Playlist
class downloader:
@staticmethod
def start_downloader(url, video_type, fielext, place, audio):
try:
yt = YouTube(url)
print(yt.streams.all())
if not audio:
if not yt.streams.filter(subtype=fielext, resolution=video_type).first():
video = yt.streams.filter(subtype=fielext).first()
else:
video = yt.streams.filter(subtype=fielext, resolution=video_type).first()
print(url, video_type, place)
video.download(place)
else:
if not yt.streams.filter(subtype=fielext, only_audio=audio).first():
audios = yt.streams.filter(subtype=fielext).first()
else:
audios = yt.streams.filter(subtype=fielext, only_audio=audio).first()
print(url, video_type, place)
audios.download(place)
return 'download video is complete'
except Exception as inst:
return "wrong link or no internet and bad connection"
@staticmethod
def start_playlist(url):
try:
pl = Playlist(url)
pl.download_all()
except Exception as inst:
return "wrong link or no internet and bad connection"
import getpass
import os
from sys import exit, platform, argv
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QPushButton, QRadioButton, QLabel, QLineEdit, QMessageBox, \
QFileDialog
import main
d = main.downloader()
user = getpass.getuser()
print(user)
if platform == 'win32':
path = 'C:\\Users\\' + user + '\\Videos'
else:
path = os.getcwd()
print(path)
app = QApplication(argv)
main_window = QWidget()
main_window.setWindowTitle("Video Downloader")
main_window.setFixedSize(500, 200)
main_window.resize(400, 150)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("./youtube.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
main_window.setWindowIcon(icon)
main_window.setStyleSheet("background-color:white;")
exit_btn = QPushButton("Exit", main_window)
exit_btn.clicked.connect(exit)
exit_btn.move(400, 160)
exit_btn.setStyleSheet("padding:10px;border:1px solid orange;color:red;")
combo = QComboBox(main_window)
combo.move(200, 15)
combo.addItem("1440p")
combo.addItem("1080p")
combo.addItem("720p")
combo.addItem("480p")
combo.addItem("360p")
combo.addItem("240p")
combo.addItem("144p")
combo.setStyleSheet("border:1px solid orange;padding:3px;color:green;")
combo1 = QComboBox(main_window)
combo1.move(300, 15)
combo1.addItem("mp4")
combo1.addItem("webm")
combo1.addItem("3gpp")
combo1.setStyleSheet("border:1px solid orange;padding:3px;color:green;")
def btn_rad():
combo.setEnabled(not audios.isChecked())
audios = QRadioButton(main_window)
audios.setText("Audio")
var = audios.toggled.connect(btn_rad)
audios.move(400, 20)
audios.setStyleSheet("color:green;")
choose = QLabel(main_window, text="<b>Choose video Format :</b>")
choose.move(10, 20)
choose.setStyleSheet("color:green")
link = QLineEdit(main_window)
link.setPlaceholderText("past the line here ")
link.resize(400, 30)
link.move(10, 70)
link.setStyleSheet("border:1px solid blue;padding:3px;color:gray;")
def get_path():
global path
path = ""
path = QFileDialog.getSaveFileName(main_window, 'save video at', 'video.mp4')
path = str(path)
if path != "('', '')":
platforms = platform
print(path)
print(platforms)
if platforms == 'linux':
path_1 = path
path_1 = path_1.split('/')
print(path_1)
name = path_1[-1]
path = path.replace(name, '')
else:
path = os.path.split(os.path.abspath(path))[0]
path = path.split("\('")[1]
print(path)
save_button = QPushButton("...", main_window)
save_button.resize(40, 30)
save_button.move(430, 70)
save_button.clicked.connect(get_path)
save_button.setStyleSheet("background-color:orange;border:1px solid orange;padding:3px;color:white")
def brows():
global path
paths = QFileDialog.getOpenFileName(main_window, 'open video at', filter="*.txt")
paths = str(paths)
print(str(paths))
if paths != "('', '')":
paths = paths.split(",")[0]
path = os.path.split(os.path.abspath(paths))[0]
path = path.split("('")[1]
paths = paths[1:].replace("/", "\\")
paths = paths.replace("'", "")
print(paths)
vd = open(str(paths), "r")
t = 0
for v in vd:
start_(v, 'quick')
t += 1
print(t)
brows_button = QPushButton("Past", main_window)
brows_button.resize(40, 30)
brows_button.move(30, 40)
brows_button.clicked.connect(brows)
brows_button.setStyleSheet("background-color:green;margin:1px;color:white;border:1px solid green")
def start_(url='', typos=''):
global audio
fil_ext = str(combo1.currentText())
audio = audios.isChecked()
if not url:
url = link.text()
if url == "":
msg_1 = """Please Enter url"""
QMessageBox.warning(main_window, 'No Video Found', msg_1, QMessageBox.Ok)
else:
if str(url).find("youtu.be") == 8 or str(url).find("https://www.youtube.com/watch?v=") == 0:
print(str(url).find("youtu.be"))
video_quality = str(combo.currentText())
video_type = video_quality
print("start")
place = path
msgs = d.start_downloader(url, video_type, fil_ext, place, audio)
print(msgs)
if not typos or msgs == "wrong link or no internet and bad connection":
QMessageBox.information(main_window, 'Download finish', msgs, QMessageBox.Ok)
else:
QMessageBox.information(main_window, 'Unknown url', ' the video site not supported',
QMessageBox.Ok)
download_button = QPushButton("Start Download", main_window)
download_button.move(170, 110)
download_button.setStyleSheet("background-color: blue;padding:5px;color:white;border:1px solid blue")
download_button.clicked.connect(start_)
def start_s(url=""):
if not url:
url = link.text()
if not url:
msg = """Please Enter url"""
QMessageBox.warning(main_window, 'No Video Found', msg, QMessageBox.Ok)
else:
if str(url).find("https://www.youtube.com/playlist?list=") == 0:
msgs = d.start_playlist(url)
if not msgs:
QMessageBox.information(main_window, 'Download finish', 'Download Finished',
QMessageBox.Ok)
else:
QMessageBox.information(main_window, 'Unknown url', ' the video site not supported',
QMessageBox.Ok)
download_button1 = QPushButton("Download Playlist", main_window)
download_button1.move(50, 110)
download_button1.setStyleSheet("background-color: red;padding:5px;color:white;border:1px solid red")
download_button1.clicked.connect(start_s)
def about():
msg = """
This program create by Arkan Leki
For any Information or get the source code
ask me on fb.com/arkan.leki"""
QMessageBox.information(main_window, 'About', msg, QMessageBox.Ok)
about_button = QPushButton("About", main_window)
about_button.move(300, 160)
about_button.clicked.connect(about)
about_button.setStyleSheet("padding:10px;border:1px solid orange;color:green;")
main_window.show()
exit(app.exec_())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment