5c496277f2432aeb9fe09ffceb61017520d073c7
- socket.ts: ContentRealtimeEvent, CacheRealtimeEvent, MetricsRealtimeEvent
tipleri eklendi; emitContentEvent / emitCacheEvent / emitMetricsEvent
fonksiyonları ile tüm istemcilere broadcast desteği getirildi.
emitJobCompleted imzası GetInfoResponse + DataSource ile güçlendirildi.
- auth.middleware.ts: require() tabanlı env erişimi static import'a
dönüştürüldü; admin-only endpointler için adminOnlyMiddleware eklendi
(X-API-Key !== API_KEY_ADMIN → 403).
- cache.service.ts: set / delete / clearAll işlemlerinden sonra
emitCacheEvent çağrısı eklenerek cache mutasyonları anlık yayınlanıyor.
- content.service.ts: create / update / delete sonrasında emitContentEvent
çağrısı eklenerek DB yazımları Socket.IO üzerinden duyuruluyor.
- job.service.ts: async ve sync akışa MetricsService entegrasyonu eklendi;
cache hit/miss ve kaynak (cache/database/netflix) sayaçları her işlemde
artırılıyor.
- types/index.ts: AdminOverviewResponse ve AdminActionResponse tipleri
merkezi olarak tanımlandı.
- admin.service.ts (yeni): getOverview, clearCache, warmupCacheFromDatabase,
retryFailedJobs, refreshStaleContent operasyonları implement edildi.
Redis pipeline ile TTL/boyut analizi ve DB metrikleri paralel toplanıyor.
- metrics.service.ts (yeni): Redis hash tabanlı cache hit/miss ve kaynak
sayaçları; her artışta MetricsRealtimeEvent yayınlanıyor.
- api.routes.ts: Admin endpointleri eklendi:
GET /api/admin/overview
POST /api/admin/cache/clear
POST /api/admin/cache/warmup
POST /api/admin/jobs/retry-failed
POST /api/admin/content/refresh-stale
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%