Critical bug: CSS selector pipeline stopped at first match even if element
had 0-94 chars of text (empty <article> tags on wnp.pl, polskieradio24.pl,
portalkomunalny.pl, weekendfm.pl). Now skips elements with <200 chars text.
Added domain-specific selectors for: radiogdansk.pl (Elementor),
nadmorski24.pl (Joomla), portalkomunalny.pl, weekendfm.pl, globenergia.pl,
polskieradio24.pl.
Added 9 domains to SKIP_DOMAINS: wnp.pl (paywall), tvp.pl/tvp.info (JS SPA),
gp24.pl/strefaobrony.pl/dziennikbaltycki.pl (Cloudflare), pap.pl,
obserwatorfinansowy.pl, cire.pl (block bots).
Moved 'article' lower in default selectors to avoid matching empty tags first.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Articles with only 100-458 chars were passing validation but contained
metadata/teasers instead of full article text, causing all knowledge
extraction to fail ("Treść za krótka do ekstrakcji"). The 500-char
minimum better aligns with the 200-token chunking requirement (~800 chars).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Admin was confused by red "Błędy: 2" when scraping/extraction had
expected issues (403, content too short). Changes:
- All scraper/extractor messages translated to Polish
- HTTP 403/404/429 get specific descriptive messages
- Expected failures shown as yellow "Pominięte" instead of red "Błędy"
- "No chunks created" → "Treść za krótka do ekstrakcji"
- Summary label "Błędy" → "Pominięte"
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Zmieniono kolejność metod dekodowania - googlenewsdecoder jest teraz
używany jako pierwsza metoda zamiast ostatniej. Poprzednia kolejność
powodowała wpadanie w pętlę z consent.google.com i wyczerpanie max_depth
przed wywołaniem działającej biblioteki.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Dodano Server-Sent Events (SSE) dla śledzenia postępu w czasie rzeczywistym:
- Scraping treści artykułów
- Ekstrakcja wiedzy przez Gemini AI
- Generowanie embeddingów
Funkcje:
- Modal z paskiem postępu i statystykami
- Live log operacji z kolorowaniem statusów
- Podsumowanie na zakończenie (sukces/błędy/czas)
- Możliwość zamknięcia modalu po zakończeniu
Zmiany techniczne:
- 3 nowe SSE endpointy (/stream)
- ProgressUpdate dataclass w scraperze
- Callback pattern w batch_scrape, batch_extract, generate_chunk_embeddings
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Dodano funkcję decode_google_news_url() z 3 metodami dekodowania:
1. Base64 decoding (preferowana, bez HTTP request)
2. HTTP redirect following
3. googlenewsdecoder library jako fallback
- Scraper automatycznie dekoduje URL-e Google News przed scrapowaniem
- Zaktualizowano news.url i news.source_domain po dekodowaniu
- Dodano news.google.com do SKIP_DOMAINS (wymaga dekodowania)
- Dodano googlenewsdecoder do requirements.txt
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- wyborcza.pl - paywall Gazety Wyborczej
- rp.pl - paywall Rzeczpospolitej
- wykop.pl - agregator bez oryginalnej treści
- reddit.com - agregator
Te domeny zwracają cookie dialog zamiast treści artykułów
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>