Created
February 19, 2018 20:48
-
-
Save arkan-leki/c56080e204ebe559234afafb24d7048b to your computer and use it in GitHub Desktop.
Python Download_YouTube_Video_Playlist by pytube and pyqt5
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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