File size: 3,483 Bytes
e71d833 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 |
import os
import sys
import json
import random
import logging
import zipfile
import requests
from termcolor import colored
# Configure logging
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:
# Skip if songs are already downloaded
return
# Download songs
response = requests.get(zip_url)
# Save the zip file
with open("../Songs/songs.zip", "wb") as file:
file.write(response.content)
# Unzip the file
with zipfile.ZipFile("../Songs/songs.zip", "r") as file:
file.extractall("../Songs")
# Remove the zip file
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) # Aborts the program
except Exception as e:
logger.error(f"Error occurred while checking environment variables: {str(e)}")
sys.exit(1) # Aborts the program if an unexpected error occurs
|