import os import requests import time from dotenv import load_dotenv from heygen.AvatarEnum import AvatarEnum load_dotenv() # Get HeyGen token TOKEN = os.getenv("HEY_GEN_TOKEN") # POST TO CREATE VIDEO CREATE_VIDEO_URL = 'https://api.heygen.com/v1/template.generate' GET_VIDEO_URL = 'https://api.heygen.com/v1/video_status.get' POST_HEADER = { 'X-Api-Key': TOKEN, 'Content-Type': 'application/json' } GET_HEADER = { 'X-Api-Key': TOKEN } MATTHEW_NOAH = "11b234e504e44bfda9bc6b7aac3c8f81" VERA_CERISE = "9bf2f27009cd403ab4ba4e22629b27bb" EDWARD_TONY = "d3333e37952946059b45efc8482a2b6c" TANYA_MOLLY = "07c75076b3f94df4ac658c6de72be83a" KAYLA_ABBI = "d688099f8db9472cb4890b0561e81793" JEROME_RYAN = "ad41feb2a5c4483085525e3d8907f512" TYLER_CHRISTOPHER = "03c796f8ed274bb38f19e893bcbc6121" def create_video(text, avatar: AvatarEnum): # POST TO CREATE VIDEO data = { "template_id": avatar.value, "title": "video_title", "test": False, "variables": [ { "properties": { "text": text }, "name": "avatar_0" } ] } response = requests.post(CREATE_VIDEO_URL, headers=POST_HEADER, json=data) print(response.status_code) print(response.json()) # GET TO CHECK STATUS AND GET VIDEO WHEN READY video_id = response.json()["data"]["video_id"] params = { 'video_id': response.json()["data"]["video_id"] } response = {} status = "processing" error = None while status != "completed" and error is None: response = requests.get(GET_VIDEO_URL, headers=GET_HEADER, params=params) response_data = response.json() status = response_data["data"]["status"] error = response_data["data"]["error"] if status != "completed" and error is None: print(f"Status: {status}") time.sleep(5) # Wait for 5 second before the next request print(response.status_code) print(response.json()) # DOWNLOAD VIDEO download_url = response.json()['data']['video_url'] output_directory = 'download-video/' output_filename = video_id + '.mp4' response = requests.get(download_url) if response.status_code == 200: os.makedirs(output_directory, exist_ok=True) # Create the directory if it doesn't exist output_path = os.path.join(output_directory, output_filename) with open(output_path, 'wb') as f: f.write(response.content) print(f"File '{output_filename}' downloaded successfully.") return output_filename else: print(f"Failed to download file. Status code: {response.status_code}") return None