c0841aab20fedf53c5726371368f6cb875566300
- index.css: IBM Plex Sans + Bricolage Grotesque font'ları import edildi;
CSS custom property sistemi (--bg-base, --accent-main vb.) tanımlandı;
body'ye fixed radial gradient + grid overlay arka plan eklendi.
- main.tsx: MantineProvider tema güncellendi — IBM Plex Sans/Bricolage
Grotesque font ailesi, responsive heading boyutları, özel radius/shadow
değerleri ayarlandı.
- App.css: Gereksiz yorum temizlendi, stil yönetimi route-level CSS'e taşındı.
- MoviesPage.tsx (büyük güncelleme):
• Katalog görünümü: film/dizi grid, arama, sıralama, backdrop modal.
• Admin Dashboard görünümü: cache özeti, content istatistikleri, job
durum sayaçları, failed job listesi, cache expiry tablosu, metrics
(hit/miss oranı, kaynak dağılımı).
• Admin aksiyonlar: cache temizleme, cache ısıtma, başarısız job
yeniden kuyruklama, eski içerik yenileme.
• Socket.IO entegrasyonu: content:event dinlenerek katalog anlık
güncelleniyor; metrics:updated ile dashboard metrikleri canlı akıyor.
• Reconnect davranışı: bağlantı kopunca her görünüm kendi snapshot'ını
otomatik yeniliyor.
- movies-page.css (yeni): MoviesPage'e özel kart, backdrop, istatistik
kutusu ve animasyon stilleri.
- vite.config.ts: /socket.io proxy kuralı eklendi (ws: true) — dev
sunucusu üzerinden WebSocket bağlantısı backend'e yönlendiriliyor.
- frontend/.env.example (yeni): VITE_API_BASE_URL, VITE_WEB_API_KEY,
VITE_ADMIN_API_KEY değişken şablonu eklendi.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Netflix Scraper API
Netflix içerik sayfalarından film/dizi bilgilerini çeken yüksek performanslı bir backend API servisi.
Özellikler
- Scraping: Netflix URL'lerinden otomatik içerik bilgisi çekme
- Cache: Redis ile 7 günlük önbellek (yapılandırılabilir)
- Kalıcılık: PostgreSQL ile verilerin kalıcı saklanması
- Real-time: Socket.IO ile canlı ilerleme bildirimleri
- Güvenlik: API Key authentication ve rate limiting
- Docker: Tek komut ile ayağa kalkma
Hızlı Başlangıç
# .env dosyasını oluştur
cp .env.example .env
# API key'leri düzenle
nano .env
# Başlat (tek komut!)
docker compose -f docker-compose.dev.yml up --build
API şu adreste çalışacak: http://localhost:3000
API Kullanımı
İstek Örneği
curl -X POST http://localhost:3000/api/getinfo \
-H "Content-Type: application/json" \
-H "X-API-Key: web-dev-key-change-me" \
-d '{"url": "https://www.netflix.com/tr/title/81616256"}'
Yanıt Örneği
{
"success": true,
"data": {
"title": "Hayata Röveşata Çeken Adam",
"year": 2022,
"plot": "Dünyaya karşı duyduğu öfke...",
"genres": ["18+", "Komedi"],
"cast": ["Tom Hanks", "Mariana Treviño", "Rachel Keller"],
"backdrop": "https://occ-0-7335-..."
}
}
Endpoints
| Method | Endpoint | Açıklama |
|---|---|---|
GET |
/health |
Sağlık kontrolü |
GET |
/ready |
Bağımlılık kontrolü |
POST |
/api/getinfo |
İçerik bilgisi getir |
POST |
/api/getinfo/async |
Asenkron job oluştur |
GET |
/api/jobs/:jobId |
Job durumu sorgula |
Socket.IO Events
| Event | Yön | Açıklama |
|---|---|---|
job:subscribe |
Client → Server | Job'a abone ol |
job:progress |
Server → Client | İlerleme güncellemesi |
job:completed |
Server → Client | İşlem tamamlandı |
job:error |
Server → Client | Hata oluştu |
Environment Değişkenleri
| Değişken | Açıklama | Varsayılan |
|---|---|---|
PORT |
Sunucu portu | 3000 |
NODE_ENV |
Ortam | development |
POSTGRES_* |
PostgreSQL ayarları | - |
REDIS_* |
Redis ayarları | - |
REDIS_TTL_SECONDS |
Cache süresi | 604800 (7 gün) |
RATE_LIMIT_* |
Rate limit ayarları | - |
API_KEY_* |
API anahtarları | - |
Migration
Migration'lar otomatik olarak container başlatılırken çalışır.
# Manuel migration
docker compose exec app npx prisma migrate deploy
Teknoloji Yığını
| Katman | Teknoloji |
|---|---|
| Runtime | Node.js 20+ |
| Framework | Express.js |
| Database | PostgreSQL 16 |
| Cache | Redis 7 |
| Real-time | Socket.IO 4 |
| Scraper | Cheerio |
| ORM | Prisma |
Proje Yapısı
.
├── src/
│ ├── config/ # Yapılandırma (env, database, redis, socket)
│ ├── middleware/ # Express middleware (auth, rate-limit, validation)
│ ├── routes/ # API rotaları
│ ├── services/ # İş mantığı (scraper, cache, content, job)
│ ├── types/ # TypeScript tipleri
│ └── utils/ # Yardımcı fonksiyonlar
├── prisma/
│ ├── schema.prisma # Veritabanı şeması
│ └── seed.ts # Başlangıç verileri
├── doc/
│ ├── overview.md # Proje özeti
│ ├── api.md # API dokümantasyonu
│ ├── ops.md # Operasyon notları
│ └── socket-events.md # Socket.IO events
├── docker-compose.dev.yml
├── docker-compose.yml
├── Dockerfile
└── package.json
Dokümantasyon
- Proje Özeti:
doc/overview.md - API Dokümantasyonu:
doc/api.md - Operasyon:
doc/ops.md - Socket Events:
doc/socket-events.md
Geliştirme
Local Development
# Bağımlılıkları yükle
npm install
# Prisma client oluştur
npx prisma generate
# Development modda çalıştır
npm run dev
Production Build
npm run build
npm start
Güvenlik
- API Key Authentication: Tüm istekler API key gerektirir
- Rate Limiting: Dakikada max 30 istek (yapılandırılabilir)
- Non-root Container: Production container'ları root olmayan kullanıcı ile çalışır
- Input Validation: Tüm girdiler Zod ile doğrulanır
Lisans
MIT
Description
Languages
TypeScript
69%
Swift
24.2%
CSS
4.4%
Shell
0.9%
Dockerfile
0.9%
Other
0.6%