Я боролся с этим некоторое время. Я написал небольшой интерфейс для загрузчика YouTube, используя pytube. По какой-то причине я получаю ошибку «streamingData» каждый раз, когда пытаюсь загрузить видео. Я попробовал несколько разных способов получения потоков, но не смог заставить их работать. Я вставил несколько операторов печати, и в целом ссылка на YouTube верна, но затем она не доходит до оператора if в строке 14 и вылетает на видео = yt_object.streams.get_highest_solve( ) в строке 13 выдает ошибку исключения «streamingData». Я использую последнюю версию pytube (12.1.3). Мой исходный код:
import os
import tkinter
import customtkinter
from pytube import YouTube
def start_download():
try:
yt_link = link.get()
print(yt_link)
yt_object = YouTube(yt_link, on_progress_callback=on_progress)
print(1)
video = yt_object.streams.get_highest_resolution()
if video:
print(2)
title.configure(text=yt_object.title, text_color="white")
print(3)
finish_label.configure(text="")
print(4)
video.download(output_path=f"{os.environ['UserProfile']}/Downloads")
print(5)
finish_label.configure(text='Download complete.')
else:
print("No highest resolution stream available.")
except Exception as e:
finish_label.configure(text=f"An error occurred: {e}", text_color="red")
def on_progress(stream, chunk, bytes_remaining):
total_size = stream.filesize
bytes_downloaded = total_size - bytes_remaining
percentage_of_completion = bytes_downloaded / total_size * 100
per = str(int(percentage_of_completion))
progress_percentage.configure(text=f"{per}%")
# Update progress bar
progress_bar.set(float(percentage_of_completion / 100))
# System Settings
customtkinter.set_appearance_mode("Dark")
customtkinter.set_default_color_theme("blue")
# Create the app frame
app = customtkinter.CTk()
app.geometry("720x480")
app.title("YouTube Downloader")
# Adding UI elements
title = customtkinter.CTkLabel(app, text="Insert a YouTube link:")
title.pack(padx=10, pady=10)
# Link input
url_var = tkinter.StringVar()
link = customtkinter.CTkEntry(app, width=350, height=40, textvariable=url_var)
link.pack()
# Finished downloading
finish_label = customtkinter.CTkLabel(app, text="")
finish_label.pack()
# Progress percentage
progress_percentage = customtkinter.CTkLabel(app, text="0%")
progress_percentage.pack()
progress_bar = customtkinter.CTkProgressBar(app, width=400)
progress_bar.set(0)
progress_bar.pack(padx=10, pady=10)
# Download button
download = customtkinter.CTkButton(app, text="Download", command=start_download)
download.pack(padx=10, pady=10)
# Run app
app.mainloop()
Любые мысли и предложения будут приветствоваться! Я даже обратился за помощью к ChatGPT, но безрезультатно.
При следовании рекомендациям ewokx выдает такую ошибку:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Robert\AppData\Local\Programs\Python\Python311\Lib\tkinter\__init__.py", line 1948, in __call__
return self.func(*args)
^^^^^^^^^^^^^^^^
File "C:\Users\Robert\PycharmProjects\YouTubeDownloader\venv\Lib\site-packages\customtkinter\windows\widgets\ctk_button.py", line 553, in _clicked
self._command()
File "C:\Users\Robert\PycharmProjects\YouTubeDownloader\main.py", line 12, in start_download
video = yt_object.streams.get_highest_resolution()
^^^^^^^^^^^^^^^^^
File "C:\Users\Robert\PycharmProjects\YouTubeDownloader\venv\Lib\site-packages\pytube\__main__.py", line 296, in streams
return StreamQuery(self.fmt_streams)
^^^^^^^^^^^^^^^^
File "C:\Users\Robert\PycharmProjects\YouTubeDownloader\venv\Lib\site-packages\pytube\__main__.py", line 176, in fmt_streams
stream_manifest = extract.apply_descrambler(self.streaming_data)
^^^^^^^^^^^^^^^^^^^
File "C:\Users\Robert\PycharmProjects\YouTubeDownloader\venv\Lib\site-packages\pytube\__main__.py", line 161, in streaming_data
return self.vid_info['streamingData']
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
KeyError: 'streamingData'
Подробнее здесь: https://stackoverflow.com/questions/761 ... ing-to-run