# ملخص نظام تحميل الميديا - السوشيال ميديا

## ✅ آلية عمل النظام

### 1. تحميل الصور (Images)
**المجلد**: `backend/upload/`

```php
// الصور تُحمل من attachments
foreach ($attachments as $index => $attachment) {
    $filename = $tweetId . '_' . ($index + 1) . '.jpg';
    // تحميل في: backend/upload/
    saveFile($fileData, $uploads_dir, $filename);
    $images[] = $filename;
}
```

**مثال**:
- البوست ID: `2020913082277691811`
- الصور المحملة:
  - `2020913082277691811_1.jpg`
  - `2020913082277691811_2.jpg`
  - `2020913082277691811_3.jpg`

**الحقل في قاعدة البيانات**:
- `photo`: أول صورة فقط → `2020913082277691811_1.jpg`
- `attachments`: جميع الصور بصيغة JSON

---

### 2. تحميل الفيديوهات (Videos)
**المجلد**: `backend/upload_media/`

```php
// الفيديو يُستخرج من TwitSave API
$videoUrl = getTwitterVideoUrl($tweetUrl);
// مثال: https://video.twimg.com/amplify_video/.../vid/avc1/1080x1920/xxx.mp4

$filename = $tweetId . '_video.mp4';
// تحميل في: backend/upload_media/
saveFile($videoData, $media_dir, $filename);
```

**مثال**:
- البوست ID: `2020913082277691811`
- الفيديو المحمل: `2020913082277691811_video.mp4`
- الحجم: 12.47 MB

**الحقل في قاعدة البيانات**:
- `video_url`: اسم ملف الفيديو → `2020913082277691811_video.mp4`

---

## 📊 أنواع المحتوى (content_type)

### نوع 1: صورة واحدة
```php
content_type = 1
photo = '2020xxx_1.jpg'
attachments = '[{"url":"https://..."}]'
video_url = ''
```

### نوع 6: معرض صور (جاليري)
```php
content_type = 6
photo = '2020xxx_1.jpg'  // الصورة الأولى
attachments = '[{"url":"https://..."},{"url":"https://..."},{"url":"https://..."}]'
video_url = ''
```

### نوع 10: فيديو
```php
content_type = 10
photo = '2020xxx_1.jpg'  // صورة مصغرة (thumbnail) إن وجدت
attachments = '[{"url":"https://..."}]'
video_url = '2020xxx_video.mp4'
```

---

## 🔍 كيف يكتشف النظام الفيديو؟

### الطريقة المحسّنة:

```php
function hasVideo($contentHtml, $attachments = [])
{
    // 1. البحث عن كلمة "video" في المحتوى
    if (stripos($contentHtml, 'video') !== false) {
        return true;
    }
    
    // 2. إذا لم يكن هناك مرفقات لكن فيه رابط pic.twitter.com
    //    (قد يكون فيديو لأن Twitter لا يضعه في attachments)
    if (empty($attachments) && strpos($contentHtml, 'pic.twitter.com') !== false) {
        return true;
    }
    
    return false;
}
```

---

## 🎯 مثال عملي: البوست المطلوب

**الرابط**: https://x.com/RassdNewsN/status/2020913082277691811

### النتيجة:
```
✅ تم العثور على فيديو
✅ رابط الفيديو: https://video.twimg.com/amplify_video/2020911362055000064/vid/avc1/1080x1920/GisgJR1740qC77zm.mp4
✅ تم التحميل: 2020913082277691811_video.mp4
✅ الحجم: 12.47 MB
✅ المجلد: backend/upload_media/
```

### البيانات في قاعدة البيانات:
```php
[
    'post_id' => '2020913082277691811',
    'url' => 'https://x.com/RassdNewsN/status/2020913082277691811',
    'title' => 'عنوان البوست',
    'content_text' => 'النص',
    'content_html' => '<blockquote>...</blockquote>',
    'photo' => '2020913082277691811_1.jpg',  // إن وجدت
    'attachments' => '[...]',
    'video_url' => '2020913082277691811_video.mp4',  // ✅ هنا
    'cat_sources' => 1,
    'content_type' => 10,  // فيديو
    'status' => 1,
    'lang' => 'ar'
]
```

---

## 📁 هيكل المجلدات

```
Rassd26/backend/
├── upload/                    ← الصور (images)
│   ├── 2020xxx_1.jpg
│   ├── 2020xxx_2.jpg
│   └── 2020xxx_3.jpg
│
└── upload_media/              ← الفيديوهات (videos)
    ├── 2020xxx_video.mp4
    └── 2020yyy_video.mp4
```

---

## 🔧 التحسينات المطبقة

### 1. ✅ تحسين كشف الفيديو
- البحث عن كلمة "video" في المحتوى
- فحص المرفقات الفارغة
- تسجيل أفضل للأخطاء

### 2. ✅ تحسين استخراج رابط الفيديو
- إضافة logging مفصل
- التعامل مع أخطاء TwitSave API
- اختيار أعلى جودة متاحة

### 3. ✅ تحسين عملية التحميل
- رسائل واضحة للنجاح/الفشل
- حفظ في المجلد الصحيح (upload_media)
- التحقق من نجاح الحفظ

---

## 🧪 الاختبار

### اختبار يدوي:
```bash
cd /Applications/XAMPP/xamppfiles/htdocs/Rassd26/backend/api
php test_video_download.php
```

### اختبار كامل:
```bash
php x_feeds.php
```

---

## 📝 ملاحظات مهمة

1. **الصور**: تُحمل دائماً في `backend/upload/`
2. **الفيديوهات**: تُحمل دائماً في `backend/upload_media/`
3. **حقل photo**: يحتوي على اسم أول صورة فقط
4. **حقل attachments**: يحتوي على جميع الصور بصيغة JSON
5. **حقل video_url**: يحتوي على اسم ملف الفيديو (ليس رابط كامل)

---

**التاريخ**: 2026-02-09  
**الحالة**: ✅ جاهز ومُختبر
