| import os |
| import sys |
| import json |
| import random |
| import logging |
| import zipfile |
| import requests |
|
|
| from termcolor import colored |
|
|
| |
| logging.basicConfig(level=logging.INFO) |
| logger = logging.getLogger(__name__) |
|
|
|
|
| def clean_dir(path: str) -> None: |
| """ |
| Removes every file in a directory. |
| |
| Args: |
| path (str): Path to directory. |
| |
| Returns: |
| None |
| """ |
| try: |
| if not os.path.exists(path): |
| os.mkdir(path) |
| logger.info(f"Created directory: {path}") |
|
|
| for file in os.listdir(path): |
| file_path = os.path.join(path, file) |
| os.remove(file_path) |
| logger.info(f"Removed file: {file_path}") |
|
|
| logger.info(colored(f"Cleaned {path} directory", "green")) |
| except Exception as e: |
| logger.error(f"Error occurred while cleaning directory {path}: {str(e)}") |
|
|
| def fetch_songs(zip_url: str) -> None: |
| """ |
| Downloads songs into songs/ directory to use with geneated videos. |
| |
| Args: |
| zip_url (str): The URL to the zip file containing the songs. |
| |
| Returns: |
| None |
| """ |
| try: |
| logger.info(colored(f" => Fetching songs...", "magenta")) |
|
|
| files_dir = "../Songs" |
| if not os.path.exists(files_dir): |
| os.mkdir(files_dir) |
| logger.info(colored(f"Created directory: {files_dir}", "green")) |
| else: |
| |
| return |
|
|
| |
| response = requests.get(zip_url) |
|
|
| |
| with open("../Songs/songs.zip", "wb") as file: |
| file.write(response.content) |
|
|
| |
| with zipfile.ZipFile("../Songs/songs.zip", "r") as file: |
| file.extractall("../Songs") |
|
|
| |
| os.remove("../Songs/songs.zip") |
|
|
| logger.info(colored(" => Downloaded Songs to ../Songs.", "green")) |
|
|
| except Exception as e: |
| logger.error(colored(f"Error occurred while fetching songs: {str(e)}", "red")) |
|
|
| def choose_random_song() -> str: |
| """ |
| Chooses a random song from the songs/ directory. |
| |
| Returns: |
| str: The path to the chosen song. |
| """ |
| try: |
| songs = os.listdir("../Songs") |
| song = random.choice(songs) |
| logger.info(colored(f"Chose song: {song}", "green")) |
| return f"../Songs/{song}" |
| except Exception as e: |
| logger.error(colored(f"Error occurred while choosing random song: {str(e)}", "red")) |
|
|
|
|
| def check_env_vars() -> None: |
| """ |
| Checks if the necessary environment variables are set. |
| |
| Returns: |
| None |
| |
| Raises: |
| SystemExit: If any required environment variables are missing. |
| """ |
| try: |
| required_vars = ["PEXELS_API_KEY", "TIKTOK_SESSION_ID", "IMAGEMAGICK_BINARY"] |
| missing_vars = [var + os.getenv(var) for var in required_vars if os.getenv(var) is None or (len(os.getenv(var)) == 0)] |
|
|
| if missing_vars: |
| missing_vars_str = ", ".join(missing_vars) |
| logger.error(colored(f"The following environment variables are missing: {missing_vars_str}", "red")) |
| logger.error(colored("Please consult 'EnvironmentVariables.md' for instructions on how to set them.", "yellow")) |
| sys.exit(1) |
| except Exception as e: |
| logger.error(f"Error occurred while checking environment variables: {str(e)}") |
| sys.exit(1) |
|
|
|
|