Detaylı makale ile karşınızdayım. o7
Bu kod, Twitter’dan videoları indirmek için bir arayüz sağlayan bir Python uygulamasıdır. Kullanıcı arayüzü oluşturmak için tkinter kütüphanesi kullanılır ve video indirme işlemi yt_dlp kütüphanesi ile gerçekleştirilir. İşte kodun detaylı bir


Açıklaması:
Kütüphanelerin İmport Edilmesi:
tkinter: Kullanıcı arayüzü elemanlarını oluşturmak için kullanılan standart GUI (Grafik Kullanıcı Arayüzü) kütüphanesi.
ttk: tkinter’ın temalı widget seti.
yt_dlp: YouTube DL’nin bir çatalı olan ve çeşitli video servislerinden video indirmeyi sağlayan bir kütüphane.
time: Zamanla ilgili işlevleri içeren kütüphane.
threading: Çoklu iş parçacığı (thread) oluşturmayı sağlayan kütüphane.
TwitterVideoDownloader Sınıfı:
Bu sınıf, tk.Tk sınıfından türetilmiştir ve uygulamanın ana penceresini temsil eder.
init fonksiyonu:
Uygulamanın başlığını ve boyutunu ayarlar.
URL girişi, indirme butonu ve video bilgilerini gösteren etiketler içeren paneller oluşturur.
İlerleme çubuğu ve indirilen videoların listelendiği bir ağaç görünümü (treeview) ekler.
**İndirme İşlemi:
start_download_thread fonksiyonu:**
Video indirme işlemini başlatan bir iş parçacığı oluşturur.
download_video fonksiyonu:
Kullanıcının girdiği URL’yi alır ve yt_dlp kullanarak videoyu indirir.
İndirme sırasında ve tamamlandığında ilgili bilgileri günceller.
İndirme İlerlemesi:
ydl_hook fonksiyonu:
yt_dlp’nin indirme ilerlemesini takip etmek için bir geri çağırım (callback) fonksiyonudur.
İndirme durumuna göre dosya adı, boyutu, geçen süre ve kalan süre gibi bilgileri günceller.
İlerleme çubuğunun değerini ayarlar.
Ana Fonksiyon:
Eğer dosya doğrudan çalıştırılırsa, TwitterVideoDownloader sınıfından bir nesne oluşturulur ve uygulama döngüsü başlatılır.
Bu uygulama, kullanıcıların Twitter videolarını kolayca indirmelerine olanak tanır ve indirme işlemi sırasında yararlı bilgiler sağlar. Kullanıcı dostu bir arayüze sahip olup, çoklu iş parçacığı desteği ile arka planda indirme işlemini gerçekleştirir. Bu sayede kullanıcı, uygulamanın yanıt vermesini beklemeden diğer işlemlerini yapmaya devam edebilir.
**
Peki kodu kullanmak için hangi kütüphaneleri nasıl kurmak gerekir ?
**
Bu Python kodunu çalıştırmak için gerekli kütüphaneleri kurmak oldukça basittir. Aşağıda gerekli adımlar ve komutlar bulunmaktadır:
Python Kurulumu: İlk olarak, bilgisayarınızda Python’un kurulu olduğundan emin olun. Python kurulu değilse, Python’un resmi web sitesinden indirip kurabilirsiniz.
Kütüphanelerin Kurulumu: Kodda kullanılan tkinter kütüphanesi Python ile birlikte gelir, bu yüzden ekstra bir kurulum gerektirmez. Ancak yt_dlp ve threading gibi diğer kütüphaneleri kurmanız gerekecektir. Bu kütüphaneleri kurmak için aşağıdaki pip komutlarını kullanabilirsiniz:
**
kütüphanesi için:**
pip install yt-dlp
threading kütüphanesi Python’un standart kütüphanesinin bir parçasıdır, bu yüzden kuruluma ihtiyaç duymaz.
Kütüphanelerin Kontrolü: Kurulumdan sonra, kütüphanelerin doğru şekilde kurulup kurulmadığını kontrol etmek için Python komut satırına veya terminalinize şu komutları yazabilirsiniz:
yt_dlp için:
python -c "import yt_dlp; print(yt_dlp.__version__)"
Bu komut, yt_dlp kütüphanesinin versiyonunu yazdıracaktır ve böylece kütüphanenin başarıyla kurulduğunu doğrulayabilirsiniz.
Kurulum işlemleri tamamlandıktan sonra, kodu Python ortamında çalıştırabilir ve Twitter’dan video indirme işlemini başlatabilirsiniz.
Kod:
import tkinter as tk
from tkinter import ttk
from yt_dlp import YoutubeDL
from time import time
import threading
class TwitterVideoDownloader(tk.Tk):
def __init__(self):
super().__init__()
self.title("Twitter Video Downloader")
self.geometry("600x400")
# Panel 1 (Top for URL Entry and Button)
panel1 = tk.Frame(self)
panel1.pack(pady=10, padx=10, fill=tk.X)
self.url_label = tk.Label(panel1, text="Video URL:")
self.url_label.pack(side=tk.LEFT)
self.url_entry = tk.Entry(panel1, width=50)
self.url_entry.pack(side=tk.LEFT, padx=5)
self.download_button = tk.Button(panel1, text="Download", command=self.start_download_thread)
self.download_button.pack(side=tk.LEFT)
# Panel 2 (Left for displaying video information)
panel2 = tk.Frame(self)
panel2.pack(side=tk.LEFT, padx=10, pady=10, fill=tk.Y)
self.file_name_label = tk.Label(panel2, text="File Name:")
self.file_name_label.pack(anchor='w')
self.file_size_label = tk.Label(panel2, text="File Size:")
self.file_size_label.pack(anchor='w')
self.file_duration_label = tk.Label(panel2, text="Video Duration:")
self.file_duration_label.pack(anchor='w')
self.elapsed_time_label = tk.Label(panel2, text="Elapsed Time:")
self.elapsed_time_label.pack(anchor='w')
self.remaining_time_label = tk.Label(panel2, text="Remaining Time:")
self.remaining_time_label.pack(anchor='w')
# Progress bar
self.progress_bar = ttk.Progressbar(panel2, orient="horizontal", length=200, mode="determinate")
self.progress_bar.pack(anchor='w', pady=10)
# Panel 3 (Right for list view)
panel3 = tk.Frame(self)
panel3.pack(side=tk.RIGHT, padx=10, pady=10, fill=tk.BOTH, expand=True)
columns = ("Name", "Size", "Duration", "Elapsed", "Remaining")
self.tree = ttk.Treeview(panel3, columns=columns, show="headings")
for col in columns:
self.tree.heading(col, text=col)
self.tree.pack(fill=tk.BOTH, expand=True)
def start_download_thread(self):
threading.Thread(target=self.download_video, daemon=True).start()
def download_video(self):
url = self.url_entry.get()
# Adjust the URL if it uses x.com
if "x.com" in url:
url = url.replace("x.com", "twitter.com")
ydl_opts = {
'format': 'best',
'progress_hooks': [self.ydl_hook]
}
with YoutubeDL(ydl_opts) as ydl:
self.start_time = time()
try:
info_dict = ydl.extract_info(url, download=False)
video_duration = info_dict.get('duration', 0)
self.file_duration_label.config(text=f"Video Duration: {video_duration}s")
ydl.download([url])
except Exception as e:
print(f"Error: {e}")
def ydl_hook(self, d):
if d['status'] == 'downloading':
filename = d['info_dict']['title']
total_bytes = d.get('total_bytes', 0)
downloaded_bytes = d.get('downloaded_bytes', 0)
elapsed_time = time() - self.start_time
speed = downloaded_bytes / elapsed_time if elapsed_time > 0 else 0
remaining_bytes = total_bytes - downloaded_bytes
remaining_time = remaining_bytes / speed if speed > 0 else 0
# progress
progress = downloaded_bytes / total_bytes * 100 if total_bytes > 0 else 0
self.file_name_label.config(text=f"File Name: {filename}")
self.file_size_label.config(text=f"File Size: {total_bytes / (1024 * 1024):.2f} MB")
self.elapsed_time_label.config(text=f"Elapsed Time: {elapsed_time:.2f}s")
self.remaining_time_label.config(text=f"Remaining Time: {remaining_time:.2f}s")
self.progress_bar['value'] = progress
if d['status'] == 'finished':
filename = d['info_dict']['title']
total_bytes = d.get('total_bytes', 0)
elapsed_time = time() - self.start_time
file_duration = self.file_duration_label.cget("text").split(": ")[1]
self.tree.insert("", tk.END, values=(filename, f"{total_bytes / (1024 * 1024):.2f} MB", file_duration, f"{elapsed_time:.2f}s", "0s"))
self.progress_bar['value'] = 100
if __name__ == "__main__":
app = TwitterVideoDownloader()
app.mainloop()