78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
# main.py
|
|
import os
|
|
import sys
|
|
|
|
import yt_dlp
|
|
from dotenv import load_dotenv
|
|
|
|
from src.fetcher import process_playlist_videos
|
|
|
|
|
|
def main():
|
|
"""Main function to run the video fetching and saving process."""
|
|
load_dotenv()
|
|
|
|
# --- Configuration from .env ---
|
|
csv_filename = os.getenv("CSV_FILENAME", "watch_later_public.csv")
|
|
csv_filename_private = os.getenv("CSV_FILENAME_PRIVATE", "watch_later_private.csv")
|
|
browser = os.getenv("BROWSER", "").lower()
|
|
|
|
# --- Validate Browser and Get Optional Profile Path ---
|
|
supported_browsers = ["firefox", "chrome"]
|
|
if not browser or browser not in supported_browsers:
|
|
print("ERROR: You must set a valid BROWSER in your .env file.", file=sys.stderr)
|
|
print(
|
|
f"Supported browsers are: {', '.join(supported_browsers)}", file=sys.stderr
|
|
)
|
|
sys.exit(1)
|
|
|
|
profile_path = os.getenv(f"{browser.upper()}_PROFILE_PATH")
|
|
|
|
# --- Process all videos in the playlist ---
|
|
try:
|
|
print(
|
|
f"Starting the process to fetch videos using {browser.capitalize()} cookies..."
|
|
)
|
|
if profile_path:
|
|
print(f"Using specified profile path: {profile_path}")
|
|
else:
|
|
print("Using default browser profile.")
|
|
|
|
process_playlist_videos(
|
|
browser=browser,
|
|
profile_path=profile_path,
|
|
output_filename=csv_filename,
|
|
private_output_filename=csv_filename_private,
|
|
)
|
|
|
|
except KeyboardInterrupt:
|
|
print("\n\nOperation cancelled by user. Exiting gracefully.")
|
|
sys.exit(0)
|
|
|
|
except yt_dlp.utils.DownloadError as e:
|
|
print(
|
|
f"\n❌ CRITICAL ERROR: Could not fetch the YouTube playlist using {browser.capitalize()} cookies.",
|
|
file=sys.stderr,
|
|
)
|
|
print(f" yt-dlp error: {e}", file=sys.stderr)
|
|
print("\n--- Common Solutions ---", file=sys.stderr)
|
|
print(
|
|
f"1. Ensure your browser ({browser.capitalize()}) is completely closed.",
|
|
file=sys.stderr,
|
|
)
|
|
print(
|
|
f"2. Make sure you are logged into YouTube in the correct {browser.capitalize()} profile.",
|
|
file=sys.stderr,
|
|
)
|
|
print(
|
|
"3. If you use a non-default profile, ensure the correct profile path is set in your .env file.",
|
|
file=sys.stderr,
|
|
)
|
|
sys.exit(1)
|
|
|
|
except Exception as e:
|
|
print(f"\nAn unexpected error occurred: {e}", file=sys.stderr)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|