Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
|
@@ -16,7 +16,8 @@ def convert_to_mp3(url):
|
|
| 16 |
# ایجاد پوشه موقت
|
| 17 |
temp_dir = tempfile.mkdtemp()
|
| 18 |
unique_id = str(uuid.uuid4()) # نام منحصربهفرد برای جلوگیری از تداخل
|
| 19 |
-
|
|
|
|
| 20 |
|
| 21 |
ydl_opts = {
|
| 22 |
'format': 'bestaudio/best', # بهترین کیفیت صوت
|
|
@@ -38,7 +39,6 @@ def convert_to_mp3(url):
|
|
| 38 |
ydl.download([url])
|
| 39 |
|
| 40 |
# پیدا کردن فایل MP3
|
| 41 |
-
mp3_pattern = f'{unique_id}_*{title}.mp3'
|
| 42 |
mp3_files = [f for f in os.listdir(temp_dir) if f.startswith(unique_id) and f.endswith('.mp3')]
|
| 43 |
if not mp3_files:
|
| 44 |
shutil.rmtree(temp_dir, ignore_errors=True)
|
|
@@ -47,23 +47,23 @@ def convert_to_mp3(url):
|
|
| 47 |
mp3_filename = mp3_files[0]
|
| 48 |
mp3_path = os.path.join(temp_dir, mp3_filename)
|
| 49 |
|
| 50 |
-
# پیام با راهنمایی لینک
|
| 51 |
message = f"""
|
| 52 |
-
✅ تبدیل موفق!
|
| 53 |
-
|
| 54 |
|
| 55 |
-
🔗
|
| 56 |
-
-
|
| 57 |
-
-
|
| 58 |
|
| 59 |
-
|
| 60 |
"""
|
| 61 |
|
| 62 |
return mp3_path, message
|
| 63 |
|
| 64 |
except Exception as e:
|
| 65 |
shutil.rmtree(temp_dir, ignore_errors=True)
|
| 66 |
-
return None, f"❌
|
| 67 |
|
| 68 |
# اینترفیس Gradio
|
| 69 |
demo = gr.Interface(
|
|
@@ -78,7 +78,7 @@ demo = gr.Interface(
|
|
| 78 |
label="فایل MP3 (دانلود)",
|
| 79 |
visible=True # دکمه دانلود نمایش داده میشود
|
| 80 |
),
|
| 81 |
-
gr.Markdown(label="پیام و لینک"
|
| 82 |
],
|
| 83 |
title="تبدیل ویدیو به MP3 با لینک دانلود",
|
| 84 |
description="""لینک ویدیو را وارد کنید. خروجی شامل فایل MP3 و لینک دانلود موقت است.
|
|
|
|
| 16 |
# ایجاد پوشه موقت
|
| 17 |
temp_dir = tempfile.mkdtemp()
|
| 18 |
unique_id = str(uuid.uuid4()) # نام منحصربهفرد برای جلوگیری از تداخل
|
| 19 |
+
output_template = f'{unique_id}_%(title)s.%(ext)s'
|
| 20 |
+
output_path = os.path.join(temp_dir, output_template)
|
| 21 |
|
| 22 |
ydl_opts = {
|
| 23 |
'format': 'bestaudio/best', # بهترین کیفیت صوت
|
|
|
|
| 39 |
ydl.download([url])
|
| 40 |
|
| 41 |
# پیدا کردن فایل MP3
|
|
|
|
| 42 |
mp3_files = [f for f in os.listdir(temp_dir) if f.startswith(unique_id) and f.endswith('.mp3')]
|
| 43 |
if not mp3_files:
|
| 44 |
shutil.rmtree(temp_dir, ignore_errors=True)
|
|
|
|
| 47 |
mp3_filename = mp3_files[0]
|
| 48 |
mp3_path = os.path.join(temp_dir, mp3_filename)
|
| 49 |
|
| 50 |
+
# پیام Markdown با راهنمایی لینک (برای UI و API)
|
| 51 |
message = f"""
|
| 52 |
+
### ✅ تبدیل موفق!
|
| 53 |
+
- **فایل**: `{mp3_filename}`
|
| 54 |
|
| 55 |
+
#### 🔗 لینک دانلود MP3
|
| 56 |
+
- **در UI Gradio**: از دکمه دانلود در کامپوننت File استفاده کنید (URL موقت تولید میشود).
|
| 57 |
+
- **در API**: خروجی `data[0]` یک URL مستقیم به MP3 است (مثل `https://your-space.hf.space/file={mp3_filename}`).
|
| 58 |
|
| 59 |
+
**نکته مهم**: لینکها موقت هستند (در Spaces، ۱-۲ ساعت اعتبار). برای API، به `/api/predict` POST کنید با `data: [{{"text": "لینک ویدیو"}}]`.
|
| 60 |
"""
|
| 61 |
|
| 62 |
return mp3_path, message
|
| 63 |
|
| 64 |
except Exception as e:
|
| 65 |
shutil.rmtree(temp_dir, ignore_errors=True)
|
| 66 |
+
return None, f"### ❌ خطا!\n{str(e)}\n\n**نکته**: مطمئن شوید لینک معتبر است (مثل یوتیوب). yt-dlp از بسیاری سایتها پشتیبانی میکند."
|
| 67 |
|
| 68 |
# اینترفیس Gradio
|
| 69 |
demo = gr.Interface(
|
|
|
|
| 78 |
label="فایل MP3 (دانلود)",
|
| 79 |
visible=True # دکمه دانلود نمایش داده میشود
|
| 80 |
),
|
| 81 |
+
gr.Markdown(label="پیام و لینک") # بدون lines – تصحیح شده
|
| 82 |
],
|
| 83 |
title="تبدیل ویدیو به MP3 با لینک دانلود",
|
| 84 |
description="""لینک ویدیو را وارد کنید. خروجی شامل فایل MP3 و لینک دانلود موقت است.
|