2.9 KiB
2.9 KiB
Netflix Scraper API - Proje Özeti
Proje Hakkında
Netflix Scraper API, Netflix içerik sayfalarından film/dizi bilgilerini çeken bir backend servisidir. URL gönderilerek içerik bilgileri çekilir, önbelleğe alınır ve geri döndürülür.
Neden Oluşturuldu?
- Otomatik İçerik Toplama: Netflix URL'lerinden otomatik olarak içerik bilgisi çekmek
- Performans: Redis cache ile tekrarlayan isteklerde hızlı yanıt
- Kalıcılık: PostgreSQL ile verilerin kalıcı olarak saklanması
- Gerçek Zamanlı: Socket.IO ile canlı ilerleme bildirimleri
Teknoloji Yığını
| Katman | Teknoloji |
|---|---|
| Runtime | Node.js 20+ |
| Framework | Express.js |
| Database | PostgreSQL 16 |
| Cache | Redis 7 |
| Real-time | Socket.IO |
| Scraper | Cheerio |
| ORM | Prisma |
Mimari
┌─────────────────┐
│ Frontend │
│ (Web/Mobile) │
└────────┬────────┘
│ HTTP + API Key
▼
┌─────────────────┐ ┌─────────────┐
│ Express API │────▶│ Redis │
│ (Port 3000) │ │ (Cache) │
└────────┬────────┘ └─────────────┘
│
▼
┌─────────────────┐ ┌─────────────┐
│ Scraper Service │────▶│ PostgreSQL │
│ (Cheerio) │ │ (Data) │
└─────────────────┘ └─────────────┘
Veri Akışı
- İstek Alınır:
POST /api/getinfoendpoint'ine URL gönderilir - Cache Kontrolü: Redis'te veri var mı diye bakılır
- DB Kontrolü: PostgreSQL'de veri var mı diye bakılır
- Scraping: Netflix'ten veri çekilir (cache/DB'de yoksa)
- Kaydetme: Veri DB'ye ve cache'e yazılır
- Yanıt: JSON formatında veri döndürülür
Önemli Kararlar
ADR-001: Cheerio Seçimi
Playwright yerine Cheerio seçildi. Başlangıç için yeterli, daha hafif ve hızlı. Gerekirse Playwright'a geçiş yapılabilir.
ADR-002: Hybrid Cache Stratejisi
Cache → DB → Netflix sıralaması ile veri alınır. Bu sayede:
- En hızlı yanıt cache'ten gelir
- Cache'te yoksa DB'den gelir
- İlk istek hariç Netflix'e istek atılmaz
ADR-003: Named API Keys
Her frontend için ayrı API key kullanılır. Bu sayede:
- Hangi frontend'in istek attığı takip edilebilir
- Gerekirse tek bir frontend'in erişimi kapatılabilir
Güncellemeler
| Tarih | Güncelleme |
|---|---|
| 2025-02-27 | Proje oluşturuldu |