Spaces:
Running
Running
File size: 6,554 Bytes
f3724a2 3a12f33 |
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 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 |
import gradio
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()
|