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()