suprimedev commited on
Commit
3a12f33
·
verified ·
1 Parent(s): 641abcb

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +132 -0
app.py ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ import json
3
+ import os
4
+
5
+ # اطلاعات API TTS
6
+ TTS_API_BASE_URL = "https://talkbot.ir/TTS-tkun"
7
+ TTS_API_FORMAT = "?text="
8
+
9
+ # اطلاعات API OpenAI (برای Talkbot.ir)
10
+ OPENAI_API_BASE_URL = "https://talkbot.ir/api/v1/chat/completions"
11
+ OPENAI_API_KEY = "sk-4fb61f56acfcc731e801b904cd89f5" # دقت کنید که این کلید API از Talkbot.ir است و ممکن است با OpenAI اصلی متفاوت باشد.
12
+ OPENAI_MODEL = "deepseek-v3-0324"
13
+
14
+ def get_text_from_ai(prompt_text):
15
+ """
16
+ تولید متن پادکست با استفاده از API هوش مصنوعی.
17
+ """
18
+ headers = {
19
+ "Authorization": f"Bearer {OPENAI_API_KEY}",
20
+ "Content-Type": "application/json"
21
+ }
22
+
23
+ payload = {
24
+ "model": OPENAI_MODEL,
25
+ "messages": [
26
+ {"role": "system", "content": "You are a helpful assistant that generates podcast scripts."},
27
+ {"role": "user", "content": f"Generate a short podcast script about: {prompt_text}"}
28
+ ],
29
+ "max_tokens": 500,
30
+ "temperature": 0.7
31
+ }
32
+
33
+ try:
34
+ response = requests.post(OPENAI_API_BASE_URL, headers=headers, json=payload)
35
+ response.raise_for_status() # Raises an HTTPError for bad responses (4xx or 5xx)
36
+ data = response.json()
37
+ if data and data.get("choices"):
38
+ return data["choices"][0]["message"]["content"].strip()
39
+ else:
40
+ print("AI response did not contain expected data.")
41
+ return None
42
+ except requests.exceptions.RequestException as e:
43
+ print(f"Error connecting to AI API: {e}")
44
+ return None
45
+ except json.JSONDecodeError:
46
+ print("Error decoding JSON response from AI API.")
47
+ return None
48
+
49
+ def get_audio_wav_link(text):
50
+ """
51
+ دریافت لینک فایل WAV از API تبدیل متن به گفتار.
52
+ """
53
+ encoded_text = requests.utils.quote(text) # Encode URL-unsafe characters
54
+ tts_url = f"{TTS_API_BASE_URL}{TTS_API_FORMAT}{encoded_text}"
55
+
56
+ try:
57
+ # برای این API، فقط ساختار URL مهم است، نیازی به درخواست مستقیم برای دریافت لینک نیست.
58
+ # فرض می‌شود که API بلافاصله لینک wav را به عنوان پاسخ GET برمی‌گرداند.
59
+ # اما طبق توضیحات شما، خروجی به صورت لینک wav است.
60
+ # این یعنی درخواست GET به آن URL، مستقیماً لینک را برمی‌گرداند.
61
+ # اگر API مستقیماً لینک WAV را در بدنه پاسخ برمی‌گرداند، می‌توان از request.text استفاده کرد.
62
+ # در غیر این صورت، شاید باید یک درخواست واقعی انجام داد.
63
+ # با توجه به "خروجی صوت به صورت لینک wav است"، فرض می‌شود که خود URL ورودی، لینک WAV خروجی است.
64
+ # اگر API یک JSON با لینک wav برمی‌گرداند، باید کد را تغییر داد.
65
+ return tts_url
66
+
67
+ except requests.exceptions.RequestException as e:
68
+ print(f"Error generating TTS link: {e}")
69
+ return None
70
+
71
+ def main():
72
+ print("--------------------------------------------------")
73
+ print(" Talkbot Podcast Generator ")
74
+ print("--------------------------------------------------")
75
+ print("این اسکریپت یک متن پادکست تولید و لینک‌های صوتی را فراهم می‌کند.")
76
+ print(" برای خروج، 'exit' را تایپ کنید.")
77
+ print("--------------------------------------------------")
78
+
79
+ while True:
80
+ topic = input("\nموضوع پادکست را وارد کنید (یا 'exit' برای خروج): ")
81
+ if topic.lower() == 'exit':
82
+ break
83
+
84
+ print(f"\nدر حال تولید اسکریپت پادکست برای '{topic}' با هوش مصنوعی...")
85
+ podcast_script = get_text_from_ai(topic)
86
+
87
+ if podcast_script:
88
+ print("\n------------------- اسکریپت پادکست -------------------")
89
+ print(podcast_script)
90
+ print("------------------------------------------------------")
91
+
92
+ # تقسیم متن به دو بخش برای صدای اول و صدای دوم
93
+ # این یک تقسیم‌بندی ساده است. ممکن است نیاز به منطق دقیق‌تری داشته باشید.
94
+ sentences = [s.strip() for s in podcast_script.split('.') if s.strip()]
95
+
96
+ if len(sentences) >= 2:
97
+ speaker1_text = sentences[0]
98
+ speaker2_text = sentences[1]
99
+ elif len(sentences) == 1:
100
+ speaker1_text = sentences[0]
101
+ speaker2_text = "" # یا بخشی از جمله اول
102
+ else:
103
+ print("متن کافی برای تقسیم بین دو گوینده وجود ند��رد.")
104
+ speaker1_text = podcast_script
105
+ speaker2_text = ""
106
+
107
+ print("\nدر حال ساخت لینک‌های صوتی...")
108
+
109
+ audio_link_speaker1 = get_audio_wav_link(speaker1_text)
110
+ audio_link_speaker2 = get_audio_wav_link(speaker2_text) # اگر speaker2_text خالی باشد، لینک معناداری تولید نمی‌شود.
111
+
112
+ if audio_link_speaker1:
113
+ print(f"لینک صدای اول (Speaker 1): {audio_link_speaker1}")
114
+ else:
115
+ print("خطا در تولید لینک صدای اول.")
116
+
117
+ if audio_link_speaker2 and speaker2_text: # فقط اگر متن برای گوینده دوم وجود داشته باشد
118
+ print(f"لینک صدای دوم (Speaker 2): {audio_link_speaker2}")
119
+ elif speaker2_text: # اگر speaker2_text داشتیم و لینکی تولید نشد
120
+ print("خطا در تولید لینک صدای دوم.")
121
+ else:
122
+ print("متن کافی برای تولید صدای دوم وجود نداشت.")
123
+
124
+ print("\n------------------------------------------------------")
125
+ else:
126
+ print("متن پادکست از هوش مصنوعی دریافت نشد.")
127
+ print("لطفاً اتصال به اینترنت و کلید API را بررسی کنید.")
128
+
129
+ print("\nخروج از برنامه. موفق باشید!")
130
+
131
+ if __name__ == "__main__":
132
+ main()