From dfa68ba665819286975c8f2ea02ad21c2b14884b Mon Sep 17 00:00:00 2001 From: salvacybersec Date: Thu, 13 Nov 2025 06:37:40 +0300 Subject: [PATCH] debug --- app.py | 2 +- src/transcript_extractor.py | 38 ++++++++++++++++++++++++++++++++++++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/app.py b/app.py index 8ac7cab..2b261e7 100644 --- a/app.py +++ b/app.py @@ -8,7 +8,7 @@ from datetime import datetime # Logging konfigürasyonu logging.basicConfig( - level=logging.INFO, + level=logging.DEBUG, # DEBUG modu açıldı - detaylı loglama için format='%(asctime)s | %(levelname)-8s | %(name)s | %(message)s', datefmt='%Y-%m-%d %H:%M:%S', handlers=[ diff --git a/src/transcript_extractor.py b/src/transcript_extractor.py index 56641a8..dd9d597 100644 --- a/src/transcript_extractor.py +++ b/src/transcript_extractor.py @@ -141,6 +141,25 @@ class TranscriptExtractor: return {} logger.info(f"[FLARESOLVERR] ✅ İstek başarılı: HTTP {status_code}, {len(html)} byte içerik") + + # Debug: HTML içeriğinin ilk 500 karakterini logla + logger.debug(f"[FLARESOLVERR] HTML önizleme (ilk 500 karakter): {html[:500]}") + + # Debug: HTML'de transcript ile ilgili pattern'leri kontrol et + import re + if 'ytInitialPlayerResponse' in html or 'ytInitialData' in html: + logger.debug(f"[FLARESOLVERR] ✅ YouTube player response bulundu HTML'de") + else: + logger.warning(f"[FLARESOLVERR] ⚠️ YouTube player response bulunamadı HTML'de") + + # Debug: Transcript endpoint URL'lerini ara + transcript_urls = re.findall(r'https?://[^"\s]+timedtext[^"\s]*', html) + if transcript_urls: + logger.debug(f"[FLARESOLVERR] ✅ Transcript URL'leri bulundu: {len(transcript_urls)} adet") + logger.debug(f"[FLARESOLVERR] İlk transcript URL: {transcript_urls[0][:100]}...") + else: + logger.warning(f"[FLARESOLVERR] ⚠️ Transcript URL'leri bulunamadı HTML'de") + return FlareSolverrResponse(status_code, html, headers, url) else: error = result.get('message', 'Unknown error') @@ -192,8 +211,22 @@ class TranscriptExtractor: def json(self): import json try: + # Debug: JSON parse edilmeye çalışılan içeriği logla + logger.debug(f"[FLARESOLVERR] JSON parse deneniyor, içerik tipi: {type(self.text)}, uzunluk: {len(self.text)}") + logger.debug(f"[FLARESOLVERR] İçerik önizleme (ilk 200 karakter): {self.text[:200]}") + + # Eğer HTML ise JSON parse etme + if self.text.strip().startswith('<') or 'html' in self.headers.get('content-type', '').lower(): + logger.warning(f"[FLARESOLVERR] ⚠️ HTML içerik JSON olarak parse edilmeye çalışılıyor, boş dict döndürülüyor") + return {} + return json.loads(self.text) - except: + except json.JSONDecodeError as e: + logger.error(f"[FLARESOLVERR] ❌ JSON parse hatası: {e}") + logger.error(f"[FLARESOLVERR] İçerik (ilk 500 karakter): {self.text[:500]}") + return {} + except Exception as e: + logger.error(f"[FLARESOLVERR] ❌ JSON parse beklenmeyen hata: {type(e).__name__} - {str(e)}") return {} def raise_for_status(self): @@ -345,11 +378,14 @@ class TranscriptExtractor: self._check_rate_limit() logger.debug(f"[TRANSCRIPT] YouTube Transcript API çağrısı yapılıyor: video_id={video_id} (Deneme: {attempt + 1}/{max_retries + 1})") + logger.debug(f"[TRANSCRIPT] FlareSolverr durumu: use_flaresolverr={self.use_flaresolverr}, available={getattr(self, 'flaresolverr_available', False)}") # YouTube Transcript API kullanımı (yeni versiyon) # API instance oluştur ve fetch() metodunu kullan api = YouTubeTranscriptApi() + logger.debug(f"[TRANSCRIPT] API instance oluşturuldu, fetch() çağrılıyor...") fetched_transcript = api.fetch(video_id, languages=languages) + logger.debug(f"[TRANSCRIPT] fetch() başarılı, to_raw_data() çağrılıyor...") # Eski formatı döndürmek için to_raw_data() kullan # Format: [{'text': '...', 'start': 1.36, 'duration': 1.68}, ...]