Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import tkinter as tk
- from tkinter import ttk
- from tkinter import scrolledtext
- import os
- import requests
- class App:
- def __init__(self):
- self.root = tk.Tk()
- self.root.title("Security Now Downloader")
- self.root.geometry("600x400")
- # Create label and entry for start episode number
- self.lbl_start = ttk.Label(self.root, text="Newest episode to download:")
- self.lbl_start.grid(column=0, row=0, padx=10, pady=10)
- self.start_var = tk.StringVar()
- self.start_var.set("915") # Default value
- self.ent_start = ttk.Entry(self.root, textvariable=self.start_var)
- self.ent_start.grid(column=1, row=0, padx=10, pady=10)
- # Create label and entry for end episode number
- self.lbl_end = ttk.Label(self.root, text="Oldest episode to download:")
- self.lbl_end.grid(column=0, row=1, padx=10, pady=10)
- self.end_var = tk.StringVar()
- self.end_var.set("1") # Default value
- self.ent_end = ttk.Entry(self.root, textvariable=self.end_var)
- self.ent_end.grid(column=1, row=1, padx=10, pady=10)
- # Create text area for download progress messages
- self.text_area = scrolledtext.ScrolledText(self.root, width=60, height=10)
- self.text_area.grid(column=0, row=2, padx=10, pady=10, columnspan=2)
- # Create buttons for start download and quit
- self.btn_start = ttk.Button(self.root, text="Start Download", command=self.start_download)
- self.btn_start.grid(column=0, row=3, padx=10, pady=10)
- self.btn_quit = ttk.Button(self.root, text="Quit", command=self.quit)
- self.btn_quit.grid(column=1, row=3, padx=10, pady=10)
- def start_download(self):
- # Get start and end episode numbers from entry boxes
- try:
- start = int(self.start_var.get())
- end = int(self.end_var.get())
- except ValueError:
- self.text_area.insert(tk.END, "Invalid episode number\n")
- return
- base_url = "https://twit.cachefly.net/audio/sn/sn"
- episode_numbers = range(start, end - 1, -1)
- total_episodes = len(episode_numbers)
- for i in episode_numbers:
- episode_filename = os.path.join("security_now", f"sn{i:04d}.mp3")
- if os.path.exists(episode_filename):
- self.text_area.insert(tk.END, f"{episode_filename} already exists\n")
- else:
- episode_url = f"{base_url}{i:04d}/sn{i:04d}.mp3"
- try:
- with requests.Session() as session:
- response = session.get(episode_url, stream=True)
- response.raise_for_status()
- with open(episode_filename, "wb") as f:
- for chunk in response.iter_content(chunk_size=8192):
- f.write(chunk)
- self.text_area.insert(tk.END, f"{episode_filename} downloaded successfully\n")
- except requests.exceptions.RequestException as e:
- self.text_area.insert(tk.END, f"Unable to download {episode_filename}: {e}\n")
- self.text_area.insert(tk.END, "Download complete\n")
- def quit(self):
- self.root.destroy()
- app = App()
- app.root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment