برنامه نویسی

YTdownloader – برنامه دانلود ویدیوی یوتیوب پایتون

در مورد این :

YTdownloader یک برنامه پایتون tkinter است که می تواند به شما کمک کند تا هر ویدیوی یوتیوب را به صورت ویدیو یا صوتی دانلود کنید. در این پست به نحوه ایجاد آن می پردازیم.

با فرض اینکه شما اصول اولیه tkinter را می دانید، من وارد جزئیات tkinter نمی شوم. اگر این کار را نکردید، می توانید این پست را به لیست خواندن خود اضافه کنید و برخی از اسناد tkinter را بخوانید.

ماژول های مورد نیاز:

برای ساخت این برنامه من قصد دارم از 2 ماژول – tkinter و pytube استفاده کنم. من همچنین از ماژول filedialog و messagebox tkinter استفاده می کنم.

در صورت tkinter، همراه با نصب کننده پایتون ارائه می شود. بنابراین نیازی به نصب جداگانه نیست اما پای تیوب با پایتون همراه نیست، بنابراین باید آن را نصب کنیم.

تایپ کنید pip install pytube در ترمینال شما تا آن زمان enter برای نصب pytube

هنگامی که pytube نصب شد، باید آن را به فایل پایتون خود وارد کنیم (در مورد من main.py).

from tkinter import *
from tkinter.filedialog import askdirectory
from tkinter.messagebox import showerror, showinfo
from pytube import YouTube
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در ابتدا نمی‌دانم به چند چیز از tkinter نیاز دارم، بنابراین همه چیز را با استفاده از «*» از آن وارد می‌کنم.


راه اندازی tkinter:

پس از وارد کردن ماژول ها، اجازه دهید tkinter را مقداردهی اولیه کرده و یک پنجره gui ایجاد کنید. سپس یک نام و ابعاد به آن بدهید، یعنی اندازه پنجره gui و یک نماد. ما همه اینها را در چند مرحله انجام خواهیم داد –

  • ابتدا یک نمونه از tkinter Tk() ایجاد کنید و آن را در متغیری به نام root ذخیره کنید. root = Tk(). از آنجایی که من همه چیز را از tkinter وارد می کنم، می توانم بنویسم Tk() بجای tkinter.Tk().

  • حالا با استفاده از آن سایز بدهید root.geometry(). من می خواهم به آن یک اندازه ثابت 350px عرض و 250px ارتفاع بدهم. پس من هم قرار است این کار را انجام دهم root.resizable(0, 0) به طوری که نمی توان آن را تغییر اندازه داد.

  • سپس آن را با استفاده از یک نام root.title(). برای این برنامه، من آن را نام می برم YTdownloader.

  • من همچنین یک نماد برنامه افزودنی ‘.ico’ را از وب دانلود می کنم و با استفاده از آن به این برنامه اضافه می کنم root.iconbitmap("./icon.ico")

  • حالا با نوشتن به این برنامه رنگ پس زمینه بدهید root.configure(bg=bgColor). من قبلاً کد رنگ را در یک متغیر ذخیره می کنم تا چندین بار از آن استفاده کنم.

  • در آخر root.mainloop() در انتهای فایل

برنامه ما باید چیزی شبیه به این باشد.
ظاهر کاربرد پس از فرآیند اولیه سازی


پیاده سازی ویجت:

اجازه دهید برخی از ویجت‌ها مانند برچسب‌ها، دکمه‌ها، ویجت ورودی را اضافه کنید تا این تعاملی باشد.

  • اضافه کردن یک برچسب در بالا فقط به عنوان عنوان و بسته بندی آن به ریشه.
Label(root, text="Youtube Downloader",
   bg=bgColor,font="sarif 15 bold").pack(pady=7)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

من همچنین از همان پس‌زمینه ریشه برای حذف پس‌زمینه سفید آن استفاده می‌کنم.

  • حالا یک قاب اضافه کنید که در آن ویجت ورودی و منوی گزینه را قرار می دهم.
frame = Frame(root, padx=10, pady=20,
        bg=bgColor, height=150)
frame.pack(fill="both")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در این برنامه من یک ورودی و به ویجت منوی گزینه اضافه می کنم. ویجت ورودی برای ورودی url و یک ویجت منوی گزینه برای نوع دانلود «ویدئو» یا «صوتی» و دیگری برای وضوح یا کیفیت ویدیو در صورت دانلود ویدیو است. من همچنین سه متغیر tkinter برای ذخیره داده های آنها ایجاد می کنم.

  • ایجاد ویجت ورودی و قرار دادن آن و ذخیره مقدار آن در ارتباط دادن متغیر.
link = StringVar()
Entry(frame, textvariable=link).place(in_=frame, anchor="c",
      relx=.5, rely=0.0, relheight=0.3, relwidth=0.9)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • ایجاد منوی گزینه دو و ذخیره مقدار آن در دو متغیر. من همچنین یک مقدار پیش فرض را برای هر دو متغیر تنظیم کردم. من همچنین یک برچسب در بالای هر منوی گزینه اضافه می کنم تا مشخص کنم کدام یک برای چه چیزی است. شما می توانید از این رد شوید.
Label(text="filetype", bg=bgColor).place(
    in_=frame, anchor="c", relx=.25, rely=.325)
fileType = StringVar()
fileType.set("video")
OptionMenu(frame, fileType, *["video", "audio"]
           ).place(in_=frame, anchor="c", relx=.25, rely=.575)

Label(text="resolution", bg=bgColor).place(
    in_=frame, anchor="c", relx=.75, rely=.325)

res = StringVar()
resList = ["144p", "240p", "360p", "480p", "720p", "1080p"]
res.set(resList[2])
OptionMenu(frame, res, *resList
           ).place(in_=frame, anchor="c", relx=.75, rely=.575)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • یک دکمه برای شروع فرآیند دانلود اضافه کنید. من دستوری را به تابعی به نام “دانلود” اضافه می کنم که تمام منطق های آن را می نویسم. اگر نمی دانید این ویژگی فرمان چه کار می کند – هر بار که دکمه کلیک می شود، تابع ارائه را اجرا می کند.
Button(root, command=download, text="download").place(
    in_=frame, anchor="c", relx=.5, rely=.9, relheight=0.3)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

شما تابع “دانلود” را قبل از ویجت دکمه تعریف کرده اید در غیر این صورت با خطا مواجه خواهید شد.

اکنون برنامه ما چیزی شبیه به این است
پس از اضافه شدن همه ویجت ها، gui


منطق پشت دانلود:

ابتدا می گویم، “من نمی دانستم که ماژول پایتون به نام وجود دارد پای تیوب که می تواند ویدیوهای یوتیوب را دانلود کند.” من یک پست در مورد این دانلود ویدیوی یوتیوب با استفاده از پایتون توسط یکی از ما خواندم dev.to دوست و پس از انجام برخی اصلاحات روی آن از کد او استفاده کنید. اگر می خواهید در این مورد بیشتر بدانید، پیشنهاد می کنم پست او را بخوانید. لینک پست ایشان در پایین آمده است.

  • به‌جای اینکه مکان دانلود را درست کنم، به کاربر این امکان را می‌دهم که هر بار که این پوشه را انتخاب کند دانلود دکمه با استفاده از tkinter کلیک می شود askdirectory ویجت مسیر پوشه انتخابی را که در متغیر path ذخیره کرده‌ام، برمی‌گرداند.
    path = askdirectory(title="Select Folder")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • پس از دریافت مسیر، آدرس، نوع فایل و وضوح ویدیو را در 3 متغیر مختلف ذخیره می کنم.
    videoLink = link.get()
    downloadType = fileType.get()
    resolution = res.get()
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • در نهایت راه اندازی یوتیوب کلاس این بخش را در یک جمع کنید تلاش كردن بلاک کنید تا خطا به راحتی قابل رسیدگی باشد. و استفاده میکنم اگر دیگری برای مدیریت دانلود صوتی یا تصویری
video = YouTube(videoLink)

    try:
        if downloadType == "audio":
            file = video.streams.filter(only_audio=True).first()
        else:
            file = video.streams.filter(resolution=resolution).first()

        file.download(path)

    except:
        showerror("error", "Unable to download video at this time!")

    showinfo("download complete", f"{format} downloaded!")
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

همانطور که در کد بالا مشاهده می کنید، در صورت بروز هر گونه مشکل برای دانلود ویدیو، به آدرس زیر می رود بجز بلوک که در آن یک پیام پاپ آپ خطا با استفاده از نشان داده می شود دوش گرفتن ویجت tkinter. اگر مشکلی وجود نداشته باشد از آن صرفنظر می کند بجز مسدود کردن و یک پیام پاپ دیگر با استفاده نشان داده می شود نمایش اطلاعات ویجت tkinter.


بسته شدن :

از طریق این لینک می توانید کد را در github من دریافت کنید.

همچنین root.iconbitmap() فقط برای اولین بار کار می کند بار دوم کار نمی کند، بنابراین به شما پیشنهاد می کنم از این استفاده نکنید.

در اینجا پیوند پست توسط ‘Shittu Olumide’ که من از کد آن استفاده می کنم.
اینجا کلیک کنید

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا