Spaces:
Running
Running
import requests | |
import json | |
import os | |
# اطلاعات API TTS | |
TTS_API_BASE_URL = "https://talkbot.ir/TTS-tkun" | |
TTS_API_FORMAT = "?text=" | |
# اطلاعات API OpenAI (برای Talkbot.ir) | |
OPENAI_API_BASE_URL = "https://talkbot.ir/api/v1/chat/completions" | |
OPENAI_API_KEY = "sk-4fb61f56acfcc731e801b904cd89f5" # دقت کنید که این کلید API از Talkbot.ir است و ممکن است با OpenAI اصلی متفاوت باشد. | |
OPENAI_MODEL = "deepseek-v3-0324" | |
def get_text_from_ai(prompt_text): | |
""" | |
تولید متن پادکست با استفاده از API هوش مصنوعی. | |
""" | |
headers = { | |
"Authorization": f"Bearer {OPENAI_API_KEY}", | |
"Content-Type": "application/json" | |
} | |
payload = { | |
"model": OPENAI_MODEL, | |
"messages": [ | |
{"role": "system", "content": "You are a helpful assistant that generates podcast scripts."}, | |
{"role": "user", "content": f"Generate a short podcast script about: {prompt_text}"} | |
], | |
"max_tokens": 500, | |
"temperature": 0.7 | |
} | |
try: | |
response = requests.post(OPENAI_API_BASE_URL, headers=headers, json=payload) | |
response.raise_for_status() # Raises an HTTPError for bad responses (4xx or 5xx) | |
data = response.json() | |
if data and data.get("choices"): | |
return data["choices"][0]["message"]["content"].strip() | |
else: | |
print("AI response did not contain expected data.") | |
return None | |
except requests.exceptions.RequestException as e: | |
print(f"Error connecting to AI API: {e}") | |
return None | |
except json.JSONDecodeError: | |
print("Error decoding JSON response from AI API.") | |
return None | |
def get_audio_wav_link(text): | |
""" | |
دریافت لینک فایل WAV از API تبدیل متن به گفتار. | |
""" | |
encoded_text = requests.utils.quote(text) # Encode URL-unsafe characters | |
tts_url = f"{TTS_API_BASE_URL}{TTS_API_FORMAT}{encoded_text}" | |
try: | |
# برای این API، فقط ساختار URL مهم است، نیازی به درخواست مستقیم برای دریافت لینک نیست. | |
# فرض میشود که API بلافاصله لینک wav را به عنوان پاسخ GET برمیگرداند. | |
# اما طبق توضیحات شما، خروجی به صورت لینک wav است. | |
# این یعنی درخواست GET به آن URL، مستقیماً لینک را برمیگرداند. | |
# اگر API مستقیماً لینک WAV را در بدنه پاسخ برمیگرداند، میتوان از request.text استفاده کرد. | |
# در غیر این صورت، شاید باید یک درخواست واقعی انجام داد. | |
# با توجه به "خروجی صوت به صورت لینک wav است"، فرض میشود که خود URL ورودی، لینک WAV خروجی است. | |
# اگر API یک JSON با لینک wav برمیگرداند، باید کد را تغییر داد. | |
return tts_url | |
except requests.exceptions.RequestException as e: | |
print(f"Error generating TTS link: {e}") | |
return None | |
def main(): | |
print("--------------------------------------------------") | |
print(" Talkbot Podcast Generator ") | |
print("--------------------------------------------------") | |
print("این اسکریپت یک متن پادکست تولید و لینکهای صوتی را فراهم میکند.") | |
print(" برای خروج، 'exit' را تایپ کنید.") | |
print("--------------------------------------------------") | |
while True: | |
topic = input("\nموضوع پادکست را وارد کنید (یا 'exit' برای خروج): ") | |
if topic.lower() == 'exit': | |
break | |
print(f"\nدر حال تولید اسکریپت پادکست برای '{topic}' با هوش مصنوعی...") | |
podcast_script = get_text_from_ai(topic) | |
if podcast_script: | |
print("\n------------------- اسکریپت پادکست -------------------") | |
print(podcast_script) | |
print("------------------------------------------------------") | |
# تقسیم متن به دو بخش برای صدای اول و صدای دوم | |
# این یک تقسیمبندی ساده است. ممکن است نیاز به منطق دقیقتری داشته باشید. | |
sentences = [s.strip() for s in podcast_script.split('.') if s.strip()] | |
if len(sentences) >= 2: | |
speaker1_text = sentences[0] | |
speaker2_text = sentences[1] | |
elif len(sentences) == 1: | |
speaker1_text = sentences[0] | |
speaker2_text = "" # یا بخشی از جمله اول | |
else: | |
print("متن کافی برای تقسیم بین دو گوینده وجود ندارد.") | |
speaker1_text = podcast_script | |
speaker2_text = "" | |
print("\nدر حال ساخت لینکهای صوتی...") | |
audio_link_speaker1 = get_audio_wav_link(speaker1_text) | |
audio_link_speaker2 = get_audio_wav_link(speaker2_text) # اگر speaker2_text خالی باشد، لینک معناداری تولید نمیشود. | |
if audio_link_speaker1: | |
print(f"لینک صدای اول (Speaker 1): {audio_link_speaker1}") | |
else: | |
print("خطا در تولید لینک صدای اول.") | |
if audio_link_speaker2 and speaker2_text: # فقط اگر متن برای گوینده دوم وجود داشته باشد | |
print(f"لینک صدای دوم (Speaker 2): {audio_link_speaker2}") | |
elif speaker2_text: # اگر speaker2_text داشتیم و لینکی تولید نشد | |
print("خطا در تولید لینک صدای دوم.") | |
else: | |
print("متن کافی برای تولید صدای دوم وجود نداشت.") | |
print("\n------------------------------------------------------") | |
else: | |
print("متن پادکست از هوش مصنوعی دریافت نشد.") | |
print("لطفاً اتصال به اینترنت و کلید API را بررسی کنید.") | |
print("\nخروج از برنامه. موفق باشید!") | |
if __name__ == "__main__": | |
main() | |