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