docs
This commit is contained in:
30
API.md
30
API.md
@@ -87,7 +87,7 @@ YouTube kanalı için transcript feed'i oluşturur.
|
|||||||
| `channel` | string | ⚠️* | Channel handle (@username veya username) |
|
| `channel` | string | ⚠️* | Channel handle (@username veya username) |
|
||||||
| `channel_url` | string | ⚠️* | Full YouTube channel URL |
|
| `channel_url` | string | ⚠️* | Full YouTube channel URL |
|
||||||
| `format` | string | ❌ | Feed formatı: `Atom` (varsayılan) veya `Rss` |
|
| `format` | string | ❌ | Feed formatı: `Atom` (varsayılan) veya `Rss` |
|
||||||
| `max_items` | integer | ❌ | Maksimum transcript sayısı (varsayılan: 10, max: 100, 20'şer batch'ler halinde işlenir) |
|
| `max_items` | integer | ❌ | Maksimum transcript sayısı (varsayılan: 10, max: 100, 5'şer batch'ler halinde işlenir) |
|
||||||
|
|
||||||
\* `channel_id`, `channel` veya `channel_url` parametrelerinden biri zorunludur.
|
\* `channel_id`, `channel` veya `channel_url` parametrelerinden biri zorunludur.
|
||||||
|
|
||||||
@@ -315,7 +315,9 @@ Sadece aşağıdaki formatlar kabul edilir:
|
|||||||
- Minimum: 1
|
- Minimum: 1
|
||||||
- Maksimum: 100
|
- Maksimum: 100
|
||||||
- Varsayılan: 10
|
- Varsayılan: 10
|
||||||
- **Batch İşleme**: 20'şer batch'ler halinde işlenir (YouTube IP blocking önleme için)
|
- **Batch İşleme**: 5'şer batch'ler halinde işlenir (YouTube IP blocking önleme için)
|
||||||
|
- **Batch'ler Arası Bekleme**: 60-90 saniye random bekleme (human-like behavior)
|
||||||
|
- **İstekler Arası Bekleme**: 10-20 saniye random (blocking varsa 30-60 saniye)
|
||||||
- **Veritabanı Kaydı**: Her batch işlendikten sonra hemen veritabanına kaydedilir, böylece sonraki sorgularda görülebilir
|
- **Veritabanı Kaydı**: Her batch işlendikten sonra hemen veritabanına kaydedilir, böylece sonraki sorgularda görülebilir
|
||||||
|
|
||||||
## CORS
|
## CORS
|
||||||
@@ -404,10 +406,11 @@ curl -H "X-API-Key: $API_KEY" \
|
|||||||
2. **Rate Limiting**: Her API key için farklı rate limit tanımlanabilir. Limit aşıldığında 60 saniye beklemeniz gerekir.
|
2. **Rate Limiting**: Her API key için farklı rate limit tanımlanabilir. Limit aşıldığında 60 saniye beklemeniz gerekir.
|
||||||
|
|
||||||
3. **Transcript İşleme**:
|
3. **Transcript İşleme**:
|
||||||
- Transcript'ler 20'şer batch'ler halinde işlenir (YouTube IP blocking önleme için)
|
- Transcript'ler 5'şer batch'ler halinde işlenir (YouTube IP blocking önleme için)
|
||||||
- Her batch işlendikten sonra veritabanına kaydedilir
|
- Her batch işlendikten sonra veritabanına kaydedilir
|
||||||
- `max_items` parametresi ile her istekte işlenecek transcript sayısını kontrol edebilirsiniz (maksimum 100)
|
- `max_items` parametresi ile her istekte işlenecek transcript sayısını kontrol edebilirsiniz (maksimum 100)
|
||||||
- Batch'ler arası 2 saniye bekleme süresi vardır
|
- Batch'ler arası 60-90 saniye random bekleme (human-like behavior)
|
||||||
|
- İstekler arası 10-20 saniye random bekleme (blocking varsa 30-60 saniye)
|
||||||
- Yeni videolar için birkaç dakika gecikme olabilir
|
- Yeni videolar için birkaç dakika gecikme olabilir
|
||||||
|
|
||||||
4. **Format Seçimi**: Atom formatı daha modern ve önerilir. RSS formatı eski RSS reader'lar için uygundur.
|
4. **Format Seçimi**: Atom formatı daha modern ve önerilir. RSS formatı eski RSS reader'lar için uygundur.
|
||||||
@@ -415,10 +418,27 @@ curl -H "X-API-Key: $API_KEY" \
|
|||||||
5. **API Key Güvenliği**: API key'lerinizi güvenli tutun ve asla public repository'lere commit etmeyin.
|
5. **API Key Güvenliği**: API key'lerinizi güvenli tutun ve asla public repository'lere commit etmeyin.
|
||||||
|
|
||||||
6. **Batch İşleme Örneği**:
|
6. **Batch İşleme Örneği**:
|
||||||
- `max_items=50` isteği: 20+20+10 batch'ler halinde işlenir
|
- `max_items=50` isteği: 5+5+5+5+5+5+5+5+5+5 batch'ler halinde işlenir
|
||||||
- Her batch tamamlandığında veritabanına kaydedilir
|
- Her batch tamamlandığında veritabanına kaydedilir
|
||||||
|
- Batch'ler arası 60-90 saniye random bekleme
|
||||||
- Sonraki sorgularda tüm işlenmiş transcript'ler görülebilir
|
- Sonraki sorgularda tüm işlenmiş transcript'ler görülebilir
|
||||||
|
|
||||||
|
7. **FlareSolverr Desteği**:
|
||||||
|
- YouTube bot korumasını aşmak için FlareSolverr kullanılabilir
|
||||||
|
- Config dosyasında `flaresolverr.url` ayarlanabilir
|
||||||
|
- FlareSolverr erişilemezse otomatik olarak normal istek yapılır
|
||||||
|
- Gerçek tarayıcı (headless browser) kullanarak istekler yapılır
|
||||||
|
|
||||||
|
8. **Gerçek Tarayıcı Header'ları**:
|
||||||
|
- 7 farklı tarayıcı User-Agent'ı rotasyon ile kullanılır
|
||||||
|
- Tam tarayıcı header seti (Accept, Sec-Fetch-*, Referer, vb.)
|
||||||
|
- Her istekte random User-Agent seçilir
|
||||||
|
|
||||||
|
9. **Detaylı Loglama**:
|
||||||
|
- Tüm işlemler kategorize edilmiş loglarla takip edilir
|
||||||
|
- Timestamp'li, seviyeli log sistemi (DEBUG, INFO, WARNING, ERROR)
|
||||||
|
- Docker logları ile kolay takip
|
||||||
|
|
||||||
## Destek
|
## Destek
|
||||||
|
|
||||||
Sorularınız için GitHub Issues kullanabilirsiniz.
|
Sorularınız için GitHub Issues kullanabilirsiniz.
|
||||||
|
|||||||
59
README.md
59
README.md
@@ -9,6 +9,9 @@ YouTube video transkriptlerini otomatik olarak çıkarıp, tam metin içeren RSS
|
|||||||
- ✅ **API Key Authentication** - Tüm endpoint'ler API key gerektirir
|
- ✅ **API Key Authentication** - Tüm endpoint'ler API key gerektirir
|
||||||
- ✅ **Güvenlik Önlemleri** - SQL injection, XSS, rate limiting koruması
|
- ✅ **Güvenlik Önlemleri** - SQL injection, XSS, rate limiting koruması
|
||||||
- ✅ **Transcript Cache** - 3 günlük cache ile YouTube IP blocking önleme
|
- ✅ **Transcript Cache** - 3 günlük cache ile YouTube IP blocking önleme
|
||||||
|
- ✅ **FlareSolverr Desteği** - Bot korumasını aşmak için FlareSolverr entegrasyonu
|
||||||
|
- ✅ **Gerçek Tarayıcı Header'ları** - User-Agent rotasyonu ve tam tarayıcı header seti
|
||||||
|
- ✅ **Detaylı Loglama** - Timestamp'li, kategorize edilmiş log sistemi
|
||||||
- ✅ RSS-Bridge entegrasyonu (100+ video desteği)
|
- ✅ RSS-Bridge entegrasyonu (100+ video desteği)
|
||||||
- ✅ Async rate limiting (AIOLimiter)
|
- ✅ Async rate limiting (AIOLimiter)
|
||||||
- ✅ SpaCy ile Sentence Boundary Detection
|
- ✅ SpaCy ile Sentence Boundary Detection
|
||||||
@@ -60,7 +63,7 @@ curl -H "X-API-Key: demo_key_12345" \
|
|||||||
# Channel Handle ile (API key query parametresi)
|
# Channel Handle ile (API key query parametresi)
|
||||||
curl "http://localhost:5000/?channel=@tavakfi&format=Atom&api_key=demo_key_12345"
|
curl "http://localhost:5000/?channel=@tavakfi&format=Atom&api_key=demo_key_12345"
|
||||||
|
|
||||||
# Channel URL ile (max_items: her istekte işlenecek transcript sayısı, default: 10, max: 100, 20'şer batch'ler)
|
# Channel URL ile (max_items: her istekte işlenecek transcript sayısı, default: 10, max: 100, 5'şer batch'ler)
|
||||||
curl -H "X-API-Key: demo_key_12345" \
|
curl -H "X-API-Key: demo_key_12345" \
|
||||||
"http://localhost:5000/?channel_url=https://www.youtube.com/@tavakfi&format=Atom&max_items=50"
|
"http://localhost:5000/?channel_url=https://www.youtube.com/@tavakfi&format=Atom&max_items=50"
|
||||||
```
|
```
|
||||||
@@ -109,6 +112,10 @@ rss_bridge:
|
|||||||
base_url: "https://rss-bridge.org/bridge01"
|
base_url: "https://rss-bridge.org/bridge01"
|
||||||
format: "Atom"
|
format: "Atom"
|
||||||
max_items: 100 # RSS-Bridge'den çekilecek video sayısı (web server'da max_items parametresi farklı)
|
max_items: 100 # RSS-Bridge'den çekilecek video sayısı (web server'da max_items parametresi farklı)
|
||||||
|
|
||||||
|
# FlareSolverr ayarları (YouTube IP blocking önleme için)
|
||||||
|
flaresolverr:
|
||||||
|
url: "http://192.168.1.27:8191/v1" # FlareSolverr API URL'i (devre dışı için null)
|
||||||
```
|
```
|
||||||
|
|
||||||
### Güvenlik Yapılandırması
|
### Güvenlik Yapılandırması
|
||||||
@@ -146,22 +153,66 @@ Her API isteğinde kaç video transcript'inin işleneceğini kontrol eder:
|
|||||||
- **Varsayılan**: 10 transcript
|
- **Varsayılan**: 10 transcript
|
||||||
- **Maksimum**: 100 transcript
|
- **Maksimum**: 100 transcript
|
||||||
- **Kullanım**: `?max_items=50` query parametresi ile belirtilir
|
- **Kullanım**: `?max_items=50` query parametresi ile belirtilir
|
||||||
- **Batch İşleme**: 20'şer batch'ler halinde işlenir (YouTube IP blocking önleme için)
|
- **Batch İşleme**: 5'şer batch'ler halinde işlenir (YouTube IP blocking önleme için)
|
||||||
|
|
||||||
**Önemli Notlar:**
|
**Önemli Notlar:**
|
||||||
- `max_items` parametresi **her istekte işlenecek transcript sayısını** belirler
|
- `max_items` parametresi **her istekte işlenecek transcript sayısını** belirler
|
||||||
- RSS-Bridge'den daha fazla video çekilir (max_items × 2, minimum 50) çünkü bazı videolar transcript'siz olabilir
|
- RSS-Bridge'den daha fazla video çekilir (max_items × 2, minimum 50) çünkü bazı videolar transcript'siz olabilir
|
||||||
- **Batch İşleme**: YouTube IP blocking'i önlemek için 20'şer batch'ler halinde işlenir
|
- **Batch İşleme**: YouTube IP blocking'i önlemek için 5'şer batch'ler halinde işlenir
|
||||||
|
- **Batch'ler Arası Bekleme**: 60-90 saniye random bekleme (human-like behavior)
|
||||||
- **Veritabanı Kaydı**: Her batch işlendikten sonra hemen veritabanına kaydedilir, böylece sonraki sorgularda görülebilir
|
- **Veritabanı Kaydı**: Her batch işlendikten sonra hemen veritabanına kaydedilir, böylece sonraki sorgularda görülebilir
|
||||||
- İlk isteklerde daha az transcript görebilirsiniz; sonraki isteklerde cache'den daha fazla transcript döner
|
- İlk isteklerde daha az transcript görebilirsiniz; sonraki isteklerde cache'den daha fazla transcript döner
|
||||||
|
|
||||||
**Örnek:**
|
**Örnek:**
|
||||||
```bash
|
```bash
|
||||||
# 50 transcript işle (20+20+10 batch'ler halinde)
|
# 50 transcript işle (5+5+5+5+5+5+5+5+5+5 batch'ler halinde)
|
||||||
curl -H "X-API-Key: demo_key_12345" \
|
curl -H "X-API-Key: demo_key_12345" \
|
||||||
"http://localhost:5000/?channel_id=UC9h8BDcXwkhZtnqoQJ7PggA&max_items=50&format=Atom"
|
"http://localhost:5000/?channel_id=UC9h8BDcXwkhZtnqoQJ7PggA&max_items=50&format=Atom"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### FlareSolverr Yapılandırması
|
||||||
|
|
||||||
|
FlareSolverr, YouTube'un bot korumasını aşmak için gerçek tarayıcı kullanır:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# config/config.yaml
|
||||||
|
flaresolverr:
|
||||||
|
url: "http://192.168.1.27:8191/v1" # FlareSolverr API URL'i
|
||||||
|
```
|
||||||
|
|
||||||
|
veya environment variable:
|
||||||
|
```bash
|
||||||
|
export FLARESOLVERR_URL=http://192.168.1.27:8191/v1
|
||||||
|
```
|
||||||
|
|
||||||
|
**FlareSolverr Avantajları:**
|
||||||
|
- Gerçek tarayıcı kullanımı (headless browser)
|
||||||
|
- Bot algılamasını aşma
|
||||||
|
- Cloudflare ve DDoS-GUARD korumasını bypass etme
|
||||||
|
- Otomatik fallback: FlareSolverr erişilemezse normal istek yapılır
|
||||||
|
|
||||||
|
### Gerçek Tarayıcı Header'ları
|
||||||
|
|
||||||
|
Sistem, gerçek tarayıcı gibi görünmek için:
|
||||||
|
- **User-Agent Rotasyonu**: 7 farklı tarayıcı User-Agent'ı (Chrome, Firefox, Safari, Edge)
|
||||||
|
- **Tam Header Seti**: Accept, Accept-Language, Sec-Fetch-*, Referer, vb.
|
||||||
|
- **Her İstekte Random**: Her istekte farklı User-Agent seçilir
|
||||||
|
|
||||||
|
### Detaylı Loglama
|
||||||
|
|
||||||
|
Sistem, tüm işlemleri kategorize edilmiş loglarla takip eder:
|
||||||
|
|
||||||
|
- **`[RATE_LIMIT]`**: Rate limiting ve bekleme süreleri
|
||||||
|
- **`[TRANSCRIPT]`**: Transcript çıkarım işlemleri
|
||||||
|
- **`[PROCESS]`**: Genel işlem akışı
|
||||||
|
- **`[BATCH]`**: Batch işleme bilgileri
|
||||||
|
- **`[VIDEO]`**: Video seviyesi işlemler
|
||||||
|
- **`[CACHE]`**: Cache kontrolleri
|
||||||
|
- **`[FLARESOLVERR]`**: FlareSolverr istekleri
|
||||||
|
- **`[HEADERS]`**: Header yönetimi
|
||||||
|
|
||||||
|
Log formatı: `YYYY-MM-DD HH:MM:SS | LEVEL | MODULE | MESSAGE`
|
||||||
|
|
||||||
## Proje Yapısı
|
## Proje Yapısı
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -84,9 +84,23 @@ YouTube video transkriptlerini otomatik olarak çıkarıp, tam metin içeren RSS
|
|||||||
- **Retry-After Header**: 429 hatalarında `Retry-After` header'ını kullanma
|
- **Retry-After Header**: 429 hatalarında `Retry-After` header'ını kullanma
|
||||||
- Dinamik bekleme süresi (statik delay yerine)
|
- Dinamik bekleme süresi (statik delay yerine)
|
||||||
- Exponential backoff mekanizması
|
- Exponential backoff mekanizması
|
||||||
|
- **FlareSolverr Desteği**: Bot korumasını aşmak için FlareSolverr entegrasyonu
|
||||||
|
- FlareSolverr API üzerinden istek yapma
|
||||||
|
- Gerçek tarayıcı (headless browser) kullanımı
|
||||||
|
- Otomatik fallback: FlareSolverr erişilemezse normal istek
|
||||||
|
- **Gerçek Tarayıcı Header'ları**: Bot algılamasını önlemek için
|
||||||
|
- User-Agent rotasyonu (7 farklı tarayıcı)
|
||||||
|
- Tam tarayıcı header seti (Accept, Sec-Fetch-*, Referer, vb.)
|
||||||
|
- Her istekte random User-Agent seçimi
|
||||||
|
- **Detaylı Loglama**: Kategorize edilmiş log sistemi
|
||||||
|
- Timestamp'li, seviyeli loglar (DEBUG, INFO, WARNING, ERROR)
|
||||||
|
- Log kategorileri: [RATE_LIMIT], [TRANSCRIPT], [FLARESOLVERR], [HEADERS], vb.
|
||||||
|
- **IP Blocking Yönetimi**:
|
||||||
|
- IP blocking tespiti ve dinamik bekleme (5 dakika + block_count × 1 dakika, max 30 dakika)
|
||||||
|
- İstekler arası random bekleme (10-20 saniye, blocking varsa 30-60 saniye)
|
||||||
- Timeout ve retry mekanizmaları
|
- Timeout ve retry mekanizmaları
|
||||||
|
|
||||||
**Süre Tahmini**: 3-4 gün
|
**Süre Tahmini**: 5-6 gün (FlareSolverr ve header desteği ile)
|
||||||
|
|
||||||
### 2.2. Transcript Temizleme ve Dönüştürme (`transcript_cleaner.py`)
|
### 2.2. Transcript Temizleme ve Dönüştürme (`transcript_cleaner.py`)
|
||||||
|
|
||||||
@@ -335,9 +349,14 @@ channel_id = get_channel_id_from_handle(handle_url)
|
|||||||
- **Varsayılan**: 10 transcript
|
- **Varsayılan**: 10 transcript
|
||||||
- **Maksimum**: 100 transcript
|
- **Maksimum**: 100 transcript
|
||||||
- **Kullanım**: `?max_items=50` query parametresi ile belirtilir
|
- **Kullanım**: `?max_items=50` query parametresi ile belirtilir
|
||||||
- **Batch İşleme**: 20'şer batch'ler halinde işlenir (YouTube IP blocking önleme için)
|
- **Batch İşleme**: 5'şer batch'ler halinde işlenir (YouTube IP blocking önleme için)
|
||||||
|
- **Batch'ler Arası Bekleme**: 60-90 saniye random bekleme (human-like behavior)
|
||||||
|
- **İstekler Arası Bekleme**: 10-20 saniye random (blocking varsa 30-60 saniye)
|
||||||
- **Veritabanı Kaydı**: Her batch işlendikten sonra hemen veritabanına kaydedilir
|
- **Veritabanı Kaydı**: Her batch işlendikten sonra hemen veritabanına kaydedilir
|
||||||
- **RSS-Bridge Limit**: max_items × 2 kadar video çekilir (bazı videolar transcript'siz olabilir)
|
- **RSS-Bridge Limit**: max_items × 2 kadar video çekilir (bazı videolar transcript'siz olabilir)
|
||||||
|
- **FlareSolverr Desteği**: Bot korumasını aşmak için FlareSolverr entegrasyonu
|
||||||
|
- **Gerçek Tarayıcı Header'ları**: User-Agent rotasyonu ve tam tarayıcı header seti
|
||||||
|
- **Detaylı Loglama**: Kategorize edilmiş, timestamp'li log sistemi
|
||||||
- [ ] Transaction yönetimi (ACID compliance)
|
- [ ] Transaction yönetimi (ACID compliance)
|
||||||
- [ ] Connection pooling ve error handling
|
- [ ] Connection pooling ve error handling
|
||||||
|
|
||||||
@@ -458,6 +477,11 @@ channel_id = get_channel_id_from_handle(handle_url)
|
|||||||
enable_sbd: true
|
enable_sbd: true
|
||||||
paragraph_length: 3
|
paragraph_length: 3
|
||||||
|
|
||||||
|
# FlareSolverr ayarları (YouTube IP blocking önleme için)
|
||||||
|
flaresolverr:
|
||||||
|
url: "http://192.168.1.27:8191/v1" # FlareSolverr API URL'i (devre dışı için null)
|
||||||
|
# veya environment variable: FLARESOLVERR_URL=http://192.168.1.27:8191/v1
|
||||||
|
|
||||||
rss:
|
rss:
|
||||||
title: "Channel Transcript Feed"
|
title: "Channel Transcript Feed"
|
||||||
description: "Full-text transcript RSS feed"
|
description: "Full-text transcript RSS feed"
|
||||||
@@ -624,12 +648,16 @@ jobs:
|
|||||||
### 8.1. Performans Optimizasyonu
|
### 8.1. Performans Optimizasyonu
|
||||||
|
|
||||||
**Görevler:**
|
**Görevler:**
|
||||||
- [ ] Paralel transcript çıkarımı (çoklu video için)
|
- [x] Paralel transcript çıkarımı (çoklu video için)
|
||||||
- [ ] Caching mekanizması
|
- [x] Caching mekanizması (3 günlük transcript cache)
|
||||||
- [ ] Rate limiting yönetimi
|
- [x] Rate limiting yönetimi (AIOLimiter ile async)
|
||||||
- [ ] Batch processing optimizasyonu
|
- [x] Batch processing optimizasyonu (5'şer batch'ler, 60-90 saniye bekleme)
|
||||||
|
- [x] FlareSolverr entegrasyonu (bot korumasını aşma)
|
||||||
|
- [x] Gerçek tarayıcı header'ları (User-Agent rotasyonu)
|
||||||
|
- [x] IP blocking yönetimi (dinamik bekleme, random delays)
|
||||||
|
- [x] Detaylı loglama sistemi
|
||||||
|
|
||||||
**Süre Tahmini**: 2-3 gün
|
**Süre Tahmini**: 2-3 gün (Tamamlandı)
|
||||||
|
|
||||||
### 8.2. Self-Hosted RSS-Bridge Deployment (Opsiyonel - Rate Limiting Sorunları İçin)
|
### 8.2. Self-Hosted RSS-Bridge Deployment (Opsiyonel - Rate Limiting Sorunları İçin)
|
||||||
|
|
||||||
@@ -670,7 +698,11 @@ jobs:
|
|||||||
### 8.3. Monitoring ve Logging
|
### 8.3. Monitoring ve Logging
|
||||||
|
|
||||||
**Görevler:**
|
**Görevler:**
|
||||||
- [ ] Detaylı logging sistemi
|
- [x] Detaylı logging sistemi
|
||||||
|
- Python `logging` modülü entegrasyonu
|
||||||
|
- Kategorize edilmiş loglar: [RATE_LIMIT], [TRANSCRIPT], [PROCESS], [BATCH], [VIDEO], [CACHE], [FLARESOLVERR], [HEADERS]
|
||||||
|
- Timestamp'li, seviyeli log formatı (DEBUG, INFO, WARNING, ERROR)
|
||||||
|
- Docker logları ile kolay takip
|
||||||
- [ ] Hata bildirimleri (email, webhook)
|
- [ ] Hata bildirimleri (email, webhook)
|
||||||
- [ ] Feed health monitoring
|
- [ ] Feed health monitoring
|
||||||
- [ ] İstatistikler (SQLite sorguları ile):
|
- [ ] İstatistikler (SQLite sorguları ile):
|
||||||
|
|||||||
Reference in New Issue
Block a user