# Otomatik MOBESE Kamera Çekme Sistemi

## 🎯 Özellikler

Bu sistem, İBB'nin İstanbul'u Seyret sitesinden ve bilinen URL pattern'lerinden otomatik olarak MOBESE kameralarını çeker.

### Nasıl Çalışır?

1. **Web Scraping**: İstanbul'u Seyret sitesinden HTML/JavaScript parse ederek kamera URL'lerini bulur
2. **Pattern-Based Generation**: Bilinen URL pattern'lerinden kamera listesi oluşturur
3. **URL Testing** (Opsiyonel): URL'lerin çalışıp çalışmadığını test eder
4. **Toplu Ekleme**: Bulunan kameraları backend veritabanına toplu olarak ekler

## 🚀 Kullanım

### 1. Admin Panelden (En Kolay)

1. Admin Paneline giriş yap
2. MOBESE Kamera Yönetimi bölümüne git
3. **"Otomatik Çek"** butonuna tıkla
4. İki seçenek var:
   - **URL'leri Test Etmeden Çek** (Hızlı) - Pattern'lerden ve web scraping'den kameraları bulur, test etmeden gösterir
   - **URL'leri Test Ederek Çek** (Yavaş) - Her URL'yi test eder, sadece çalışanları gösterir
5. Bulunan kameraları görüntüle
6. **"Toplu Ekle"** butonuna tıklayarak tümünü veritabanına ekle

### 2. API Endpoint'lerden

#### Kamera Çekme
```bash
POST /api/mobese/admin/scrape?test=false
Authorization: Bearer {admin_token}
```

**Query Parameters**:
- `test=true`: URL'leri test et (yavaş ama daha güvenilir)
- `test=false`: Test etme, sadece pattern'lerden oluştur (hızlı)

**Response**:
```json
{
  "success": true,
  "data": {
    "total": 20,
    "valid": 18,
    "invalid": 2,
    "cameras": [...],
    "invalidCameras": [...]
  }
}
```

#### Toplu Ekleme
```bash
POST /api/mobese/admin/bulk-add
Authorization: Bearer {admin_token}
Content-Type: application/json

{
  "cameras": [...],
  "testUrls": false
}
```

## 📋 Bulunan URL Pattern'leri

### Pattern 1: İBB Livestream (En Kalıcı)
```
https://livestream.ibb.gov.tr/cam_{kategori}/{lokasyon}.stream/playlist.m3u8
```

**Kategoriler**:
- `cam_turistik` - Turistik kameralar
- `cam_trafik` - Trafik kameraları

**Bilinen Lokasyonlar**:
- `b_anadoluhisari` - Anadoluhisarı (Beykoz)
- `b_rumelihisari` - Rumelihisarı (Sarıyer)
- `b_pierreloti` - Pierre Loti (Beyoğlu)
- `b_galata` - Galata Kulesi (Beyoğlu)
- `b_eminonu` - Eminönü (Fatih)
- `b_beyazit` - Beyazıt (Fatih)
- `b_sultanahmet` - Sultanahmet (Fatih)
- `b_kadikoy` - Kadıköy (Kadıköy)
- `b_uskudar` - Üsküdar (Üsküdar)
- `b_besiktas` - Beşiktaş (Beşiktaş)

### Pattern 2: İGA Havaalanı
```
https://cdn-iga.yayin.com.tr/igaistanbul/{location}/playlist.m3u8?anahtar=...
```

**Lokasyonlar**:
- `apron` - Apron kamerası

## 🔧 Yeni Pattern Ekleme

`backend/services/mobeseScraperService.js` dosyasındaki `generateCamerasFromPattern()` fonksiyonunu düzenle:

```javascript
const patterns = [
  {
    category: 'turistik',
    locations: [
      { 
        code: 'yeni_lokasyon_kodu', 
        name: 'Yeni Lokasyon Adı', 
        district: 'İlçe', 
        lat: 41.0000, 
        lng: 29.0000 
      },
      // ... daha fazla lokasyon
    ],
    urlTemplate: (code) => `${LIVESTREAM_BASE_URL}/cam_turistik/${code}.stream/playlist.m3u8`,
  },
  // ... daha fazla kategori
];
```

## ⚠️ Önemli Notlar

1. **İBB'nin Resmi API'si Yok**: İBB kameralar için resmi bir API sağlamıyor, bu yüzden web scraping kullanıyoruz
2. **URL'ler Değişebilir**: Bazı URL'ler zamanla değişebilir, düzenli kontrol edin
3. **Rate Limiting**: Çok fazla istek atmayın, rate limiting'e takılabilirsiniz
4. **Yasal Uyarı**: Sadece kamuya açık kameraları kullanın
5. **Duplicate Kontrolü**: Toplu ekleme yapılırken aynı `streamUrl`'e sahip kameralar atlanır

## 🐛 Sorun Giderme

### Kamera Bulunamıyor
- İstanbul'u Seyret sitesinin HTML yapısı değişmiş olabilir
- `scrapeCameraListFromWebsite()` fonksiyonunu güncellemeniz gerekebilir

### URL'ler Çalışmıyor
- URL pattern'leri değişmiş olabilir
- Network tab'dan yeni pattern'leri bulun ve `mobeseScraperService.js`'i güncelleyin

### Rate Limiting Hatası
- İstekler arasında bekleme süresini artırın (`setTimeout` değerlerini artırın)
- Daha az URL'yi aynı anda test edin

## 📝 Geliştirme Notları

- Web scraping için `cheerio` kütüphanesi kullanılıyor
- URL testi için `axios` kullanılıyor
- Pattern-based generation sayesinde bilinen lokasyonlardan hızlıca kamera oluşturuluyor
- Admin panelden tek tıkla tüm işlem yapılabiliyor

