edaross

Security Now Downloader (by ChatGPT)

Mar 23rd, 2023
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.29 KB | None | 0 0
  1. import tkinter as tk
  2. from tkinter import ttk
  3. from tkinter import scrolledtext
  4. import os
  5. import requests
  6.  
  7.  
  8. class App:
  9.     def __init__(self):
  10.         self.root = tk.Tk()
  11.         self.root.title("Security Now Downloader")
  12.         self.root.geometry("600x400")
  13.  
  14.         # Create label and entry for start episode number
  15.         self.lbl_start = ttk.Label(self.root, text="Newest episode to download:")
  16.         self.lbl_start.grid(column=0, row=0, padx=10, pady=10)
  17.  
  18.         self.start_var = tk.StringVar()
  19.         self.start_var.set("915")  # Default value
  20.         self.ent_start = ttk.Entry(self.root, textvariable=self.start_var)
  21.         self.ent_start.grid(column=1, row=0, padx=10, pady=10)
  22.  
  23.         # Create label and entry for end episode number
  24.         self.lbl_end = ttk.Label(self.root, text="Oldest episode to download:")
  25.         self.lbl_end.grid(column=0, row=1, padx=10, pady=10)
  26.  
  27.         self.end_var = tk.StringVar()
  28.         self.end_var.set("1")  # Default value
  29.         self.ent_end = ttk.Entry(self.root, textvariable=self.end_var)
  30.         self.ent_end.grid(column=1, row=1, padx=10, pady=10)
  31.  
  32.         # Create text area for download progress messages
  33.         self.text_area = scrolledtext.ScrolledText(self.root, width=60, height=10)
  34.         self.text_area.grid(column=0, row=2, padx=10, pady=10, columnspan=2)
  35.  
  36.         # Create buttons for start download and quit
  37.         self.btn_start = ttk.Button(self.root, text="Start Download", command=self.start_download)
  38.         self.btn_start.grid(column=0, row=3, padx=10, pady=10)
  39.  
  40.         self.btn_quit = ttk.Button(self.root, text="Quit", command=self.quit)
  41.         self.btn_quit.grid(column=1, row=3, padx=10, pady=10)
  42.  
  43.     def start_download(self):
  44.         # Get start and end episode numbers from entry boxes
  45.         try:
  46.             start = int(self.start_var.get())
  47.             end = int(self.end_var.get())
  48.         except ValueError:
  49.             self.text_area.insert(tk.END, "Invalid episode number\n")
  50.             return
  51.  
  52.         base_url = "https://twit.cachefly.net/audio/sn/sn"
  53.         episode_numbers = range(start, end - 1, -1)
  54.         total_episodes = len(episode_numbers)
  55.  
  56.         for i in episode_numbers:
  57.             episode_filename = os.path.join("security_now", f"sn{i:04d}.mp3")
  58.             if os.path.exists(episode_filename):
  59.                 self.text_area.insert(tk.END, f"{episode_filename} already exists\n")
  60.             else:
  61.                 episode_url = f"{base_url}{i:04d}/sn{i:04d}.mp3"
  62.                 try:
  63.                     with requests.Session() as session:
  64.                         response = session.get(episode_url, stream=True)
  65.                         response.raise_for_status()
  66.                         with open(episode_filename, "wb") as f:
  67.                             for chunk in response.iter_content(chunk_size=8192):
  68.                                 f.write(chunk)
  69.                         self.text_area.insert(tk.END, f"{episode_filename} downloaded successfully\n")
  70.                 except requests.exceptions.RequestException as e:
  71.                     self.text_area.insert(tk.END, f"Unable to download {episode_filename}: {e}\n")
  72.  
  73.         self.text_area.insert(tk.END, "Download complete\n")
  74.  
  75.     def quit(self):
  76.         self.root.destroy()
  77.  
  78.  
  79. app = App()
  80. app.root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment