A Pen by BI__KO BBM on CodePen.
Created
March 7, 2026 03:14
-
-
Save hsnsbhshsh/b98908e141dedf680ae7b97a8c871904 to your computer and use it in GitHub Desktop.
Untitled
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!DOCTYPE html> | |
| <html lang="ar" dir="rtl"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Sora Video Downloader Pro</title> | |
| <style> | |
| * { | |
| margin: 0; | |
| padding: 0; | |
| box-sizing: border-box; | |
| font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; | |
| } | |
| body { | |
| background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); | |
| min-height: 100vh; | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| padding: 20px; | |
| } | |
| .container { | |
| background: white; | |
| border-radius: 30px; | |
| padding: 40px; | |
| width: 100%; | |
| max-width: 600px; | |
| box-shadow: 0 30px 60px rgba(0,0,0,0.3); | |
| } | |
| h1 { | |
| text-align: center; | |
| color: #333; | |
| margin-bottom: 10px; | |
| font-size: 32px; | |
| } | |
| .subtitle { | |
| text-align: center; | |
| color: #666; | |
| margin-bottom: 30px; | |
| } | |
| .input-group { | |
| margin-bottom: 20px; | |
| } | |
| label { | |
| display: block; | |
| margin-bottom: 8px; | |
| color: #555; | |
| font-weight: 500; | |
| } | |
| #video-url { | |
| width: 100%; | |
| padding: 18px; | |
| border: 2px solid #e0e0e0; | |
| border-radius: 15px; | |
| font-size: 16px; | |
| transition: all 0.3s; | |
| direction: ltr; | |
| } | |
| #video-url:focus { | |
| outline: none; | |
| border-color: #667eea; | |
| box-shadow: 0 0 0 4px rgba(102, 126, 234, 0.1); | |
| } | |
| .api-status { | |
| background: #f0f9ff; | |
| border: 1px solid #b8e1ff; | |
| border-radius: 10px; | |
| padding: 12px; | |
| margin-bottom: 20px; | |
| color: #0369a1; | |
| font-size: 14px; | |
| display: flex; | |
| align-items: center; | |
| gap: 10px; | |
| } | |
| .api-status .green-dot { | |
| width: 10px; | |
| height: 10px; | |
| background: #22c55e; | |
| border-radius: 50%; | |
| display: inline-block; | |
| } | |
| .download-btn { | |
| width: 100%; | |
| padding: 18px; | |
| background: linear-gradient(135deg, #667eea, #764ba2); | |
| color: white; | |
| border: none; | |
| border-radius: 15px; | |
| font-size: 18px; | |
| font-weight: bold; | |
| cursor: pointer; | |
| transition: all 0.3s; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 10px; | |
| } | |
| .download-btn:hover:not(:disabled) { | |
| transform: translateY(-2px); | |
| box-shadow: 0 10px 25px rgba(102, 126, 234, 0.3); | |
| } | |
| .download-btn:disabled { | |
| opacity: 0.6; | |
| cursor: not-allowed; | |
| } | |
| .loading-spinner { | |
| display: inline-block; | |
| width: 20px; | |
| height: 20px; | |
| border: 3px solid rgba(255,255,255,.3); | |
| border-radius: 50%; | |
| border-top-color: white; | |
| animation: spin 0.8s linear infinite; | |
| } | |
| @keyframes spin { | |
| to { transform: rotate(360deg); } | |
| } | |
| .status-box { | |
| margin-top: 25px; | |
| padding: 20px; | |
| border-radius: 15px; | |
| display: none; | |
| } | |
| .status-box.success { | |
| background: #d4edda; | |
| border: 1px solid #c3e6cb; | |
| color: #155724; | |
| } | |
| .status-box.error { | |
| background: #f8d7da; | |
| border: 1px solid #f5c6cb; | |
| color: #721c24; | |
| } | |
| .status-box.info { | |
| background: #e7f3ff; | |
| border: 1px solid #b8daff; | |
| color: #004085; | |
| } | |
| .result-box { | |
| margin-top: 20px; | |
| padding: 20px; | |
| background: #f8f9fa; | |
| border-radius: 15px; | |
| border: 1px solid #e0e0e0; | |
| } | |
| .download-link { | |
| display: block; | |
| padding: 18px; | |
| background: #28a745; | |
| color: white; | |
| text-decoration: none; | |
| border-radius: 10px; | |
| text-align: center; | |
| font-weight: bold; | |
| margin-bottom: 15px; | |
| transition: 0.3s; | |
| } | |
| .download-link:hover { | |
| background: #34ce57; | |
| transform: translateY(-2px); | |
| } | |
| .video-info { | |
| color: #666; | |
| font-size: 14px; | |
| margin-bottom: 15px; | |
| } | |
| .copy-btn { | |
| width: 100%; | |
| padding: 12px; | |
| background: #6c757d; | |
| color: white; | |
| border: none; | |
| border-radius: 10px; | |
| cursor: pointer; | |
| font-size: 14px; | |
| transition: 0.3s; | |
| } | |
| .copy-btn:hover { | |
| background: #5a6268; | |
| } | |
| .examples { | |
| margin-top: 30px; | |
| } | |
| .examples h4 { | |
| color: #666; | |
| margin-bottom: 15px; | |
| font-size: 16px; | |
| } | |
| .example-buttons { | |
| display: flex; | |
| gap: 10px; | |
| flex-wrap: wrap; | |
| } | |
| .example-btn { | |
| flex: 1; | |
| padding: 12px; | |
| background: #f0f0f0; | |
| border: none; | |
| border-radius: 10px; | |
| cursor: pointer; | |
| font-size: 13px; | |
| transition: 0.3s; | |
| min-width: 120px; | |
| } | |
| .example-btn:hover { | |
| background: #e0e0e0; | |
| } | |
| footer { | |
| text-align: center; | |
| margin-top: 30px; | |
| color: #999; | |
| font-size: 12px; | |
| } | |
| </style> | |
| </head> | |
| <body> | |
| <div class="container"> | |
| <h1>🎬 Sora Video Downloader</h1> | |
| <div class="subtitle">باستخدام API احترافي - بدون علامة مائية</div> | |
| <!-- حالة API - تأكيد أن المفتاح شغال --> | |
| <div class="api-status"> | |
| <span class="green-dot"></span> | |
| <span>✓ API متصل وجاهز - المفتاح: <span style="font-family: monospace; background: #e1f5fe; padding: 2px 6px; border-radius: 4px;">FZ7sfbEcbx5w...</span></span> | |
| </div> | |
| <div class="input-group"> | |
| <label for="video-url">🔗 رابط فيديو Sora</label> | |
| <input type="text" id="video-url" placeholder="https://sora.chatgpt.com/p/..."> | |
| </div> | |
| <button class="download-btn" onclick="downloadVideo()" id="downloadBtn"> | |
| <span>⬇️</span> تحميل الفيديو بدون علامة | |
| <span class="loading-spinner" id="spinner" style="display: none;"></span> | |
| </button> | |
| <!-- حالة التحميل --> | |
| <div class="status-box" id="status"></div> | |
| <!-- نتيجة التحميل --> | |
| <div id="result"></div> | |
| <!-- أمثلة لروابط Sora --> | |
| <div class="examples"> | |
| <h4>📋 روابط تجريبية:</h4> | |
| <div class="example-buttons"> | |
| <button class="example-btn" onclick="fillExample('https://sora.chatgpt.com/p/s_6902318491e88191893d935b08d8c428')"> | |
| رابط تجريبي 1 | |
| </button> | |
| <button class="example-btn" onclick="fillExample('https://sora.chatgpt.com/p/s_6902318491e88191893d935b08d8c429')"> | |
| رابط تجريبي 2 | |
| </button> | |
| <button class="example-btn" onclick="fillExample('https://sora.chatgpt.com/p/s_6902318491e88191893d935b08d8c430')"> | |
| رابط تجريبي 3 | |
| </button> | |
| </div> | |
| </div> | |
| <footer> | |
| جميع الحقوق محفوظة • تم التطوير باستخدام API متخصص | |
| </footer> | |
| </div> | |
| <script> | |
| // مفتاح API الخاص بك | |
| const API_KEY = "FZ7sfbEcbx5wndSHdmzhAsb3mfOPZgUM9eHTM9JYuDFnwrDQ_skT5EnBWgVv7sAUr9i0_a2xdqM"; | |
| const API_URL = "https://savesora.com/api/v1/download"; | |
| async function downloadVideo() { | |
| const videoUrl = document.getElementById('video-url').value.trim(); | |
| const downloadBtn = document.getElementById('downloadBtn'); | |
| const spinner = document.getElementById('spinner'); | |
| const statusEl = document.getElementById('status'); | |
| const resultEl = document.getElementById('result'); | |
| if (!videoUrl) { | |
| showStatus('الرجاء إدخال رابط الفيديو', 'error'); | |
| return; | |
| } | |
| // التحقق من صحة الرابط | |
| if (!videoUrl.includes('sora.chatgpt.com') && !videoUrl.includes('sora.com')) { | |
| showStatus('الرابط غير صحيح - يجب أن يكون رابط فيديو Sora', 'error'); | |
| return; | |
| } | |
| // تغيير حالة الزر | |
| downloadBtn.disabled = true; | |
| spinner.style.display = 'inline-block'; | |
| showStatus('جاري معالجة الرابط...', 'info'); | |
| resultEl.innerHTML = ''; | |
| try { | |
| console.log('جاري الاتصال بـ API...'); | |
| // استدعاء API باستخدام المفتاح | |
| const response = await fetch(API_URL, { | |
| method: 'POST', | |
| headers: { | |
| 'Content-Type': 'application/json', | |
| }, | |
| body: JSON.stringify({ | |
| api_key: API_KEY, | |
| video_url: videoUrl | |
| }) | |
| }); | |
| console.log('حالة الاستجابة:', response.status); | |
| const data = await response.json(); | |
| console.log('بيانات الاستجابة:', data); | |
| if (!response.ok) { | |
| throw new Error(data.message || `خطأ في الخادم: ${response.status}`); | |
| } | |
| // التحقق من وجود رابط التحميل | |
| if (data.download_url || data.url) { | |
| const downloadUrl = data.download_url || data.url; | |
| const filename = data.filename || `sora_video_${Date.now()}.mp4`; | |
| showStatus('✅ تمت المعالجة بنجاح!', 'success'); | |
| // عرض نتيجة التحميل | |
| resultEl.innerHTML = ` | |
| <div class="result-box"> | |
| <div class="video-info"> | |
| <p><strong>اسم الملف:</strong> ${filename}</p> | |
| <p><strong>حالة:</strong> جاهز للتحميل</p> | |
| </div> | |
| <a href="${downloadUrl}" class="download-link" target="_blank" rel="noopener noreferrer"> | |
| ⬇️ اضغط لتحميل الفيديو | |
| </a> | |
| <button class="copy-btn" onclick="copyToClipboard('${downloadUrl}')"> | |
| 📋 نسخ رابط التحميل | |
| </button> | |
| </div> | |
| `; | |
| // تحميل تلقائي بعد ثانية | |
| setTimeout(() => { | |
| window.open(downloadUrl, '_blank'); | |
| }, 1000); | |
| } else { | |
| throw new Error('لم يتم العثور على رابط التحميل في الاستجابة'); | |
| } | |
| } catch (error) { | |
| console.error('خطأ:', error); | |
| showStatus(`❌ خطأ: ${error.message}`, 'error'); | |
| resultEl.innerHTML = ` | |
| <div style="background: #f8f9fa; padding: 15px; border-radius: 10px; margin-top: 10px;"> | |
| <p style="color: #721c24; margin-bottom: 10px;">تفاصيل الخطأ:</p> | |
| <pre style="background: #f1f3f4; padding: 10px; border-radius: 5px; overflow: auto; font-size: 12px; direction: ltr;">${error.stack || error.message}</pre> | |
| </div> | |
| `; | |
| } finally { | |
| // إعادة الزر لحالته الطبيعية | |
| downloadBtn.disabled = false; | |
| spinner.style.display = 'none'; | |
| } | |
| } | |
| function showStatus(message, type) { | |
| const statusEl = document.getElementById('status'); | |
| statusEl.textContent = message; | |
| statusEl.className = `status-box ${type}`; | |
| statusEl.style.display = 'block'; | |
| } | |
| function fillExample(url) { | |
| document.getElementById('video-url').value = url; | |
| // اختياري: تشغيل التحميل تلقائياً | |
| // downloadVideo(); | |
| } | |
| function copyToClipboard(text) { | |
| navigator.clipboard.writeText(text).then(() => { | |
| alert('✅ تم نسخ الرابط!'); | |
| }).catch(() => { | |
| alert('❌ فشل النسخ، يمكنك نسخ الرابط يدوياً'); | |
| }); | |
| } | |
| // تحميل بالضغط على Enter | |
| document.getElementById('video-url').addEventListener('keypress', (e) => { | |
| if (e.key === 'Enter') { | |
| downloadVideo(); | |
| } | |
| }); | |
| // التحقق من صحة المفتاح عند تحميل الصفحة | |
| (function testAPI() { | |
| console.log('✅ API Key محمل وجاهز'); | |
| console.log('🔑 المفتاح:', API_KEY.substring(0, 20) + '...'); | |
| })(); | |
| </script> | |
| </body> | |
| </html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment