diff --git a/.dedupe/index.sqlite b/.dedupe/index.sqlite new file mode 100644 index 0000000..d2fa618 Binary files /dev/null and b/.dedupe/index.sqlite differ diff --git a/.dedupe/report.csv b/.dedupe/report.csv new file mode 100644 index 0000000..8056de2 --- /dev/null +++ b/.dedupe/report.csv @@ -0,0 +1 @@ +group_id,canonical_path,dup_path,dup_size_bytes diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..fd3ded5 --- /dev/null +++ b/.env.example @@ -0,0 +1,16 @@ +# Copy to .env and fill in values + +# WordPress base URL (required) +WP_BASE_URL=https://your-site.tld + +# Authentication: prefer WP_AUTH_BASE64 OR use USERNAME+PASSWORD (Application Password) +# Example to generate: base64(username:application_password) +WP_AUTH_BASE64= + +# Alternatively provide username and application password +WP_USERNAME= +WP_PASSWORD= + +# OpenAI API key (optional, enables rewrite) +OPENAI_API_KEY= + diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..af3394f --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,34 @@ +name: 🚀 Deploy to Hetzner + +on: + push: + branches: [main] + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Deploy via SSH + uses: appleboy/ssh-action@v1.0.0 + with: + host: 88.99.209.207 + username: oliver + key: ${{ secrets.HETZNER_SSH_KEY }} + port: 22 + envs: APP_ADMIN_USERNAME,APP_ADMIN_PASSWORD + script: | + cd /opt/rss-news + git pull origin main + source .venv/bin/activate + pip install -r requirements.txt + pip install -r backend/requirements.txt || true + sudo systemctl restart rss-news-api + sleep 3 + BASE_URL="https://news.vanityontour.de" APP_ADMIN_USERNAME="${APP_ADMIN_USERNAME}" APP_ADMIN_PASSWORD="${APP_ADMIN_PASSWORD}" bash scripts/smoke_backend.sh + env: + APP_ADMIN_USERNAME: ${{ secrets.NEWS_APP_ADMIN_USERNAME }} + APP_ADMIN_PASSWORD: ${{ secrets.NEWS_APP_ADMIN_PASSWORD }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..1d627db --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,39 @@ +name: Backend Tests + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + backend-tests: + runs-on: ubuntu-latest + timeout-minutes: 15 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r backend/requirements.txt + pip install -r backend/requirements-test.txt + + - name: Run tests with coverage + env: + APP_DB_PATH: /tmp/rss_news_test.db + run: | + pytest backend/tests --cov=backend/app --cov-report=term-missing --cov-report=xml + + - name: Upload coverage artifact + uses: actions/upload-artifact@v4 + with: + name: coverage-xml + path: coverage.xml diff --git a/.gitignore b/.gitignore index d714f32..aac3a2f 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,5 @@ internal/start.sh internal/copy_files.sh internal/_line.txt internal/push_commit.txt +internal/git.sh +CLAUDE.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..7251de6 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,40 @@ +# Repository Guidelines + +## Project Structure & Module Organization +- `app.py`: Streamlit UI (entry point for the app). +- `main.py`: RSS fetching, rewrite, and WordPress upload logic. +- `utils/`: Helpers (image/article extraction, WP uploader, UI helpers). +- `pages/`: Streamlit pages (e.g., `01_feed_manager.py`, `log_viewer.py`). +- `data/`: JSON state (`articles.json`, `feeds.json`). +- `logs/`: Runtime logs (`rss_tool.log`). +- `docs/`: Project notes (e.g., roadmap). +- `__version__.py`: Version string written by `versioning.py`. + +## Build, Test, and Development Commands +- Create env: `python -m venv .venv && source .venv/bin/activate` +- Install deps: `pip install -r requirements.txt` +- Run app: `streamlit run app.py` +- Version bump: `python versioning.py --level patch --push` (updates `__version__.py`, prepares `CHANGELOG.md`, creates tag; see `--help`). + +## Coding Style & Naming Conventions +- Python 3.10+, PEP 8, 4-space indentation, type hints where practical. +- Modules and functions: `snake_case`; classes: `PascalCase`. +- Streamlit pages: numeric prefix for order, e.g., `pages/01_feature.py`. +- Keep functions small and pure in `utils/`; isolate I/O in app layers. +- Suggested tools (optional): Black (`black .`) and Ruff (`ruff check .`). + +## Testing Guidelines +- Framework: pytest (recommended). Place tests under `tests/` with `test_*.py`. +- Unit tests for `utils/*`; light integration checks for `main.py` with temporary files. +- Run: `pytest -q`. Add coverage if needed (e.g., `pytest --cov=utils`). +- Test data: avoid mutating files in `data/`; use temp dirs or fixtures. + +## Commit & Pull Request Guidelines +- Commits: imperative mood, concise; examples: `Add feed dedupe`, `Fix WP upload retry`, `Bump version to v1.7.0`. +- PRs: clear description, linked issue, screenshots/GIFs for UI changes, note env variables touched. +- Update `CHANGELOG.md` and bump version via `versioning.py` before release PRs. + +## Security & Configuration Tips +- Required env: `OPENAI_API_KEY`, `WP_BASE_URL`, `WP_USERNAME`, `WP_PASSWORD` or `WP_AUTH_BASE64` (see `.env`). +- Never commit secrets; `.env` is git-ignored. Avoid hardcoded credentials; prefer `os.getenv`. +- Logs and data may contain content; do not commit `logs/` or large `data/` snapshots. diff --git a/CHANGELOG.md b/CHANGELOG.md index 51d1d84..66b7237 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,1017 @@ -## [1.5.2] - 2025-07-09 +## [1.7.1] - 2025-08-24 + +### ✨ Security angepasst + - alle Credentials in die .env Datei verschoben + - beim Start der App werden die Credentials geprüft und beim fehlen entsprechende Meldungen ausgegeben + +--- + +## [1.7.0] - 2025-08-24 + +### Multi-Select & Massenoperationen: + - ✅ Checkboxes für Artikel-Auswahl im "Artikel verwalten" Bereich + - ✅ "Alle auswählen" / "Auswahl aufheben" Buttons + - ✅ Massenoperationen für ausgewählte Artikel: + - Bulk Status-Änderung für mehrere Artikel gleichzeitig + - Bulk Artikel-Umschreibung mit automatischer Status-Verwaltung + - Bulk WordPress-Upload nur für "Process"-Artikel + - Bulk Papierkorb-Funktion + +### Schnellaktionen Integration: + - ✅ Feed-Aktualisierung direkt im Artikel-Tab verfügbar + - ✅ Alle Dashboard-Schnellaktionen in Artikel-Verwaltung integriert + - ✅ Intelligente Anzeige nur relevanter Operationen (z.B. WordPress-Upload nur bei Process-Artikeln) + +### 🔧 Verbesserungen + + - UI/UX: Verbesserte Artikel-Card-Layouts mit Checkbox-Integration + - Workflow: Streamlined Artikel-Management ohne Tab-Wechsel nötig + - Feedback: Detaillierte Statusmeldungen bei Massenoperationen + - Performance: Optimierte Session-State-Verwaltung für Artikel-Auswahl + +### 🏗️ Technische Änderungen + + - Session State Erweiterung um selected_articles Set + - Neue Bulk-Operation-Funktionen in app.py:326-467 + - Überarbeitetes Artikel-Card-Layout mit 3-Spalten-Design + - Integration bestehender WordPress-Upload und Rewrite-Funktionen + +--- + +## [1.6.3] - 2025-08-18 + +### 🔧 Verbesserungen +- **SyleSheet erneut hinzugefügt + - Style wurde bei einem Release leider vergessen + - Style auf DarkMode angepasst + +--- + +## [v1.6.2] - 2025-08-16 + +### 🐛 Kritische Fehlerbehebung + +- **WordPress-Tag-Upload-Fehler behoben:** + - WordPress REST API benötigt Tag-IDs statt Tag-Namen im `tags`-Parameter + - Neue Funktion `_get_or_create_tags()` ermittelt existierende Tag-IDs oder erstellt neue Tags + - Automatische Tag-Erstellung wenn Tags nicht existieren + - Robuste Fehlerbehandlung für Tag-Verarbeitungsfehler + +### 🔧 Verbesserungen + +- **Erweiterte Fehleranalyse:** + - Detaillierte Logging-Ausgaben für Post-Daten bei Fehlern + - Spezielle Behandlung von Tag-Parameter-Fehlern + - JSON-formatierte Debug-Ausgaben für bessere Fehleranalyse + +- **Tag-Management:** + - Suche nach existierenden Tags mit exakter Namensübereinstimmung + - Automatische Erstellung fehlender Tags über WordPress REST API + - Tag-IDs werden korrekt im Post-Daten-Objekt verwendet + - Leere/ungültige Tags werden übersprungen + +### 🛠 Technische Details + +- Tag-Verarbeitung erfolgt vor Post-Erstellung +- WordPress `/wp-json/wp/v2/tags` Endpoint für Tag-Management +- Fallback-Verhalten bei Tag-Erstellungsfehlern +- Verbesserte Logging-Ausgaben für Tag-Operationen + +--- + +## [v1.6.1] - 2025-08-16 + +### 💡 Neue Funktionen + +- **WordPress-Integration** implementiert: + - Vollständige WordPress REST API-Anbindung über `utils/wordpress_uploader.py` + - **Base64-Authentifizierung** mit Authorization Header (wie von WordPress API benötigt) + - Neuer Status "WordPress Pending" für hochgeladene Artikel + - Artikel mit Status "Process" können einzeln oder als Batch zu WordPress hochgeladen werden + - Automatische Duplikatserkennung basierend auf Titel-Übereinstimmung + - Meta-Felder werden gesetzt (RSS-Quelle, Original-Link, Import-Datum, RSS-Artikel-ID) + +- **Erweiterte UI-Funktionen**: + - Neuer Tab "WordPress" mit Verbindungstest und Konfigurationsübersicht + - WordPress-Upload-Buttons in der Artikel-Übersicht (einzeln und global) + - WordPress-Artikel-Statistiken im Dashboard und Statistiken-Tab + - Detaillierte Upload-Ergebnisse mit Erfolgs-/Fehlerstatistiken + - Debug-Modus für Auth-Details (Entwicklung) + +- **Verbesserte Artikel-Verwaltung**: + - WordPress Post ID und Upload-Datum werden in Artikeln gespeichert + - Status-Workflow: New → Rewrite → Process → WordPress Pending → Online + - Anzeige von WordPress-Informationen in der Artikel-Detailansicht + +### 🔧 Verbesserungen + +- **Korrekte WordPress-API-Authentifizierung**: + - Unterstützung für bereitgestellten Base64-Auth-String (`WP_AUTH_BASE64`) + - Fallback auf automatische Base64-Generierung aus Username/Password + - Authorization Header im korrekten Format: `Basic ` + - Erweiterte Debug-Ausgaben für Authentifizierung + +- **Robuste Fehlerbehandlung**: + - Ausführliches Logging für alle WordPress-Operationen inkl. Auth-Details + - Retry-Mechanismus mit exponential backoff bei Netzwerkfehlern + - Detaillierte Fehlermeldungen für verschiedene HTTP-Status-Codes (401, 403, etc.) + - Verbindungstest vor Upload-Operationen mit Auth-Verifikation + +- **Erweiterte WordPress-API-Funktionen**: + - Automatische Ermittlung der Standard-Kategorie "Allgemein" + - Session-basierte HTTP-Verbindungen für bessere Performance + - Unterstützung für WordPress-Meta-Felder zur Nachverfolgung + - Berücksichtigung verschiedener WordPress-Authentifizierungsfehler + +- **UI/UX-Verbesserungen**: + - Neuer Status-Badge für "WordPress Pending" mit eigenem Styling + - Dashboard zeigt WordPress-spezifische Statistiken + - Konfigurationshilfen und .env-Vorlagen im WordPress-Tab + - Massenupload-Funktionalität mit Progress-Feedback + - Base64-Auth-Status in Konfigurationsübersicht + +### 🛠 Interne Änderungen + +- `main.py` erweitert um `upload_articles_to_wp()` Funktion +- `VALID_STATUSES` um "WordPress Pending" erweitert +- Neue Umgebungsvariable `WP_AUTH_BASE64` für direkte Base64-Authentifizierung +- Erweiterte Artikel-Datenstruktur um WordPress-spezifische Felder +- Session-Management für HTTP-Verbindungen implementiert +- Base64-Authentifizierung mit Fallback-Mechanismus + +### 📁 Neue Dateien + +- `utils/wordpress_uploader.py` - Vollständige WordPress REST API-Integration mit Base64-Auth +- Erweiterte `.env`-Vorlage mit WordPress-Konfiguration inkl. Base64-String + +### 🔒 Sicherheit + +- WordPress-Credentials werden sicher über Umgebungsvariablen verwaltet +- Base64-Auth über Anwendungspasswort (sicherer als Haupt-Login) +- Keine sensiblen Daten in Logs oder Fehlermeldungen +- Authorization Header im WordPress-Standard-Format + +### 📋 Authentifizierungs-Setup + +**Bereitgestellte Konfiguration:** +```bash +WP_AUTH_BASE64=b2dpZXJ0ejp3aE5FeDlhWkNJVVhWaVY4OVozZTdaMDM= +# Dekodiert: ogiertz:whNEx9aZCIUXViV89Z3e7Z03 +``` + +**Authorization Header:** +``` +Authorization: Basic b2dpZXJ0ejp3aE5FeDlhWkNJVVhWaVY4OVozZTdaMDM= +``` + +--- + +## [v1.5.3] - 2025-07-11 + +### 💡 Neue Funktionen + +- **WordPress-Integration** implementiert: + - Vollständige WordPress REST API-Anbindung über `utils/wordpress_uploader.py` + - Neuer Status "WordPress Pending" für hochgeladene Artikel + - Artikel mit Status "Process" können einzeln oder als Batch zu WordPress hochgeladen werden + - Automatische Duplikatserkennung basierend auf Titel-Übereinstimmung + - Meta-Felder werden gesetzt (RSS-Quelle, Original-Link, Import-Datum, RSS-Artikel-ID) + +- **Erweiterte UI-Funktionen**: + - Neuer Tab "WordPress" mit Verbindungstest und Konfigurationsübersicht + - WordPress-Upload-Buttons in der Artikel-Übersicht (einzeln und global) + - WordPress-Artikel-Statistiken im Dashboard und Statistiken-Tab + - Detaillierte Upload-Ergebnisse mit Erfolgs-/Fehlerstatistiken + +- **Verbesserte Artikel-Verwaltung**: + - WordPress Post ID und Upload-Datum werden in Artikeln gespeichert + - Status-Workflow: New → Rewrite → Process → WordPress Pending → Online + - Anzeige von WordPress-Informationen in der Artikel-Detailansicht + +### 🔧 Verbesserungen + +- **Robuste Fehlerbehandlung**: + - Ausführliches Logging für alle WordPress-Operationen + - Retry-Mechanismus mit exponential backoff bei Netzwerkfehlern + - Detaillierte Fehlermeldungen für verschiedene HTTP-Status-Codes + - Verbindungstest vor Upload-Operationen + +- **Erweiterte WordPress-API-Funktionen**: + - Automatische Ermittlung der Standard-Kategorie "Allgemein" + - Session-basierte HTTP-Verbindungen für bessere Performance + - Unterstützung für WordPress-Meta-Felder zur Nachverfolgung + - Berücksichtigung verschiedener WordPress-Authentifizierungsfehler + +- **UI/UX-Verbesserungen**: + - Neuer Status-Badge für "WordPress Pending" mit eigenem Styling + - Dashboard zeigt WordPress-spezifische Statistiken + - Konfigurationshilfen und .env-Vorlagen im WordPress-Tab + - Massenupload-Funktionalität mit Progress-Feedback + +### 🛠 Interne Änderungen + +- `main.py` erweitert um `upload_articles_to_wp()` Funktion +- `VALID_STATUSES` um "WordPress Pending" erweitert +- Neue Umgebungsvariablen für WordPress-Konfiguration +- Erweiterte Artikel-Datenstruktur um WordPress-spezifische Felder +- Session-Management für HTTP-Verbindungen implementiert + +### 📁 Neue Dateien + +- `utils/wordpress_uploader.py` - Vollständige WordPress REST API-Integration +- Erweiterte `.env`-Vorlage mit WordPress-Konfiguration + +### 🔒 Sicherheit + +- WordPress-Credentials werden sicher über Umgebungsvariablen verwaltet +- Basic Auth über Anwendungspasswort (sicherer als Haupt-Login) +- Keine sensiblen Daten in Logs oder Fehlermeldungen + +--- + +## [v1.5.3] - 2025-07-11 + +### ✨ Neue Funktionen + +- Automatischer Volltextabruf bei zu kurzen Artikeln (< 50 Wörter) + - Inhalte werden direkt von der Originalseite geladen (ähnlich wie bei der Bildextraktion) + - Promobil, Camping-News und andere gängige WordPress-Seiten werden unterstützt + +- Neue Verwaltungsseite `Feed-Verwaltung` unter `pages/01_feed_manager.py` + - RSS-Feeds können nun über eine dedizierte Oberfläche hinzugefügt, bearbeitet und gelöscht werden + - Anzahl verknüpfter Artikel pro Feed wird angezeigt + - Änderungen werden protokolliert und per `st.rerun()` sofort sichtbar + +### 🔧 Verbesserungen + +- Feed-Filter in der Artikelübersicht zeigt jetzt die **korrekten Feed-Namen mit Artikelanzahl** + - Beispiel: „Promobil News (12)" statt nur „Alle (20)" + - Basierend auf `source`-Feld im Artikelobjekt + +- Verbesserte Logging-Ausgaben bei Feed-Aktionen (hinzufügen, ändern, löschen) + +### 📁 Neue Dateien + +- `utils/article_extractor.py` – Logik zum Abrufen vollständiger Artikeltexte von Originalseiten +- `pages/01_feed_manager.py` – Eigenständige Verwaltungsseite für RSS-Feeds + +### 🛠 Interne Änderungen + +- `main.py` erweitert: Automatischer Fallback auf `extract_full_article()` bei zu kurzem Text +- Logging konsolidiert und mit Feed-Aktionen ergänzt + +## [v1.5.2] - 2025-07-09 + +- Fehlerbehandlung bei `CHANGELOG.md`-Doppelungen hinzugefügt +- Signaturlogik robuster (SSH, GPG, fallback) +- Farbige Terminalausgabe verbessert +- dry-run Argument hinzugefügt: + * Versionsnummer wird berechnet ✅ + * Änderungen (Version, Changelog, Commit, Tag, Push) werden nur angezeigt, nicht ausgeführt ✅ + * Ausgabe erfolgt farbig und klar gegliedert ✅ + +## [1.5.1] - 2025-07-09 + +SSH-Commit-Signatur in versioning.py eingebaut +Automatischer Fallback auf GPG oder keine Signatur +Farbige Terminalausgabe zur Signaturmethode +Readme erweitert mit Setup-Anleitung + +## [v1.5.0] – 2025-07-08 + +### 💡 Neue Funktionen +- 🪄 DALL·E-Bildgenerierung per Button direkt im Artikel-Expander +- Automatische Metadaten (Caption, Copyright, Quelle) für KI-generierte Bilder + +### 🔧 Änderungen & Fixes +- 🔒 Kritischer Bugfix: Artikel gingen nach DALL·E oder Rewrite verloren → jetzt sichere `save_articles()`-Logik über alle Artikel +- Status-Änderungen, Rewrite und Bilderfassung überschreiben nicht mehr die Gesamtdatei +- Kein `st.rerun()` mehr nach jedem Klick – flüssiger Workflow + +### 📦 Internes +- Neue Datei `utils/dalle_generator.py` für DALL·E-Integration +- Erweiterung der Teststrategie um strukturierte `TEST-CHECKLIST.md` +- Verbesserte Update-Strategie für Einzelartikel bei Bearbeitung + +## [v1.4.8] – 2025-07-07 + +### 💡 Neue Funktionen +- + +### 🔧 Änderungen & Fixes +- Fehlerbehebung bei neuen Release, CHANGELOG wurde nicht angehangen, es wird nun die gesamte Datei übernommen + +### 📦 Internes +- + +## [v1.4.7] – 2025-07-07 + +### 💡 Neue Funktionen +- Automatischer Release-Workflow bei `git tag v*` +- Release-Text aus `CHANGELOG.md` wird extrahiert und als GitHub Release verwendet + +### 🔧 Änderungen & Fixes +- Fehlerbehebung bei neuen Release, CHANGELOG wurde nicht angehangen + +### 📦 Internes +- Erweiterte `release.yml` zur zuverlässigen Release-Erstellung +- GitHub Actions mit `softprops/action-gh-release` + +## [v1.4.6] – 2025-07-07 + +### 💡 Neue Funktionen +- Automatischer Release-Workflow bei `git tag v*` +- Release-Text aus `CHANGELOG.md` wird extrahiert und als GitHub Release verwendet + +### 🔧 Änderungen & Fixes +- Fehlerbehebung bei Bilddatenextraktion +- Erweiterung von `versioning.py` um automatische Tag-Erstellung und Push + +### 📦 Internes +- Erweiterte `release.yml` zur zuverlässigen Release-Erstellung +- GitHub Actions mit `softprops/action-gh-release` + +## [v1.4.5] – 2025-07-07 + +### 💡 Neue Funktionen +- Umstellung des versioning.py-Skripts auf eine moderne Typer-CLI: +- create zum Erstellen neuer Versionen mit Level und Push-Option +- rollback zum Zurücknehmen der letzten Version +- list zur Anzeige aller Versionen im CHANGELOG.md +- Validierung, ob der CHANGELOG.md-Eintrag vor Release wirklich ausgefüllt wurde +- Interaktive CLI-Prompts zur besseren Benutzerführung + +### 🔧 Änderungen & Fixes +- versioning.py ersetzt bisherige manuelle Menüs durch Typer-Kommandos +- requirements.txt um typer[all]==0.12.3 ergänzt + +### 📦 Internes +- Vorbereitung für globale CLI-Nutzung (versioning als Befehl möglich) +- Automatisierung des Release-Prozesses mit GitHub Actions weiterhin vorbereitet + +## [v1.4.4] – 2025-07-07 + +### 💡 Neue Funktionen +- + +### 🔧 Änderungen & Fixes +- + +### 📦 Internes +- automatische Versionierung eingebunden und direktes GitHub puschen der Änderungen + +- ## [v1.4.3] – 2025-07-07 + +### 💡 Neue Funktionen +- ⚠️ Visuelle Warnanzeige in der Artikeltabelle für unvollständige Bildmetadaten (fehlende Caption, Copyright oder Quelle) +- ✍️ Inline-Bearbeitung von Bilddaten (Caption, Copyright, Quelle) direkt in der Detailansicht +- 🪵 Neue separate Seite `Log-Viewer` zur Anzeige der letzten Log-Einträge (automatisch über `pages/log_viewer.py`) +- 📂 Startfilter für Artikelansicht auf „New" voreingestellt für fokussierten Workflow + +### 🔧 Änderungen & Fixes +- ✅ Artikel aus Feeds überschreiben bestehende Artikel **nicht mehr** – Status, Tags und andere manuelle Änderungen bleiben erhalten +- 🧹 `get_recent_logs()` wurde entfernt und die Sidebar-Logausgabe aus `app.py` entfernt +- 🔗 Sidebar-Link zur Log-Seite hinzugefügt (mittlerweile durch native Seiten-Navigation ersetzt) +- 🧭 Navigation durch Nutzung von Streamlit-Multipage-Struktur (`pages/`) + +### 📦 Internes +- Refactoring von `process_articles()` zur sicheren ID-basierten Artikelzusammenführung +- Verbesserte Logging-Ausgabe bei bereits vorhandenen Artikeln +- Robusteres Fehlerhandling in `image_extractor.py` + +## [v1.4.2] – 2025-07-03 + +### 💡 Neue Funktionen +- Komplett überarbeitete Artikel-Tabelle mit: + - Auswahlcheckboxen + - Inline-Statuswechsel mit Dropdown + - Wortanzahl, Tag-Anzeige, Datum kompakt +- Copy-to-Clipboard Funktion für Titel, Text und Tags +- Bildanzeige inkl. Caption und Copyright-Quelle im Detailbereich +- Titel wird automatisch beim Kopieren des Texts vorangestellt + +### 🔧 Änderungen & Fixes +- `st.experimental_rerun()` durch `st.rerun()` ersetzt +- Statusfilter „Alle" funktioniert jetzt korrekt +- UI-Tuning für bessere Lesbarkeit +- Feedliste aus der Sidebar entfernt +- Fix: Bilddaten ohne Caption verursachen keine Fehler mehr +- Artikelüberschriften korrekt in Kopiertext eingebaut + +### 📦 Internes +- Logging bleibt aktiv im Verzeichnis `/logs` +- Vorbereitung für Bildquellen-Import aus Original-Artikel umgesetzt + +## [1.4.1] – 2025-07-03 +### Hinzugefügt +- Logging für `process_articles()`, damit nachvollziehbar ist, welche Feeds verarbeitet wurden +- Rückmeldung in der App bei Klick auf „Alle Feeds neu laden" + +### Geändert +- `main.py`: Inhalte aus `content`, `summary` oder `description` werden vollständig geladen und mit `BeautifulSoup` bereinigt +- Sicherstellung, dass `fetch_and_process_feed()` alle relevanten Artikelinformationen vollständig speichert + +### Fehlerbehebungen +- Problem behoben, bei dem Artikeltexte nicht vollständig übernommen wurden + +## [1.3.1] – 2025-07-03 +### Added +- Tabellenansicht mit Checkbox, Titel, Datum, Zusammenfassung, Wortanzahl, Tags, Status +- Direktes Bearbeiten des Status über Dropdown-Menü +- Massenbearbeitung von Artikeln per Checkbox +- Rewrite-Button für alle Artikel mit Status 'Rewrite' + +## [1.2.0] - 2025-07-04 +### Hinzugefügt +- Automatische Bilderkennung beim Einlesen von Artikeln + - Extrahieren von Bildern aus dem Originalartikel (bis zu 3 Bilder) + - Speicherung von Bild-URLs, Alt-Texten (Bildbeschreibung) und Copyright-Hinweisen +- Fehlerbehandlung für nicht erreichbare Seiten +- Darstellung der Bilder (inkl. Beschreibung & Copyright) in der Artikelansicht + +### Geändert +- Bilder werden direkt beim Einlesen eines RSS-Artikels verarbeitet und gespeichert +- `app.py` zeigt nun auch Bildinformationen innerhalb der Artikeldetailansicht an + +### Behoben +- Keine + +--- + +## [1.1.0] - 2025-07-04 +### Hinzugefügt +- Visuell aufgewertete Box zur Darstellung eines Artikels mit: + - Kopierbutton für Titel + - Kopierbutton für Artikeltext + - Kopierbutton für Tags + - Button zum Öffnen des Originalartikels im neuen Tab +- Artikelansicht ist nun in einer grauen, abgerundeten Box gekapselt +- Icons unterstützen visuelle Orientierung (📝, 🗌, 📌 etc.) + +### Geändert +- Artikelkopierfunktion für WordPress ist nun interaktiv über Buttons möglich +- HTML-Markup innerhalb von Streamlit für flexibleres Styling + +### Behoben +- Keine + +--- + +## [1.0.0] - 2025-07-03 +### Initialversion +- Artikel aus RSS-Feeds einlesen +- Speichern in JSON-Datei +- Anzeige in Tabelle mit Statusfilter +- Rewrite per ChatGPT mit Zusammenfassung und Tag-Generierung +- Exportierbare Inhalte für manuelles Posting auf WordPress + +--- + + +## [v1.6.1] - 2025-08-16 + +### 💡 Neue Funktionen + +- **WordPress-Integration** implementiert: + - Vollständige WordPress REST API-Anbindung über `utils/wordpress_uploader.py` + - **Base64-Authentifizierung** mit Authorization Header (wie von WordPress API benötigt) + - Neuer Status "WordPress Pending" für hochgeladene Artikel + - Artikel mit Status "Process" können einzeln oder als Batch zu WordPress hochgeladen werden + - Automatische Duplikatserkennung basierend auf Titel-Übereinstimmung + - Meta-Felder werden gesetzt (RSS-Quelle, Original-Link, Import-Datum, RSS-Artikel-ID) + +- **Erweiterte UI-Funktionen**: + - Neuer Tab "WordPress" mit Verbindungstest und Konfigurationsübersicht + - WordPress-Upload-Buttons in der Artikel-Übersicht (einzeln und global) + - WordPress-Artikel-Statistiken im Dashboard und Statistiken-Tab + - Detaillierte Upload-Ergebnisse mit Erfolgs-/Fehlerstatistiken + - Debug-Modus für Auth-Details (Entwicklung) + +- **Verbesserte Artikel-Verwaltung**: + - WordPress Post ID und Upload-Datum werden in Artikeln gespeichert + - Status-Workflow: New → Rewrite → Process → WordPress Pending → Online + - Anzeige von WordPress-Informationen in der Artikel-Detailansicht + +### 🔧 Verbesserungen + +- **Korrekte WordPress-API-Authentifizierung**: + - Unterstützung für bereitgestellten Base64-Auth-String (`WP_AUTH_BASE64`) + - Fallback auf automatische Base64-Generierung aus Username/Password + - Authorization Header im korrekten Format: `Basic ` + - Erweiterte Debug-Ausgaben für Authentifizierung + +- **Robuste Fehlerbehandlung**: + - Ausführliches Logging für alle WordPress-Operationen inkl. Auth-Details + - Retry-Mechanismus mit exponential backoff bei Netzwerkfehlern + - Detaillierte Fehlermeldungen für verschiedene HTTP-Status-Codes (401, 403, etc.) + - Verbindungstest vor Upload-Operationen mit Auth-Verifikation + +- **Erweiterte WordPress-API-Funktionen**: + - Automatische Ermittlung der Standard-Kategorie "Allgemein" + - Session-basierte HTTP-Verbindungen für bessere Performance + - Unterstützung für WordPress-Meta-Felder zur Nachverfolgung + - Berücksichtigung verschiedener WordPress-Authentifizierungsfehler + +- **UI/UX-Verbesserungen**: + - Neuer Status-Badge für "WordPress Pending" mit eigenem Styling + - Dashboard zeigt WordPress-spezifische Statistiken + - Konfigurationshilfen und .env-Vorlagen im WordPress-Tab + - Massenupload-Funktionalität mit Progress-Feedback + - Base64-Auth-Status in Konfigurationsübersicht + +### 🛠 Interne Änderungen + +- `main.py` erweitert um `upload_articles_to_wp()` Funktion +- `VALID_STATUSES` um "WordPress Pending" erweitert +- Neue Umgebungsvariable `WP_AUTH_BASE64` für direkte Base64-Authentifizierung +- Erweiterte Artikel-Datenstruktur um WordPress-spezifische Felder +- Session-Management für HTTP-Verbindungen implementiert +- Base64-Authentifizierung mit Fallback-Mechanismus + +### 📁 Neue Dateien + +- `utils/wordpress_uploader.py` - Vollständige WordPress REST API-Integration mit Base64-Auth +- Erweiterte `.env`-Vorlage mit WordPress-Konfiguration inkl. Base64-String + +### 🔒 Sicherheit + +- WordPress-Credentials werden sicher über Umgebungsvariablen verwaltet +- Base64-Auth über Anwendungspasswort (sicherer als Haupt-Login) +- Keine sensiblen Daten in Logs oder Fehlermeldungen +- Authorization Header im WordPress-Standard-Format + +### 📋 Authentifizierungs-Setup + +**Bereitgestellte Konfiguration:** +```bash +WP_AUTH_BASE64=b2dpZXJ0ejp3aE5FeDlhWkNJVVhWaVY4OVozZTdaMDM= +# Dekodiert: ogiertz:whNEx9aZCIUXViV89Z3e7Z03 +``` + +**Authorization Header:** +``` +Authorization: Basic b2dpZXJ0ejp3aE5FeDlhWkNJVVhWaVY4OVozZTdaMDM= +``` + +--- + +## [v1.5.3] - 2025-07-11 + +### 💡 Neue Funktionen + +- **WordPress-Integration** implementiert: + - Vollständige WordPress REST API-Anbindung über `utils/wordpress_uploader.py` + - Neuer Status "WordPress Pending" für hochgeladene Artikel + - Artikel mit Status "Process" können einzeln oder als Batch zu WordPress hochgeladen werden + - Automatische Duplikatserkennung basierend auf Titel-Übereinstimmung + - Meta-Felder werden gesetzt (RSS-Quelle, Original-Link, Import-Datum, RSS-Artikel-ID) + +- **Erweiterte UI-Funktionen**: + - Neuer Tab "WordPress" mit Verbindungstest und Konfigurationsübersicht + - WordPress-Upload-Buttons in der Artikel-Übersicht (einzeln und global) + - WordPress-Artikel-Statistiken im Dashboard und Statistiken-Tab + - Detaillierte Upload-Ergebnisse mit Erfolgs-/Fehlerstatistiken + +- **Verbesserte Artikel-Verwaltung**: + - WordPress Post ID und Upload-Datum werden in Artikeln gespeichert + - Status-Workflow: New → Rewrite → Process → WordPress Pending → Online + - Anzeige von WordPress-Informationen in der Artikel-Detailansicht + +### 🔧 Verbesserungen + +- **Robuste Fehlerbehandlung**: + - Ausführliches Logging für alle WordPress-Operationen + - Retry-Mechanismus mit exponential backoff bei Netzwerkfehlern + - Detaillierte Fehlermeldungen für verschiedene HTTP-Status-Codes + - Verbindungstest vor Upload-Operationen + +- **Erweiterte WordPress-API-Funktionen**: + - Automatische Ermittlung der Standard-Kategorie "Allgemein" + - Session-basierte HTTP-Verbindungen für bessere Performance + - Unterstützung für WordPress-Meta-Felder zur Nachverfolgung + - Berücksichtigung verschiedener WordPress-Authentifizierungsfehler + +- **UI/UX-Verbesserungen**: + - Neuer Status-Badge für "WordPress Pending" mit eigenem Styling + - Dashboard zeigt WordPress-spezifische Statistiken + - Konfigurationshilfen und .env-Vorlagen im WordPress-Tab + - Massenupload-Funktionalität mit Progress-Feedback + +### 🛠 Interne Änderungen + +- `main.py` erweitert um `upload_articles_to_wp()` Funktion +- `VALID_STATUSES` um "WordPress Pending" erweitert +- Neue Umgebungsvariablen für WordPress-Konfiguration +- Erweiterte Artikel-Datenstruktur um WordPress-spezifische Felder +- Session-Management für HTTP-Verbindungen implementiert + +### 📁 Neue Dateien + +- `utils/wordpress_uploader.py` - Vollständige WordPress REST API-Integration +- Erweiterte `.env`-Vorlage mit WordPress-Konfiguration + +### 🔒 Sicherheit + +- WordPress-Credentials werden sicher über Umgebungsvariablen verwaltet +- Basic Auth über Anwendungspasswort (sicherer als Haupt-Login) +- Keine sensiblen Daten in Logs oder Fehlermeldungen + +--- + +## [v1.5.3] - 2025-07-11 + +### ✨ Neue Funktionen + +- Automatischer Volltextabruf bei zu kurzen Artikeln (< 50 Wörter) + - Inhalte werden direkt von der Originalseite geladen (ähnlich wie bei der Bildextraktion) + - Promobil, Camping-News und andere gängige WordPress-Seiten werden unterstützt + +- Neue Verwaltungsseite `Feed-Verwaltung` unter `pages/01_feed_manager.py` + - RSS-Feeds können nun über eine dedizierte Oberfläche hinzugefügt, bearbeitet und gelöscht werden + - Anzahl verknüpfter Artikel pro Feed wird angezeigt + - Änderungen werden protokolliert und per `st.rerun()` sofort sichtbar + +### 🔧 Verbesserungen + +- Feed-Filter in der Artikelübersicht zeigt jetzt die **korrekten Feed-Namen mit Artikelanzahl** + - Beispiel: „Promobil News (12)" statt nur „Alle (20)" + - Basierend auf `source`-Feld im Artikelobjekt + +- Verbesserte Logging-Ausgaben bei Feed-Aktionen (hinzufügen, ändern, löschen) + +### 📁 Neue Dateien + +- `utils/article_extractor.py` – Logik zum Abrufen vollständiger Artikeltexte von Originalseiten +- `pages/01_feed_manager.py` – Eigenständige Verwaltungsseite für RSS-Feeds + +### 🛠 Interne Änderungen + +- `main.py` erweitert: Automatischer Fallback auf `extract_full_article()` bei zu kurzem Text +- Logging konsolidiert und mit Feed-Aktionen ergänzt + +## [v1.5.2] - 2025-07-09 + +- Fehlerbehandlung bei `CHANGELOG.md`-Doppelungen hinzugefügt +- Signaturlogik robuster (SSH, GPG, fallback) +- Farbige Terminalausgabe verbessert +- dry-run Argument hinzugefügt: + * Versionsnummer wird berechnet ✅ + * Änderungen (Version, Changelog, Commit, Tag, Push) werden nur angezeigt, nicht ausgeführt ✅ + * Ausgabe erfolgt farbig und klar gegliedert ✅ + +## [1.5.1] - 2025-07-09 + +SSH-Commit-Signatur in versioning.py eingebaut +Automatischer Fallback auf GPG oder keine Signatur +Farbige Terminalausgabe zur Signaturmethode +Readme erweitert mit Setup-Anleitung + +## [v1.5.0] – 2025-07-08 + +### 💡 Neue Funktionen +- 🪄 DALL·E-Bildgenerierung per Button direkt im Artikel-Expander +- Automatische Metadaten (Caption, Copyright, Quelle) für KI-generierte Bilder + +### 🔧 Änderungen & Fixes +- 🔒 Kritischer Bugfix: Artikel gingen nach DALL·E oder Rewrite verloren → jetzt sichere `save_articles()`-Logik über alle Artikel +- Status-Änderungen, Rewrite und Bilderfassung überschreiben nicht mehr die Gesamtdatei +- Kein `st.rerun()` mehr nach jedem Klick – flüssiger Workflow + +### 📦 Internes +- Neue Datei `utils/dalle_generator.py` für DALL·E-Integration +- Erweiterung der Teststrategie um strukturierte `TEST-CHECKLIST.md` +- Verbesserte Update-Strategie für Einzelartikel bei Bearbeitung + +## [v1.4.8] – 2025-07-07 + +### 💡 Neue Funktionen +- + +### 🔧 Änderungen & Fixes +- Fehlerbehebung bei neuen Release, CHANGELOG wurde nicht angehangen, es wird nun die gesamte Datei übernommen + +### 📦 Internes +- + +## [v1.4.7] – 2025-07-07 + +### 💡 Neue Funktionen +- Automatischer Release-Workflow bei `git tag v*` +- Release-Text aus `CHANGELOG.md` wird extrahiert und als GitHub Release verwendet + +### 🔧 Änderungen & Fixes +- Fehlerbehebung bei neuen Release, CHANGELOG wurde nicht angehangen + +### 📦 Internes +- Erweiterte `release.yml` zur zuverlässigen Release-Erstellung +- GitHub Actions mit `softprops/action-gh-release` + +## [v1.4.6] – 2025-07-07 + +### 💡 Neue Funktionen +- Automatischer Release-Workflow bei `git tag v*` +- Release-Text aus `CHANGELOG.md` wird extrahiert und als GitHub Release verwendet + +### 🔧 Änderungen & Fixes +- Fehlerbehebung bei Bilddatenextraktion +- Erweiterung von `versioning.py` um automatische Tag-Erstellung und Push + +### 📦 Internes +- Erweiterte `release.yml` zur zuverlässigen Release-Erstellung +- GitHub Actions mit `softprops/action-gh-release` + +## [v1.4.5] – 2025-07-07 + +### 💡 Neue Funktionen +- Umstellung des versioning.py-Skripts auf eine moderne Typer-CLI: +- create zum Erstellen neuer Versionen mit Level und Push-Option +- rollback zum Zurücknehmen der letzten Version +- list zur Anzeige aller Versionen im CHANGELOG.md +- Validierung, ob der CHANGELOG.md-Eintrag vor Release wirklich ausgefüllt wurde +- Interaktive CLI-Prompts zur besseren Benutzerführung + +### 🔧 Änderungen & Fixes +- versioning.py ersetzt bisherige manuelle Menüs durch Typer-Kommandos +- requirements.txt um typer[all]==0.12.3 ergänzt + +### 📦 Internes +- Vorbereitung für globale CLI-Nutzung (versioning als Befehl möglich) +- Automatisierung des Release-Prozesses mit GitHub Actions weiterhin vorbereitet + +## [v1.4.4] – 2025-07-07 + +### 💡 Neue Funktionen +- + +### 🔧 Änderungen & Fixes +- + +### 📦 Internes +- automatische Versionierung eingebunden und direktes GitHub puschen der Änderungen + +- ## [v1.4.3] – 2025-07-07 + +### 💡 Neue Funktionen +- ⚠️ Visuelle Warnanzeige in der Artikeltabelle für unvollständige Bildmetadaten (fehlende Caption, Copyright oder Quelle) +- ✍️ Inline-Bearbeitung von Bilddaten (Caption, Copyright, Quelle) direkt in der Detailansicht +- 🪵 Neue separate Seite `Log-Viewer` zur Anzeige der letzten Log-Einträge (automatisch über `pages/log_viewer.py`) +- 📂 Startfilter für Artikelansicht auf „New" voreingestellt für fokussierten Workflow + +### 🔧 Änderungen & Fixes +- ✅ Artikel aus Feeds überschreiben bestehende Artikel **nicht mehr** – Status, Tags und andere manuelle Änderungen bleiben erhalten +- 🧹 `get_recent_logs()` wurde entfernt und die Sidebar-Logausgabe aus `app.py` entfernt +- 🔗 Sidebar-Link zur Log-Seite hinzugefügt (mittlerweile durch native Seiten-Navigation ersetzt) +- 🧭 Navigation durch Nutzung von Streamlit-Multipage-Struktur (`pages/`) + +### 📦 Internes +- Refactoring von `process_articles()` zur sicheren ID-basierten Artikelzusammenführung +- Verbesserte Logging-Ausgabe bei bereits vorhandenen Artikeln +- Robusteres Fehlerhandling in `image_extractor.py` + +## [v1.4.2] – 2025-07-03 + +### 💡 Neue Funktionen +- Komplett überarbeitete Artikel-Tabelle mit: + - Auswahlcheckboxen + - Inline-Statuswechsel mit Dropdown + - Wortanzahl, Tag-Anzeige, Datum kompakt +- Copy-to-Clipboard Funktion für Titel, Text und Tags +- Bildanzeige inkl. Caption und Copyright-Quelle im Detailbereich +- Titel wird automatisch beim Kopieren des Texts vorangestellt + +### 🔧 Änderungen & Fixes +- `st.experimental_rerun()` durch `st.rerun()` ersetzt +- Statusfilter „Alle" funktioniert jetzt korrekt +- UI-Tuning für bessere Lesbarkeit +- Feedliste aus der Sidebar entfernt +- Fix: Bilddaten ohne Caption verursachen keine Fehler mehr +- Artikelüberschriften korrekt in Kopiertext eingebaut + +### 📦 Internes +- Logging bleibt aktiv im Verzeichnis `/logs` +- Vorbereitung für Bildquellen-Import aus Original-Artikel umgesetzt + +## [1.4.1] – 2025-07-03 +### Hinzugefügt +- Logging für `process_articles()`, damit nachvollziehbar ist, welche Feeds verarbeitet wurden +- Rückmeldung in der App bei Klick auf „Alle Feeds neu laden" + +### Geändert +- `main.py`: Inhalte aus `content`, `summary` oder `description` werden vollständig geladen und mit `BeautifulSoup` bereinigt +- Sicherstellung, dass `fetch_and_process_feed()` alle relevanten Artikelinformationen vollständig speichert + +### Fehlerbehebungen +- Problem behoben, bei dem Artikeltexte nicht vollständig übernommen wurden + +## [1.3.1] – 2025-07-03 +### Added +- Tabellenansicht mit Checkbox, Titel, Datum, Zusammenfassung, Wortanzahl, Tags, Status +- Direktes Bearbeiten des Status über Dropdown-Menü +- Massenbearbeitung von Artikeln per Checkbox +- Rewrite-Button für alle Artikel mit Status 'Rewrite' + +## [1.2.0] - 2025-07-04 +### Hinzugefügt +- Automatische Bilderkennung beim Einlesen von Artikeln + - Extrahieren von Bildern aus dem Originalartikel (bis zu 3 Bilder) + - Speicherung von Bild-URLs, Alt-Texten (Bildbeschreibung) und Copyright-Hinweisen +- Fehlerbehandlung für nicht erreichbare Seiten +- Darstellung der Bilder (inkl. Beschreibung & Copyright) in der Artikelansicht + +### Geändert +- Bilder werden direkt beim Einlesen eines RSS-Artikels verarbeitet und gespeichert +- `app.py` zeigt nun auch Bildinformationen innerhalb der Artikeldetailansicht an + +### Behoben +- Keine + +--- + +## [1.1.0] - 2025-07-04 +### Hinzugefügt +- Visuell aufgewertete Box zur Darstellung eines Artikels mit: + - Kopierbutton für Titel + - Kopierbutton für Artikeltext + - Kopierbutton für Tags + - Button zum Öffnen des Originalartikels im neuen Tab +- Artikelansicht ist nun in einer grauen, abgerundeten Box gekapselt +- Icons unterstützen visuelle Orientierung (📝, 🗌, 📌 etc.) + +### Geändert +- Artikelkopierfunktion für WordPress ist nun interaktiv über Buttons möglich +- HTML-Markup innerhalb von Streamlit für flexibleres Styling + +### Behoben +- Keine + +--- + +## [1.0.0] - 2025-07-03 +### Initialversion +- Artikel aus RSS-Feeds einlesen +- Speichern in JSON-Datei +- Anzeige in Tabelle mit Statusfilter +- Rewrite per ChatGPT mit Zusammenfassung und Tag-Generierung +- Exportierbare Inhalte für manuelles Posting auf WordPress + +---- + +## [v1.6.0] - 2025-08-15 + +### 🎨 Komplette UI-Überarbeitung + +- **Modernes Tab-basiertes Design** mit Dashboard, Artikel, Feeds, Bilder und Statistiken-Tabs +- **Card-basierte Artikelansicht** ersetzt die alte Tabellenstruktur +- **Gradient-Header** und moderne CSS-Styling für professionelleres Aussehen +- **Responsive Layout** mit verbesserter mobiler Darstellung +- **Status-Badges** mit farbkodierten Indikatoren +- **Toast-Benachrichtigungen** für besseres User-Feedback + +### 🔍 Erweiterte Filter- und Suchfunktionen + +- **Kombinierte Filter** für Status, Feed und Volltextsuche +- **Live-Suche** durch Titel, Inhalt und Tags +- **Feed-spezifische Filterung** mit Artikelanzahl-Anzeige +- **Session State Management** für persistente Filter-Einstellungen + +### 📊 Neues Dashboard + +- **Statistik-Karten** mit visuellen Metriken (Gesamt-Artikel, neue Artikel, Feeds, Online-Artikel) +- **Schnellaktionen** für häufige Aufgaben (Feed-Update, Rewrite, Aufräumen) +- **Neueste Artikel Preview** mit Status-Anzeige +- **Übersichtliche Zahlen** mit modernem Design + +### 🖼️ Verbesserte Bildverwaltung + +- **Dedizierte Bilder-Seite** mit Galerie-Ansicht +- **Erweiterte Bildextraktion** mit Featured Image Detection +- **OpenGraph und Twitter Card** Unterstützung +- **Intelligente Bildfilterung** (Größe, Typ, Blacklist) +- **Metadaten-Bereinigung** mit Fallback-Werten + +### 📰 Optimierte Artikelverarbeitung + +- **Erweiterte Duplikatserkennung** basierend auf Titel-Ähnlichkeit und URL +- **Verbesserte Volltextextraktion** mit website-spezifischen Selektoren +- **WordPress-Erkennung** für optimierte Content-Extraktion +- **Retry-Mechanismus** mit exponential backoff +- **Bessere Textbereinigung** und Validierung + +### 🛠️ Backend-Verbesserungen + +- **Strukturiertes Logging** mit Funktions- und Zeilennummern +- **Session State Management** für bessere Performance +- **Verbesserte Fehlerbehandlung** mit spezifischen Error-Messages +- **JSON-Validierung** vor dem Speichern +- **Encoding-Fixes** für internationale Zeichen +- **Memory-optimierte Verarbeitung** + +### 📊 Neue Statistiken-Seite + +- **Status-Verteilung** mit Prozentanzeigen +- **Feed-Artikel-Übersicht** sortiert nach Anzahl +- **Textstatistiken** (Durchschnitt, Min/Max Wortanzahl) +- **Tag-Häufigkeiten** der meist verwendeten Tags +- **Lesezeit-Berechnungen** (200 Wörter pro Minute) + +### 🔧 Technische Verbesserungen + +- **UI Helper Functions** in `utils/ui_helpers.py` für wiederverwendbare Komponenten +- **Verbesserte URL-Validierung** und Domain-Erkennung +- **Smart Content Selectors** für verschiedene Website-Typen +- **Robustes Error Handling** mit spezifischen Fehlermeldungen +- **Performance-Optimierungen** durch reduzierte `st.rerun()` Calls +- **Memory-Management** für große Artikel-Listen + +### 📱 UX-Verbesserungen + +- **Inline-Bearbeitung** von Artikel-Status direkt in der Card-Ansicht +- **Erweiterte Details-Ansicht** mit Collapsible-Bereichen +- **Copy-to-Clipboard** Funktionalität mit formatiertem Text +- **Hover-Effekte** und Animations für bessere Interaktion +- **Breadcrumb-Navigation** in komplexen Ansichten +- **Loading-Spinner** für längere Operationen + +### 🗂️ Neue Dateistruktur + +``` +├── app.py (komplett überarbeitet) +├── main.py (erweiterte Backend-Logik) +├── utils/ +│ ├── ui_helpers.py (neue UI-Komponenten) +│ ├── image_extractor.py (verbesserte Bildextraktion) +│ ├── article_extractor.py (erweiterte Artikelextraktion) +│ └── dalle_generator.py (unverändert) +├── pages/ +│ ├── 01_feed_manager.py (bestehend) +│ └── log_viewer.py (bestehend) +└── logs/ (verbessertes Logging) +``` + +### 🔄 Migration & Kompatibilität + +- **Vollständige Rückwärtskompatibilität** mit bestehenden JSON-Daten +- **Automatische Datenmigration** für neue Felder (source_name, word_count, etc.) +- **Graceful Degradation** bei fehlenden Feldern +- **Validierung und Reparatur** ungültiger Datenstrukturen + +### ⚡ Performance-Optimierungen + +- **Lazy Loading** für große Artikel-Listen +- **Effiziente Filtering** ohne komplette Neuladung +- **Optimierte Bildverarbeitung** mit Größen-Caching +- **Reduzierte API-Calls** durch besseres State Management +- **Memory-optimierte JSON-Verarbeitung** + +### 🐛 Bugfixes + +- **Status-Änderungen** gehen nicht mehr verloren nach Reload +- **Bildmetadaten** werden korrekt gespeichert und angezeigt +- **Duplikat-Artikel** werden zuverlässig erkannt +- **Encoding-Probleme** bei internationalen Zeichen behoben +- **Feed-Namen** werden korrekt in Filter-Dropdown angezeigt +- **Session State** Konflikte bei mehreren Tabs behoben + +### 📋 Breaking Changes + +- **Alte Tabellen-UI** wurde durch Card-Layout ersetzt +- **Sidebar-Navigation** wurde durch Tab-Navigation ersetzt +- **Direkte JSON-Manipulation** sollte vermieden werden (neue Validierung) + +--- + +## [v1.5.3] - 2025-07-11 + +### ✨ Neue Funktionen + +- Automatischer Volltextabruf bei zu kurzen Artikeln (< 50 Wörter) + - Inhalte werden direkt von der Originalseite geladen (ähnlich wie bei der Bildextraktion) + - Promobil, Camping-News und andere gängige WordPress-Seiten werden unterstützt + +- Neue Verwaltungsseite `Feed-Verwaltung` unter `pages/01_feed_manager.py` + - RSS-Feeds können nun über eine dedizierte Oberfläche hinzugefügt, bearbeitet und gelöscht werden + - Anzahl verknüpfter Artikel pro Feed wird angezeigt + - Änderungen werden protokolliert und per `st.rerun()` sofort sichtbar + +### 🔧 Verbesserungen + +- Feed-Filter in der Artikelübersicht zeigt jetzt die **korrekten Feed-Namen mit Artikelanzahl** + - Beispiel: „Promobil News (12)“ statt nur „Alle (20)“ + - Basierend auf `source`-Feld im Artikelobjekt + +- Verbesserte Logging-Ausgaben bei Feed-Aktionen (hinzufügen, ändern, löschen) + +### 📁 Neue Dateien + +- `utils/article_extractor.py` – Logik zum Abrufen vollständiger Artikeltexte von Originalseiten +- `pages/01_feed_manager.py` – Eigenständige Verwaltungsseite für RSS-Feeds + +### 🛠 Interne Änderungen + +- `main.py` erweitert: Automatischer Fallback auf `extract_full_article()` bei zu kurzem Text +- Logging konsolidiert und mit Feed-Aktionen ergänzt + -- Beschreibung... ## [v1.5.2] - 2025-07-09 diff --git a/README.md b/README.md index 17689ad..b3c2b4a 100644 --- a/README.md +++ b/README.md @@ -1,123 +1,63 @@ -# 📰 RSS News Bot +# rss-news (Rebuild) -Ein intelligentes Tool zum Einlesen, Umschreiben und Veröffentlichen von Artikeln aus RSS-Feeds – mit automatischer Tag-Erkennung, KI-unterstütztem Rewrite via GPT-4, Bildextraktion aus Originalartikeln und optionaler DALL·E-Bildgenerierung. +`rss-news` wird als bestehendes Repository weitergefuehrt und schrittweise zu einer robusten, rechtssicheren News-Pipeline neu aufgebaut. -![Version](https://img.shields.io/badge/version-1.5.0-blue) -![License](https://img.shields.io/badge/license-MIT-green) -![Python](https://img.shields.io/badge/python-3.10+-yellow) -![Streamlit](https://img.shields.io/badge/built%20with-Streamlit-ff4b4b) +Aktueller Stand: +- Alte Streamlit-App wird nicht produktiv genutzt. +- `news.vanityontour.de` wird bis zum Go-Live der neuen App auf `https://vanityontour.de` umgeleitet. +- Planung, Doku und Wiki werden als Grundlage fuer den Neuaufbau gepflegt. ---- +## Ziele +- RSS-gestuetzte Artikelverarbeitung mit klaren Quellregeln +- Rechtssichere Nutzung (Quellen, Attribution, Lizenzinformationen) +- Zuverlaessige Automatisierung auf Hetzner +- Publikation nach WordPress (IONOS aktuell, spaeter offen) +- Zugriff nur nach Login (zunaechst User/Password) -## 🚀 Features +## Architektur-Richtung (MVP) +- Backend: `Python + FastAPI` +- Jobs: Queue-Worker (z. B. Redis + RQ/Celery) +- Daten: SQLite fuer MVP, spaeter optional PostgreSQL +- Auth: Session-Login mit einem Admin-User +- Publishing: WordPress REST API (Status zunaechst `pending`) -- 📡 **RSS-Feeds verwalten** (hinzufügen, aktualisieren) -- ✍️ **Artikel automatisch umschreiben** mit GPT-4 -- 🏷️ **Tags automatisch generieren** -- 🖼️ **Bilder aus Originalartikeln extrahieren** -- 🪄 **Optionales DALL·E-Bild generieren** -- 🔧 **Bearbeiten von Bildmetadaten** -- 🗂️ **Statusverwaltung der Artikel (New, Rewrite, Process, etc.)** -- 📜 **Log-Viewer-Seite integriert** -- 📥 **Export zur Veröffentlichung auf WordPress vorbereitet** -- 📋 Artikeltabelle mit Status-Filter -- 🔍 Artikel-Expander mit Rewrite, Tags & Bildern -- 🪄 Button für KI-Bildgenerierung +Details: `docs/PROJECT_PLAN.md` +## Projektsteuerung +- GitHub Project: `https://github.com/users/OliverGiertz/projects/3/views/1` +- Dieses Board ist die zentrale Steuerung fuer ToDos, Bugs, Verbesserungen. +- Wiki-Struktur liegt unter `docs/wiki/`. ---- +## Dokumentation +- Projektplan: `docs/PROJECT_PLAN.md` +- ToDo-Liste: `docs/TODO.md` +- Quell- und Lizenzpolicy: `docs/SOURCE_POLICY.md` +- Wiki Home: `docs/wiki/Home.md` -## 🧱 Projektstruktur - -ss-news/ -├── app.py # Haupt-UI mit Streamlit -├── main.py # Logik für Feed-Import und Verarbeitung -├── utils/ -│ └── image_extractor.py # Bilder aus Originalartikeln extrahieren -│ └── dalle_generator.py # DALL·E-Integration (KI-Bild) -├── pages/ -│ └── log_viewer.py # UI zur Anzeige der Logs -├── data/ -│ └── articles.json # Gespeicherte Artikel -│ └── feeds.json # Gespeicherte Feed-URLs -├── logs/ -│ └── rss_tool.log # Logging der Verarbeitung -├── versioning.py # CLI-Tool zur Versionierung & Release -├── TEST-CHECKLIST.md # Manuelle Prüfliste für Releases -├── version.py # Aktuelle Version -└── CHANGELOG.md # Änderungsprotokoll - - ---- - -## 🔐 Signierte Commits und Tags - -Dieses Projekt unterstützt **signierte Commits und Tags über SSH** (alternativ GPG). GitHub zeigt für signierte Beiträge ein ✅ **Verified**-Badge an. - -### 🛠 Voraussetzungen - -1. Ein SSH-Key (z. B. `~/.ssh/id_ed25519`) ist generiert: - - ```bash - ssh-keygen -t ed25519 -C "deine@email.de" - ``` - -2. Key bei GitHub an zwei Stellen hinterlegen: - * 🔏 Signing Keys (für Commit-Signatur) - * 🔐 SSH Keys (für Git-Push/Pull) - -3. Git-Konfiguration - - ```bash - git config --global gpg.format ssh - git config --global user.signingkey ~/.ssh/id_ed25519.pub - git config --global commit.gpgsign true - ``` - -4. Optional: SSH config zur Sicherheit: - - ```bash - # ~/.ssh/config - Host github.com - HostName github.com - User git - IdentityFile ~/.ssh/id_ed25519 - IdentitiesOnly yes - ``` ---- - -🧰 Nutzung von versioning.py -Die Datei versioning.py automatisiert: - - * ⬆️ Versionsnummer erhöhen - * 📄 CHANGELOG.md und __version__.py aktualisieren - * 🔒 Commit signieren (SSH oder GPG) - * 🏷 Git-Tag signieren - * ⬆️ Push zu GitHub - -Beispiel: - - ```bash - python versioning.py --level minor --push - ``` - -* Wählt automatisch SSH oder GPG zur Signatur -* Optional --no-sign, um ohne Signatur zu arbeiten ---- - -## ⚙️ Installation +## Lokale Entwicklung (Legacy-Code) +Der vorhandene Legacy-Stand kann weiterhin lokal gestartet werden: ```bash -git clone https://github.com/OliverGiertz/rss-news.git -cd rss-news python -m venv .venv source .venv/bin/activate pip install -r requirements.txt +streamlit run app.py ``` ---- +Hinweis: Diese App ist funktional historisch und wird durch die neue Architektur ersetzt. -## ▶️ Starten der App +## Deployment-Zielbild +- Betrieb auf Hetzner +- Reverse Proxy via CloudPanel/Nginx +- Produktive Domain: `news.vanityontour.de` +- Bis zur Fertigstellung: Redirect auf `https://vanityontour.de` -streamlit run app.py +## Sicherheit +- Keine Secrets im Repository +- `.env` lokal/auf Server, nie committen +- Auth-Pflicht fuer die neue WebApp +- spaeter optional: Passkeys/WebAuthn + +## Rechtlicher Hinweis +Dieses Projekt verarbeitet nur Quellen mit dokumentierter Nutzungsgrundlage. Vor produktiver Nutzung ist eine finale rechtliche Pruefung der ausgewaehlten Feeds notwendig. diff --git a/__version__.py b/__version__.py index 3585554..6a6d0f8 100644 --- a/__version__.py +++ b/__version__.py @@ -1 +1 @@ -VERSION = "1.5.2" +VERSION = "1.7.1" diff --git a/app.py b/app.py index 34cd8d5..f161a65 100644 --- a/app.py +++ b/app.py @@ -1,3 +1,5 @@ +# app.py + import streamlit as st from datetime import datetime from main import ( @@ -6,138 +8,1102 @@ from main import ( load_articles, save_articles, process_articles, - rewrite_articles + rewrite_articles, + upload_articles_to_wp ) from utils.dalle_generator import generate_dalle_image +from utils.wordpress_uploader import WordPressUploader +from utils.css_loader import load_css, apply_dark_theme +from utils.config import validate_env import os +from collections import Counter +import time -st.set_page_config(page_title="📰 RSS Artikel Manager", layout="wide") -st.title("📰 RSS Artikel Manager") +# === Page Configuration === +st.set_page_config( + page_title="📰 RSS Artikel Manager", + layout="wide", + initial_sidebar_state="collapsed" +) -# === Sidebar: Feed-Verwaltung === -st.sidebar.header("📡 RSS Feeds verwalten") -feeds = load_feeds() -new_feed = st.sidebar.text_input("Neuen RSS Feed hinzufügen") -if st.sidebar.button("Feed hinzufügen"): - if new_feed and new_feed not in [f.get("url", f) for f in feeds]: - feeds.append({"url": new_feed}) - save_feeds(feeds) - st.sidebar.success("Feed hinzugefügt") +# === CSS & Theme laden === +load_css() +apply_dark_theme() -if st.sidebar.button("🔄 Alle Feeds neu laden"): - existing_ids = [a["id"] for a in load_articles()] - process_articles(existing_ids) - st.rerun() +# === Environment-Validierung (.env) === +env_check = validate_env() +if not env_check.get("ok"): + st.error("🔒 Sicherheits-/Konfigurationshinweis: Bitte .env korrekt konfigurieren.") + for msg in env_check.get("errors", []): + st.markdown(f"- ❌ {msg}") + for msg in env_check.get("warnings", []): + st.markdown(f"- ⚠️ {msg}") +elif env_check.get("warnings"): + st.info("ℹ️ Hinweise zur Konfiguration:") + for msg in env_check.get("warnings", []): + st.markdown(f"- ⚠️ {msg}") -if st.sidebar.button("✍️ Artikel umschreiben (Rewrite)"): - rewrite_articles() - st.rerun() +# === Initialize Session State === +if 'selected_articles' not in st.session_state: + st.session_state.selected_articles = set() +if 'search_query' not in st.session_state: + st.session_state.search_query = "" +if 'status_filter' not in st.session_state: + st.session_state.status_filter = "New" +if 'feed_filter' not in st.session_state: + st.session_state.feed_filter = "Alle" -# === Hauptbereich: Artikelübersicht === -st.header("📋 Artikelübersicht") -status_filter = st.selectbox("Status filtern", ["Alle", "New", "Rewrite", "Process", "Online", "On Hold", "Trash"], index=1) +# === Helper Functions === +def get_status_badge(status): + """Erstellt einen farbigen Status-Badge""" + status_classes = { + "New": "status-new", + "Rewrite": "status-rewrite", + "Process": "status-process", + "Online": "status-online", + "On Hold": "status-hold", + "Trash": "status-trash", + "WordPress Pending": "status-wp-pending" + } + class_name = status_classes.get(status, "status-new") + return f'{status}' -all_articles = load_articles() -articles = all_articles -if status_filter != "Alle": - articles = [a for a in all_articles if a.get("status") == status_filter] +def format_date(date_str): + """Formatiert Datum für bessere Lesbarkeit""" + try: + if "GMT" in date_str or "+" in date_str: + return datetime.strptime(date_str, "%a, %d %b %Y %H:%M:%S %z").strftime("%d.%m.%Y %H:%M") + else: + return date_str[:16].replace("T", " ") + except: + return date_str[:10] -# === Artikel-Tabelle === -if articles: - st.markdown("### 📄 Übersichtstabelle") - st.write("**Spaltenübersicht:** Auswahl | Datum | Titel | Zusammenfassung | Wörter | Tags | Status") +def get_word_count(text): + """Zählt Wörter im Text""" + return len(text.split()) if text else 0 - for article in articles: +def show_notification(message, type="success"): + """Zeigt eine Benachrichtigung an""" + if type == "success": + st.success(message) + elif type == "error": + st.error(message) + elif type == "warning": + st.warning(message) + elif type == "info": + st.info(message) + +def test_wordpress_connection(): + """Testet die WordPress-Verbindung""" + try: + uploader = WordPressUploader() + success, message = uploader.test_connection() + return success, message + except Exception as e: + return False, f"Fehler beim Testen der Verbindung: {str(e)}" + +# === Header === +st.markdown(""" +
+

📰 RSS Artikel Manager

+

Moderne Verwaltung deiner RSS-Feeds und Artikel mit WordPress-Integration

+
+""", unsafe_allow_html=True) + +# === Tab Navigation === +tab1, tab2, tab3, tab4, tab5, tab6 = st.tabs([ + "📋 Dashboard", + "📰 Artikel", + "📡 Feeds", + "🖼️ Bilder", + "📊 Statistiken", + "🔧 WordPress" +]) + +# === Dashboard Tab === +with tab1: + st.header("📊 Übersicht") + + # Lade Daten + all_articles = load_articles() + feeds = load_feeds() + + # Statistiken + col1, col2, col3, col4, col5 = st.columns(5) + + with col1: + st.markdown(""" +
+
{}
+
Gesamt Artikel
+
+ """.format(len(all_articles)), unsafe_allow_html=True) + + with col2: + new_count = len([a for a in all_articles if a.get("status") == "New"]) + st.markdown(""" +
+
{}
+
Neue Artikel
+
+ """.format(new_count), unsafe_allow_html=True) + + with col3: + process_count = len([a for a in all_articles if a.get("status") == "Process"]) + st.markdown(""" +
+
{}
+
Bereit für WP
+
+ """.format(process_count), unsafe_allow_html=True) + + with col4: + wp_pending_count = len([a for a in all_articles if a.get("status") == "WordPress Pending"]) + st.markdown(""" +
+
{}
+
WP Ausstehend
+
+ """.format(wp_pending_count), unsafe_allow_html=True) + + with col5: + online_count = len([a for a in all_articles if a.get("status") == "Online"]) + st.markdown(""" +
+
{}
+
Online
+
+ """.format(online_count), unsafe_allow_html=True) + + st.markdown("
", unsafe_allow_html=True) + + # Quick Actions + st.subheader("⚡ Schnellaktionen") + + col1, col2, col3, col4 = st.columns(4) + + with col1: + if st.button("🔄 Alle Feeds aktualisieren", use_container_width=True): + with st.spinner("Feeds werden aktualisiert..."): + existing_ids = [a["id"] for a in all_articles] + process_articles(existing_ids) + show_notification("Feeds erfolgreich aktualisiert!") + time.sleep(1) + st.rerun() + + with col2: + if st.button("✍️ Artikel umschreiben", use_container_width=True): + rewrite_count = len([a for a in all_articles if a.get("status") == "Rewrite"]) + if rewrite_count > 0: + with st.spinner(f"{rewrite_count} Artikel werden umgeschrieben..."): + rewrite_articles() + show_notification(f"{rewrite_count} Artikel erfolgreich umgeschrieben!") + time.sleep(1) + st.rerun() + else: + show_notification("Keine Artikel zum Umschreiben gefunden.", "info") + + with col3: + if st.button("📤 WordPress Upload", use_container_width=True): + process_count = len([a for a in all_articles if a.get("status") == "Process"]) + if process_count > 0: + with st.spinner(f"{process_count} Artikel werden zu WordPress hochgeladen..."): + upload_results = upload_articles_to_wp() + + if upload_results.get('error'): + show_notification(f"Fehler beim WordPress-Upload: {upload_results['error']}", "error") + else: + successful = upload_results.get('successful', 0) + failed = upload_results.get('failed', 0) + duplicates = upload_results.get('duplicates', 0) + + if successful > 0: + show_notification(f"✅ {successful} Artikel erfolgreich zu WordPress hochgeladen!") + if failed > 0: + show_notification(f"⚠️ {failed} Artikel konnten nicht hochgeladen werden.", "warning") + if duplicates > 0: + show_notification(f"ℹ️ {duplicates} Duplikate übersprungen.", "info") + + time.sleep(2) + st.rerun() + else: + show_notification("Keine Artikel für WordPress-Upload gefunden.", "info") + + with col4: + if st.button("🧹 Aufräumen", use_container_width=True): + trash_count = len([a for a in all_articles if a.get("status") == "Trash"]) + if trash_count > 0: + show_notification(f"{trash_count} Artikel im Papierkorb gefunden.", "info") + else: + show_notification("Keine Artikel zum Aufräumen gefunden.", "info") + + # WordPress-Status-Übersicht + if wp_pending_count > 0 or online_count > 0: + st.subheader("🔗 WordPress-Status") + + wp_articles = [a for a in all_articles if a.get("status") in ["WordPress Pending", "Online"]] + for article in wp_articles[:5]: # Nur die ersten 5 anzeigen + st.markdown(f""" +
+ {article.get('title', 'Kein Titel')} + {get_status_badge(article.get('status', 'Unknown'))} +
+ WP Post ID: {article.get('wp_post_id', 'Unbekannt')} | Upload: {format_date(article.get('wp_upload_date', ''))} +
+ """, unsafe_allow_html=True) + + # Neueste Artikel Preview + st.subheader("🕒 Neueste Artikel") + recent_articles = sorted(all_articles, key=lambda x: x.get("date", ""), reverse=True)[:5] + + for article in recent_articles: + st.markdown(f""" +
+
+
+

{article.get('title', 'Kein Titel')}

+ +
+
+ {get_status_badge(article.get('status', 'New'))} +
+
+
+ """, unsafe_allow_html=True) + +# === Artikel Tab === +with tab2: + st.header("📰 Artikel verwalten") + + # Filter Section + st.markdown('
', unsafe_allow_html=True) + st.subheader("🔍 Filter & Suche") + + col1, col2, col3 = st.columns(3) + + with col1: + status_options = ["Alle", "New", "Rewrite", "Process", "Online", "On Hold", "Trash", "WordPress Pending"] + st.session_state.status_filter = st.selectbox( + "Status", + status_options, + index=status_options.index(st.session_state.status_filter) + ) + + with col2: + # Feed Filter + source_to_name = {f.get("url"): f.get("name", "Unbekannt") for f in feeds} + source_counter = Counter([a.get("source", "Unbekannt") for a in all_articles]) + + feed_options = ["Alle"] + feed_map = {"Alle": None} + + for source, count in source_counter.items(): + name = source_to_name.get(source, "Unbekannt") + label = f"{name} ({count})" + feed_options.append(label) + feed_map[label] = source + + selected_feed_label = st.selectbox("Feed", feed_options) + st.session_state.feed_filter = selected_feed_label + + with col3: + st.session_state.search_query = st.text_input( + "Suche", + value=st.session_state.search_query, + placeholder="Titel, Text oder Tags durchsuchen..." + ) + + st.markdown('
', unsafe_allow_html=True) + + # Filter anwenden + filtered_articles = all_articles + + # Status Filter + if st.session_state.status_filter != "Alle": + filtered_articles = [a for a in filtered_articles if a.get("status") == st.session_state.status_filter] + + # Feed Filter + if st.session_state.feed_filter != "Alle": + selected_source = feed_map[st.session_state.feed_filter] + filtered_articles = [a for a in filtered_articles if a.get("source") == selected_source] + + # Suche + if st.session_state.search_query: + query = st.session_state.search_query.lower() + filtered_articles = [ + a for a in filtered_articles + if query in a.get("title", "").lower() + or query in a.get("text", "").lower() + or any(query in tag.lower() for tag in a.get("tags", [])) + ] + + # Ergebnisse und Massenoperationen + col1, col2 = st.columns([2, 1]) + + with col1: + st.write(f"**{len(filtered_articles)} Artikel gefunden**") + + with col2: + # Select All / None Buttons + if filtered_articles: + col_select_1, col_select_2 = st.columns(2) + with col_select_1: + if st.button("✓ Alle auswählen", key="select_all"): + for article in filtered_articles: + st.session_state.selected_articles.add(article['id']) + st.rerun() + + with col_select_2: + if st.button("✗ Auswahl aufheben", key="select_none"): + st.session_state.selected_articles.clear() + st.rerun() + + # Bulk Operations Section + selected_count = len(st.session_state.selected_articles) + if selected_count > 0: + st.markdown(f""" +
+

⚡ Massenoperationen ({selected_count} Artikel ausgewählt)

+
+ """, unsafe_allow_html=True) + + # Quick Actions für ausgewählte Artikel + col1, col2, col3, col4, col5 = st.columns(5) + + with col1: + if st.button("🔄 Feeds aktualisieren", use_container_width=True, key="bulk_update_feeds"): + with st.spinner("Feeds werden aktualisiert..."): + existing_ids = [a["id"] for a in all_articles] + process_articles(existing_ids) + show_notification("Feeds erfolgreich aktualisiert!") + time.sleep(1) + st.rerun() + + with col2: + # Bulk Status Change + bulk_status = st.selectbox( + "Status ändern", + ["--Auswählen--"] + ["New", "Rewrite", "Process", "Online", "On Hold", "Trash", "WordPress Pending"], + key="bulk_status" + ) + + if bulk_status != "--Auswählen--" and st.button("Status anwenden", key="apply_bulk_status"): + changed_count = 0 + for article in all_articles: + if article["id"] in st.session_state.selected_articles: + article["status"] = bulk_status + changed_count += 1 + + if changed_count > 0: + save_articles(all_articles) + show_notification(f"{changed_count} Artikel auf '{bulk_status}' gesetzt!") + st.session_state.selected_articles.clear() + st.rerun() + + with col3: + # Bulk Rewrite + rewrite_selected_count = len([a for a in all_articles if a["id"] in st.session_state.selected_articles and a.get("status") != "Rewrite"]) + if st.button(f"✍️ Artikel umschreiben ({rewrite_selected_count})", use_container_width=True, key="bulk_rewrite"): + # Ausgewählte Artikel auf "Rewrite" setzen + for article in all_articles: + if article["id"] in st.session_state.selected_articles: + article["status"] = "Rewrite" + + save_articles(all_articles) + + # Umschreiben starten + with st.spinner(f"{rewrite_selected_count} Artikel werden umgeschrieben..."): + rewrite_articles() + show_notification(f"{rewrite_selected_count} Artikel erfolgreich umgeschrieben!") + st.session_state.selected_articles.clear() + time.sleep(1) + st.rerun() + + with col4: + # Bulk WordPress Upload + wp_ready_selected = len([a for a in all_articles if a["id"] in st.session_state.selected_articles and a.get("status") == "Process"]) + if wp_ready_selected > 0: + if st.button(f"📤 WordPress Upload ({wp_ready_selected})", use_container_width=True, key="bulk_wp_upload"): + with st.spinner(f"{wp_ready_selected} Artikel werden zu WordPress hochgeladen..."): + # Nur die ausgewählten "Process" Artikel hochladen + selected_process_articles = [a for a in all_articles if a["id"] in st.session_state.selected_articles and a.get("status") == "Process"] + + if selected_process_articles: + from utils.wordpress_uploader import upload_articles_to_wordpress + upload_results = upload_articles_to_wordpress(selected_process_articles) + + if upload_results.get('error'): + show_notification(f"Fehler beim WordPress-Upload: {upload_results['error']}", "error") + else: + successful = upload_results.get('successful', 0) + failed = upload_results.get('failed', 0) + duplicates = upload_results.get('duplicates', 0) + + # Status der erfolgreich hochgeladenen Artikel ändern + if successful > 0: + for detail in upload_results.get('details', []): + if detail.get('success'): + article_id = detail.get('article_id') + for article in all_articles: + if article.get('id') == article_id: + article['status'] = "WordPress Pending" + article['wp_upload_date'] = datetime.now().isoformat() + article['wp_post_id'] = detail.get('wp_post_id') + break + save_articles(all_articles) + + if successful > 0: + show_notification(f"✅ {successful} Artikel erfolgreich zu WordPress hochgeladen!") + if failed > 0: + show_notification(f"⚠️ {failed} Artikel konnten nicht hochgeladen werden.", "warning") + if duplicates > 0: + show_notification(f"ℹ️ {duplicates} Duplikate übersprungen.", "info") + + st.session_state.selected_articles.clear() + time.sleep(2) + st.rerun() + else: + st.markdown("*Keine Process-Artikel ausgewählt*") + + with col5: + # Bulk Delete/Trash + if st.button("🗑️ In Papierkorb", use_container_width=True, key="bulk_trash"): + trash_count = 0 + for article in all_articles: + if article["id"] in st.session_state.selected_articles: + article["status"] = "Trash" + trash_count += 1 + + if trash_count > 0: + save_articles(all_articles) + show_notification(f"{trash_count} Artikel in Papierkorb verschoben!") + st.session_state.selected_articles.clear() + st.rerun() + + # Artikel Cards + for article in filtered_articles: has_incomplete_images = any( not all(k in img and img[k] for k in ("caption", "copyright", "copyright_url")) for img in article.get("images", []) ) - - cols = st.columns([0.05, 0.1, 0.2, 0.25, 0.05, 0.2, 0.15]) - with cols[0]: - st.checkbox("", key=f"select_{article['id']}") - with cols[1]: - date_str = article["date"] - if "GMT" in date_str or "+" in date_str: - date_str = datetime.strptime(date_str, "%a, %d %b %Y %H:%M:%S %z").strftime("%d.%m.%y") + + # Article Card + st.markdown('
', unsafe_allow_html=True) + + # Header with Checkbox + col_check, col_content, col_status = st.columns([0.3, 2.7, 1]) + + with col_check: + # Checkbox für Artikel-Auswahl + is_selected = article["id"] in st.session_state.selected_articles + if st.checkbox("", value=is_selected, key=f"check_{article['id']}"): + st.session_state.selected_articles.add(article['id']) else: - date_str = date_str[:10] - st.markdown(date_str) - with cols[2]: - title = f"**{article['title']}**" + st.session_state.selected_articles.discard(article['id']) + + with col_content: + title = article.get("title", "Kein Titel") if has_incomplete_images: title += " ⚠️" - st.markdown(title) - with cols[3]: - st.markdown(article.get("summary", "")[:150]) - with cols[4]: - st.markdown(str(len(article.get("text", "").split()))) - with cols[5]: - st.markdown(", ".join(article.get("tags", []))) - with cols[6]: - status_options = ["New", "Rewrite", "Process", "Online", "On Hold", "Trash"] + st.markdown(f'

{title}

', unsafe_allow_html=True) + st.markdown(f'', unsafe_allow_html=True) + + # WordPress-Info anzeigen falls vorhanden + if article.get("wp_post_id"): + st.markdown(f'', unsafe_allow_html=True) + + with col_status: + st.markdown(get_status_badge(article.get("status", "New")), unsafe_allow_html=True) + + # Content Preview + summary = article.get("summary", "")[:200] + if len(summary) == 200: + summary += "..." + st.markdown(f'
{summary}
', unsafe_allow_html=True) + + # Meta Info + col1, col2, col3 = st.columns(3) + with col1: + st.markdown(f'', unsafe_allow_html=True) + with col2: + tags = article.get("tags", []) + if tags: + st.markdown(f'', unsafe_allow_html=True) + with col3: + source_name = source_to_name.get(article.get("source", ""), "Unbekannt") + st.markdown(f'', unsafe_allow_html=True) + + # Actions + col1, col2, col3, col4, col5 = st.columns(5) + + with col1: + # Status ändern + status_options = ["New", "Rewrite", "Process", "Online", "On Hold", "Trash", "WordPress Pending"] current_status = article.get("status", "New") - new_status = st.selectbox("", status_options, index=status_options.index(current_status), key=f"status_{article['id']}") + new_status = st.selectbox( + "Status", + status_options, + index=status_options.index(current_status), + key=f"status_{article['id']}" + ) + if new_status != current_status: - article["status"] = new_status - # Speichern in vollständiger Artikelliste + # Artikel in der Liste finden und aktualisieren for idx, art in enumerate(all_articles): if art["id"] == article["id"]: - all_articles[idx] = article + all_articles[idx]["status"] = new_status break save_articles(all_articles) + show_notification(f"Status auf '{new_status}' geändert!") + time.sleep(0.5) st.rerun() - - with st.expander(f"🔍 {article['title']}"): - st.markdown("#### ✍️ Artikeltext") - st.code(f"{article['title']}\n\n{article['text']}\n\nQuelle: {article['link']}", language="markdown") - - st.markdown("#### 🌿 Tags") - st.code(", ".join(article.get("tags", [])), language="markdown") - - st.markdown("#### 🖼️ Bilder") - for i, img in enumerate(article.get("images", [])): - st.image(img["url"], caption=img.get("caption", "Kein Titel"), use_column_width=True) - - with st.form(f"edit_image_{article['id']}_{i}", clear_on_submit=False): - caption = st.text_input("Bildtitel", value=img.get("caption", "")) - copyright = st.text_input("Copyright", value=img.get("copyright", "")) - copyright_url = st.text_input("Quelle", value=img.get("copyright_url", "")) - if st.form_submit_button("Änderungen speichern"): - img["caption"] = caption or "Kein Bildtitel vorhanden" - img["copyright"] = copyright or "Unbekannt" - img["copyright_url"] = copyright_url or "#" - # Speichern in vollständiger Artikelliste - for idx, art in enumerate(all_articles): - if art["id"] == article["id"]: - all_articles[idx] = article - break - save_articles(all_articles) - st.success("Bilddaten gespeichert") - + + with col2: + if st.button("📋 Text kopieren", key=f"copy_{article['id']}"): + text_to_copy = f"{article['title']}\n\n{article['text']}\n\nQuelle: {article['link']}" + st.code(text_to_copy, language="markdown") + show_notification("Text bereit zum Kopieren!") + + with col3: + if st.button("🔗 Original öffnen", key=f"link_{article['id']}"): + st.markdown(f"[🔗 Artikel öffnen]({article.get('link', '#')})") + + with col4: + # WordPress Upload Button für einzelne Artikel + if article.get("status") == "Process": + if st.button("📤 WordPress", key=f"wp_upload_{article['id']}"): + with st.spinner("Lade zu WordPress hoch..."): + from utils.wordpress_uploader import upload_single_article_to_wordpress + success, message, wp_post_id = upload_single_article_to_wordpress(article) + + if success: + # Status ändern + for idx, art in enumerate(all_articles): + if art["id"] == article["id"]: + all_articles[idx]["status"] = "WordPress Pending" + all_articles[idx]["wp_upload_date"] = datetime.now().isoformat() + all_articles[idx]["wp_post_id"] = wp_post_id + break + save_articles(all_articles) + show_notification("✅ Erfolgreich zu WordPress hochgeladen!") + else: + show_notification(f"❌ WordPress-Upload fehlgeschlagen: {message}", "error") + + time.sleep(1) + st.rerun() + + with col5: + # Details anzeigen + if st.button("📖 Details", key=f"details_{article['id']}"): + st.session_state[f"show_details_{article['id']}"] = not st.session_state.get(f"show_details_{article['id']}", False) + + # Details Section (wenn erweitert) + if st.session_state.get(f"show_details_{article['id']}", False): + st.markdown("---") + + # Artikel Text + with st.expander("📝 Volltext", expanded=False): + st.code(article.get("text", ""), language="markdown") + + # Tags bearbeiten + with st.expander("🏷️ Tags bearbeiten", expanded=False): + current_tags = ", ".join(article.get("tags", [])) + new_tags = st.text_area("Tags (getrennt durch Komma)", value=current_tags, key=f"tags_{article['id']}") + + if st.button("Tags speichern", key=f"save_tags_{article['id']}"): + tag_list = [tag.strip() for tag in new_tags.split(",") if tag.strip()] + for idx, art in enumerate(all_articles): + if art["id"] == article["id"]: + all_articles[idx]["tags"] = tag_list + break + save_articles(all_articles) + show_notification("Tags gespeichert!") + st.rerun() + + # Bilder + if article.get("images"): + with st.expander("🖼️ Bilder verwalten", expanded=False): + for i, img in enumerate(article.get("images", [])): + col1, col2 = st.columns([1, 2]) + + with col1: + st.image(img["url"], width=200) + + with col2: + caption = st.text_input("Bildtitel", value=img.get("caption", ""), key=f"caption_{article['id']}_{i}") + copyright_text = st.text_input("Copyright", value=img.get("copyright", ""), key=f"copyright_{article['id']}_{i}") + copyright_url = st.text_input("Quelle URL", value=img.get("copyright_url", ""), key=f"copyright_url_{article['id']}_{i}") + + if st.button("Bilddaten speichern", key=f"save_img_{article['id']}_{i}"): + img["caption"] = caption or "Kein Bildtitel vorhanden" + img["copyright"] = copyright_text or "Unbekannt" + img["copyright_url"] = copyright_url or "#" + + for idx, art in enumerate(all_articles): + if art["id"] == article["id"]: + all_articles[idx] = article + break + save_articles(all_articles) + show_notification("Bilddaten gespeichert!") + st.rerun() + + # DALL-E Bildgenerierung if st.button("🪄 KI-Bild generieren", key=f"dalle_{article['id']}"): if not any(img.get("copyright") == "OpenAI DALL·E" for img in article.get("images", [])): - prompt = article["title"] - image_url = generate_dalle_image(prompt) - if image_url: - article.setdefault("images", []).append({ - "url": image_url, - "alt": f"KI-generiertes Titelbild zu: {prompt}", - "caption": f"KI-generiertes Titelbild zu: {prompt}", - "copyright": "OpenAI DALL·E", - "copyright_url": "https://openai.com/dall-e" - }) - for idx, art in enumerate(all_articles): - if art["id"] == article["id"]: - all_articles[idx] = article - break - save_articles(all_articles) - st.success("DALL·E-Bild erfolgreich hinzugefügt") - st.rerun() - else: - st.error("Fehler beim Erzeugen des Bildes.") + with st.spinner("Bild wird generiert..."): + prompt = article["title"] + image_url = generate_dalle_image(prompt) + if image_url: + article.setdefault("images", []).append({ + "url": image_url, + "alt": f"KI-generiertes Titelbild zu: {prompt}", + "caption": f"KI-generiertes Titelbild zu: {prompt}", + "copyright": "OpenAI DALL·E", + "copyright_url": "https://openai.com/dall-e" + }) + for idx, art in enumerate(all_articles): + if art["id"] == article["id"]: + all_articles[idx] = article + break + save_articles(all_articles) + show_notification("DALL·E-Bild erfolgreich hinzugefügt!") + st.rerun() + else: + show_notification("Fehler beim Erzeugen des Bildes.", "error") else: - st.info("Ein KI-generiertes Bild ist bereits vorhanden.") + show_notification("Ein KI-generiertes Bild ist bereits vorhanden.", "info") + + st.markdown('
', unsafe_allow_html=True) -else: - st.info("Keine Artikel für den gewählten Status gefunden.") +# === Feeds Tab === +with tab3: + st.header("📡 RSS Feeds verwalten") + + # Feed hinzufügen + with st.expander("➕ Neuen Feed hinzufügen", expanded=False): + col1, col2 = st.columns(2) + + with col1: + new_url = st.text_input("Feed URL") + with col2: + new_name = st.text_input("Feed Name") + + if st.button("Feed hinzufügen", use_container_width=True): + if new_url and new_name: + if not any(f.get("url") == new_url for f in feeds): + feeds.append({"url": new_url, "name": new_name}) + save_feeds(feeds) + show_notification(f"Feed '{new_name}' hinzugefügt!") + st.rerun() + else: + show_notification("Dieser Feed existiert bereits.", "warning") + else: + show_notification("Bitte URL und Name eingeben.", "error") + + # Feeds anzeigen + for idx, feed in enumerate(feeds): + feed_url = feed.get("url", "") + feed_name = feed.get("name", "Unbekannt") + article_count = sum(1 for a in all_articles if a.get("source") == feed_url) + + st.markdown(f""" +
+
+
+

{feed_name}

+ + +
+
+ {article_count} Artikel +
+
+
+ """, unsafe_allow_html=True) + + # Feed Actions + col1, col2, col3 = st.columns(3) + + with col1: + if st.button("✏️ Bearbeiten", key=f"edit_feed_{idx}"): + st.session_state[f"edit_feed_{idx}"] = not st.session_state.get(f"edit_feed_{idx}", False) + + with col2: + if st.button("🔄 Aktualisieren", key=f"refresh_feed_{idx}"): + with st.spinner("Feed wird aktualisiert..."): + existing_ids = [a["id"] for a in all_articles] + # Hier könntest du eine einzelne Feed-Update-Funktion implementieren + process_articles(existing_ids) + show_notification(f"Feed '{feed_name}' aktualisiert!") + st.rerun() + + with col3: + if st.button("🗑️ Löschen", key=f"delete_feed_{idx}"): + feeds.pop(idx) + save_feeds(feeds) + show_notification(f"Feed '{feed_name}' gelöscht!", "warning") + st.rerun() + + # Edit Form + if st.session_state.get(f"edit_feed_{idx}", False): + with st.form(f"edit_form_{idx}"): + new_feed_url = st.text_input("URL", value=feed_url) + new_feed_name = st.text_input("Name", value=feed_name) + + if st.form_submit_button("Änderungen speichern"): + feeds[idx]["url"] = new_feed_url + feeds[idx]["name"] = new_feed_name + save_feeds(feeds) + show_notification("Feed aktualisiert!") + st.session_state[f"edit_feed_{idx}"] = False + st.rerun() + +# === Bilder Tab === +with tab4: + st.header("🖼️ Bilderverwaltung") + + # Alle Bilder sammeln + all_images = [] + for article in all_articles: + for img in article.get("images", []): + img_data = img.copy() + img_data["article_title"] = article.get("title", "Unbekannt") + img_data["article_id"] = article.get("id") + all_images.append(img_data) + + if all_images: + st.write(f"**{len(all_images)} Bilder gefunden**") + + # Bilder in Spalten anzeigen + cols = st.columns(3) + for idx, img in enumerate(all_images): + with cols[idx % 3]: + st.markdown('
', unsafe_allow_html=True) + st.image(img["url"], use_column_width=True) + st.markdown(f'{img.get("caption", "Kein Titel")}', unsafe_allow_html=True) + st.markdown(f'
📰 {img["article_title"]}
', unsafe_allow_html=True) + st.markdown(f'
©️ {img.get("copyright", "Unbekannt")}
', unsafe_allow_html=True) + + if img.get("copyright_url") and img["copyright_url"] != "#": + st.markdown(f'🔗 Quelle', unsafe_allow_html=True) + st.markdown('
', unsafe_allow_html=True) + else: + st.info("Keine Bilder gefunden.") + +# === Statistiken Tab === +with tab5: + st.header("📊 Detaillierte Statistiken") + + # Status Verteilung + status_counts = Counter([a.get("status", "New") for a in all_articles]) + + col1, col2 = st.columns(2) + + with col1: + st.subheader("📈 Status Verteilung") + for status, count in status_counts.items(): + percentage = (count / len(all_articles) * 100) if all_articles else 0 + st.markdown(f"{get_status_badge(status)} {count} ({percentage:.1f}%)", unsafe_allow_html=True) + + with col2: + st.subheader("📡 Artikel pro Feed") + feed_counts = Counter([source_to_name.get(a.get("source", ""), "Unbekannt") for a in all_articles]) + for feed_name, count in feed_counts.most_common(): + st.markdown(f'
{feed_name}: {count} Artikel
', unsafe_allow_html=True) + + # WordPress-Statistiken + st.subheader("🔗 WordPress-Statistiken") + wp_articles = [a for a in all_articles if a.get("wp_post_id")] + + if wp_articles: + col1, col2, col3 = st.columns(3) + + with col1: + st.markdown(""" +
+
{}
+
WordPress Artikel
+
+ """.format(len(wp_articles)), unsafe_allow_html=True) + + with col2: + pending_count = len([a for a in wp_articles if a.get("status") == "WordPress Pending"]) + st.markdown(""" +
+
{}
+
Ausstehend
+
+ """.format(pending_count), unsafe_allow_html=True) + + with col3: + online_wp_count = len([a for a in wp_articles if a.get("status") == "Online"]) + st.markdown(""" +
+
{}
+
Online
+
+ """.format(online_wp_count), unsafe_allow_html=True) + + # Neueste WordPress-Uploads + recent_wp = sorted([a for a in wp_articles if a.get("wp_upload_date")], + key=lambda x: x.get("wp_upload_date", ""), reverse=True)[:5] + + if recent_wp: + st.subheader("🕒 Neueste WordPress-Uploads") + for article in recent_wp: + st.markdown(f""" +
+

{article.get('title', 'Kein Titel')}

+ {get_status_badge(article.get('status', 'Unknown'))} + +
+ """, unsafe_allow_html=True) + else: + st.info("Noch keine Artikel zu WordPress hochgeladen.") + + # Weitere Statistiken + st.subheader("📝 Textstatistiken") + + word_counts = [get_word_count(a.get("text", "")) for a in all_articles] + if word_counts: + col1, col2, col3 = st.columns(3) + + with col1: + st.markdown(""" +
+
{}
+
Durchschnittliche Wortanzahl
+
+ """.format(sum(word_counts) // len(word_counts)), unsafe_allow_html=True) + + with col2: + st.markdown(""" +
+
{}
+
Längster Artikel (Wörter)
+
+ """.format(max(word_counts)), unsafe_allow_html=True) + + with col3: + st.markdown(""" +
+
{}
+
Kürzester Artikel (Wörter)
+
+ """.format(min(word_counts)), unsafe_allow_html=True) + + # Tag Cloud Simulation + st.subheader("🏷️ Häufigste Tags") + all_tags = [] + for article in all_articles: + all_tags.extend(article.get("tags", [])) + + if all_tags: + tag_counts = Counter(all_tags) + for tag, count in tag_counts.most_common(10): + st.markdown(f'
{tag}: {count}x verwendet
', unsafe_allow_html=True) + else: + st.info("Keine Tags gefunden.") + +# === WordPress Tab === +with tab6: + st.header("🔧 WordPress-Integration") + + # Verbindungstest + st.subheader("🔗 Verbindungstest") + + col1, col2 = st.columns(2) + + with col1: + if st.button("🧪 WordPress-Verbindung testen", use_container_width=True): + with st.spinner("Teste Verbindung..."): + success, message = test_wordpress_connection() + + if success: + show_notification(f"✅ {message}") + else: + show_notification(f"❌ {message}", "error") + + with col2: + # WordPress-Konfiguration anzeigen + wp_url = os.getenv("WP_BASE_URL", "Nicht konfiguriert") + wp_user = os.getenv("WP_USERNAME", "Nicht konfiguriert") + wp_base64 = os.getenv("WP_AUTH_BASE64", "") + + st.markdown(f""" +
+ WordPress-Konfiguration:
+
+ URL: {wp_url}
+ Benutzer: {wp_user}
+ Passwort: {'✅ Konfiguriert' if os.getenv("WP_PASSWORD") else '❌ Nicht konfiguriert'}
+ Base64 Auth: {'✅ Konfiguriert' if wp_base64 else '❌ Nicht konfiguriert'} +
+
+ """, unsafe_allow_html=True) + + # Sicherheit: Kein Anzeigen sensibler Auth-Details mehr + + # Bulk Upload + st.subheader("📦 Massenupload") + + process_articles_list = [a for a in all_articles if a.get("status") == "Process"] + + if process_articles_list: + st.write(f"**{len(process_articles_list)} Artikel bereit für WordPress-Upload:**") + + # Artikel-Vorschau + for article in process_articles_list[:5]: # Nur die ersten 5 anzeigen + st.markdown(f'
{article.get("title", "Kein Titel")} ({get_word_count(article.get("text", ""))} Wörter)
', unsafe_allow_html=True) + + if len(process_articles_list) > 5: + st.markdown(f'
... und {len(process_articles_list) - 5} weitere
', unsafe_allow_html=True) + + col1, col2 = st.columns(2) + + with col1: + if st.button("📤 Alle zu WordPress hochladen", use_container_width=True): + with st.spinner(f"Lade {len(process_articles_list)} Artikel zu WordPress hoch..."): + upload_results = upload_articles_to_wp() + + # Detaillierte Ergebnisse anzeigen + st.subheader("📊 Upload-Ergebnisse") + + if upload_results.get('error'): + show_notification(f"❌ Fehler: {upload_results['error']}", "error") + else: + col1, col2, col3 = st.columns(3) + + with col1: + st.markdown(""" +
+
{}
+
Erfolgreich
+
+ """.format(upload_results.get('successful', 0)), unsafe_allow_html=True) + with col2: + st.markdown(""" +
+
{}
+
Fehlgeschlagen
+
+ """.format(upload_results.get('failed', 0)), unsafe_allow_html=True) + with col3: + st.markdown(""" +
+
{}
+
Duplikate
+
+ """.format(upload_results.get('duplicates', 0)), unsafe_allow_html=True) + + # Details anzeigen + if upload_results.get('details'): + st.subheader("📋 Upload-Details") + for detail in upload_results['details']: + status_icon = "✅" if detail['success'] else "❌" + st.markdown(f'
{status_icon} {detail["title"]}: {detail["message"]}
', unsafe_allow_html=True) + + time.sleep(2) + st.rerun() + + with col2: + st.markdown(""" +
+ 💡 Info:
+
+ Artikel erhalten den Status 'WordPress Pending' nach erfolgreichem Upload. +
+
+ """, unsafe_allow_html=True) + + else: + st.info("Keine Artikel mit Status 'Process' gefunden. Artikel müssen zuerst umgeschrieben werden.") + + # WordPress-Artikel-Übersicht + st.subheader("📋 WordPress-Artikel-Übersicht") + + wp_articles = [a for a in all_articles if a.get("wp_post_id")] + + if wp_articles: + # Filter für WordPress-Artikel + wp_status_filter = st.selectbox( + "WordPress-Status filtern", + ["Alle", "WordPress Pending", "Online"], + key="wp_status_filter" + ) + + filtered_wp_articles = wp_articles + if wp_status_filter != "Alle": + filtered_wp_articles = [a for a in wp_articles if a.get("status") == wp_status_filter] + + st.write(f"**{len(filtered_wp_articles)} WordPress-Artikel gefunden**") + + # WordPress-Artikel anzeigen + for article in filtered_wp_articles: + st.markdown(f""" +
+
+
+ {article.get('title', 'Kein Titel')}
+ WP ID: {article.get('wp_post_id')} | Upload: {format_date(article.get('wp_upload_date', ''))} +
+
+ {get_status_badge(article.get('status', 'Unknown'))} +
+
+
+ """, unsafe_allow_html=True) + + else: + st.info("Noch keine Artikel zu WordPress hochgeladen.") + + # Konfigurationshilfe + st.subheader("⚙️ Konfiguration") + + with st.expander("📋 .env-Datei Vorlage", expanded=False): + st.code(""" +# WordPress-Konfiguration +WP_BASE_URL=https://your-site.tld + +# Entweder Base64 (empfohlen) ODER Benutzername/Passwort (Application Password) +WP_AUTH_BASE64= +# Oder alternativ: +WP_USERNAME= +WP_PASSWORD= + +# OpenAI-Konfiguration (optional für Umschreibung) +OPENAI_API_KEY= + """, language="bash") + + with st.expander("🔑 Base64-Authentifizierung verstehen", expanded=False): + st.markdown(""" +
+

WordPress REST API Authentifizierung:

+
+ Die WordPress REST API nutzt Basic-Auth mit Base64-kodierten Zugangsdaten:
+ Authorization: Basic <base64(username:password)>

+ Empfehlung: In der .env WP_AUTH_BASE64 setzen (aus username:application_password erzeugt).
+ Alternativ können WP_USERNAME und WP_PASSWORD gesetzt werden; dann wird Base64 zur Laufzeit generiert. +
+
+ """, unsafe_allow_html=True) + + with st.expander("📖 WordPress-API Berechtigungen", expanded=False): + st.markdown(""" +
+

Erforderliche Berechtigungen für den WordPress-Benutzer:

+
+ • edit_posts - Beiträge erstellen und bearbeiten
+ • publish_posts - Beiträge veröffentlichen (für Status-Änderungen)
+ • upload_files - Dateien hochladen (für spätere Bild-Uploads)
+ • edit_categories - Kategorien verwalten
+ • edit_tags - Tags verwalten +

+ Anwendungspasswort erstellen:
+ 1. WordPress Admin → Benutzer → Profil
+ 2. Unter "Anwendungspasswörter" neues Passwort erstellen
+ 3. Name: "RSS Feed Manager"
+ 4. Generiertes Passwort in .env-Datei eintragen +
+
+ """, unsafe_allow_html=True) diff --git a/backend/.env.example b/backend/.env.example new file mode 100644 index 0000000..c2dd235 --- /dev/null +++ b/backend/.env.example @@ -0,0 +1,45 @@ +# ─── App ──────────────────────────────────────────────────────────────────── +APP_ENV=development +APP_NAME=rss-news-backend +APP_SECRET_KEY=replace-with-a-long-random-secret +APP_DB_PATH=backend/data/rss_news.db + +APP_ADMIN_USERNAME=admin +APP_ADMIN_PASSWORD=change-me + +SESSION_COOKIE_NAME=rss_news_session +SESSION_MAX_AGE_SECONDS=28800 + +# ─── WordPress ────────────────────────────────────────────────────────────── +WP_BASE_URL=https://your-site.tld +WP_USERNAME=your-wp-username +WP_PASSWORD=your-wp-app-password +# Status für neue Beiträge: draft | future | publish +WORDPRESS_DEFAULT_STATUS=draft + +# ─── OpenAI ───────────────────────────────────────────────────────────────── +OPENAI_API_KEY=sk-... +# gpt-4o-mini empfohlen (Kosten/Qualität) +OPENAI_MODEL=gpt-4o-mini + +# ─── Telegram Bot ──────────────────────────────────────────────────────────── +# Bot-Token von @BotFather +TELEGRAM_BOT_TOKEN=123456789:ABC... +# Chat-ID deines persönlichen Chats oder einer Gruppe +TELEGRAM_CHAT_ID=123456789 +# Zufälliger Secret-Token zur Webhook-Absicherung (mindestens 20 Zeichen) +TELEGRAM_WEBHOOK_SECRET=replace-with-random-secret-min-20-chars + +# ─── N8N API-Key ───────────────────────────────────────────────────────────── +# Wird von N8N im Header X-API-Key mitgeschickt +N8N_API_KEY=replace-with-strong-random-key + +# ─── Pipeline-Einstellungen ────────────────────────────────────────────────── +# Relevanz-Score >= dieser Wert: automatisch verarbeiten (0-100) +PIPELINE_RELEVANCE_AUTO=80 +# Relevanz-Score >= dieser Wert, aber < AUTO: Telegram-Warnung senden +PIPELINE_RELEVANCE_WARN=60 +# Maximale Drafts/Veröffentlichungen pro Tag +PIPELINE_MAX_DRAFTS_PER_DAY=2 +# Bevorzugte Veröffentlichungszeiten (Stunden, kommagetrennt, CET) +PIPELINE_PUBLISH_HOURS=9,14 diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..7d64a65 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,82 @@ +# Backend Skeleton (FastAPI) + +Dieses Verzeichnis enthaelt das technische Grundgeruest fuer den Rebuild von `rss-news`. + +## Start (lokal) + +```bash +python -m venv .venv +source .venv/bin/activate +pip install -r backend/requirements.txt +uvicorn backend.app.main:app --reload --port 8501 +``` + +## Admin UI +- Login: `http://127.0.0.1:8501/admin/login` +- Dashboard: `http://127.0.0.1:8501/admin/dashboard` + +## Environment +- Datei: `backend/.env` +- Vorlage: `backend/.env.example` + +## Endpoints +- `GET /health` - Healthcheck +- `POST /auth/login` - Login mit Admin-User +- `POST /auth/logout` - Logout +- `GET /auth/me` - Aktiver User +- `GET /api/protected` - Geschuetzter Test-Endpoint +- `GET /api/pipeline/status` - Basisstatus inkl. Datensatzzaehler +- `GET /api/sources` - Quellenliste +- `POST /api/sources` - Quelle anlegen +- `GET /api/sources/{source_id}/policy-check` - Policy-Pruefung fuer Quelle +- `GET /api/feeds` - Feedliste +- `POST /api/feeds` - Feed anlegen +- `GET /api/feeds/{feed_id}/policy-check` - Policy-Pruefung fuer Feed +- `GET /api/runs` - Import-/Job-Runs anzeigen +- `GET /api/runs/{run_id}` - Detailansicht eines Runs +- `POST /api/runs` - Run starten +- `POST /api/runs/{run_id}/finish` - Run abschliessen +- `GET /api/articles` - Artikel anzeigen +- `GET /api/articles/{article_id}` - Artikeldetail +- `POST /api/articles/upsert` - Artikel idempotent anlegen/aktualisieren +- `POST /api/articles/{article_id}/transition` - Statuswechsel nach Workflow-Regeln +- `POST /api/articles/{article_id}/review` - Review-Entscheidung (approve/reject) +- `POST /api/ingestion/run` - Feed-Ingestion starten (optional pro Feed) + +## Datenbank +- SQLite-Datei unter `backend/data/rss_news.db` +- Tabellen werden beim App-Start initialisiert. +- Tabellen: `sources`, `feeds`, `runs`, `articles` +- Dedupe-Strategie Artikel: `source_url` -> `(feed_id, source_article_id)` -> `source_hash` + +## Policy-Enforcement +- Ingestion blockiert Feeds automatisch, wenn die zugeordnete Quelle nicht policy-konform ist. +- Mindestanforderungen: `risk_level=green`, `terms_url`, `license_name`, `last_reviewed_at`, `is_enabled=1`. +- Pro importiertem Artikel wird ein `attribution`-Block in `meta_json` gespeichert. + +## Review-Workflow +- Statuskette: `new -> review -> approved -> published` +- Ablehnung im Review setzt auf `rewrite` +- Ungueltige Statuswechsel werden per API blockiert + +## Verifikation +```bash +python -m unittest backend.tests.test_db_repositories +python -m unittest backend.tests.test_ingestion +python -m unittest backend.tests.test_api_auth +``` + +## CI / Online-Auswertung +- GitHub Actions Workflow: `.github/workflows/test.yml` +- Fuehrt Tests inkl. Coverage auf Push/PR gegen `main` aus. + +## Hetzner Smoketest +```bash +BASE_URL="https://news.vanityontour.de" \ +APP_ADMIN_USERNAME="admin" \ +APP_ADMIN_PASSWORD="..." \ +bash scripts/smoke_backend.sh +``` + +## Hinweis +Passwort-Hashing und CSRF/Rate-Limit sind als naechste Ausbaustufe vorgesehen. diff --git a/backend/__init__.py b/backend/__init__.py new file mode 100644 index 0000000..3623851 --- /dev/null +++ b/backend/__init__.py @@ -0,0 +1 @@ +"""Backend package for rss-news rebuild.""" diff --git a/backend/app/__init__.py b/backend/app/__init__.py new file mode 100644 index 0000000..18b665e --- /dev/null +++ b/backend/app/__init__.py @@ -0,0 +1 @@ +"""Application package.""" diff --git a/backend/app/admin_ui.py b/backend/app/admin_ui.py new file mode 100644 index 0000000..a25199c --- /dev/null +++ b/backend/app/admin_ui.py @@ -0,0 +1,1126 @@ +from __future__ import annotations + +import json +from pathlib import Path +import re +import socket +import ssl +import time +from urllib.parse import urlparse +from urllib.parse import urlencode +from urllib.request import Request as UrlRequest, urlopen + +from fastapi import APIRouter, Form, Request +from fastapi.responses import HTMLResponse, RedirectResponse, Response +from fastapi.templating import Jinja2Templates + +from .auth import create_session_token, verify_credentials, verify_session_token +from .config import get_settings +from .ingestion import run_ingestion +from .policy import evaluate_source_policy +from .publisher import enqueue_publish, run_publisher +from .relevance import article_age_days, article_relevance +from .rewrite import generate_article_tags, merge_generated_tags, rewrite_article_text +from .repositories import ( + FeedCreate, + FeedUpdate, + SourceCreate, + SourceUpdate, + delete_feed, + delete_source, + create_feed, + create_source, + get_article_by_id, + get_feed_by_id, + list_articles, + list_articles_page, + bulk_update_wp_post_ids, + list_feeds, + list_publish_jobs, + list_runs, + list_sources, + set_article_image_decision, + upsert_article, + update_feed, + update_source, + update_article_status, + ArticleUpsert, +) +from .workflow import ALLOWED_UI_TRANSITIONS, UI_STATUSES, internal_to_ui_status, ui_to_internal_status + +settings = get_settings() +router = APIRouter(tags=["admin-ui"]) +templates = Jinja2Templates(directory=str(Path(__file__).resolve().parent.parent / "templates")) +ALLOWED_TRANSITIONS: dict[str, tuple[str, ...]] = { + "new": ("rewrite", "close"), + "rewrite": ("publish", "close"), + "publish": ("published", "close"), + "published": ("rewrite", "close"), + "close": ("rewrite",), +} +IMAGE_PROXY_USER_AGENT = "rss-news-admin/1.0" +_UNSET = object() + + +def _admin_user(request: Request) -> str | None: + token = request.cookies.get(settings.session_cookie_name) + if not token: + return None + return verify_session_token(token) + + +def _to_optional_int(raw: str | None) -> int | None: + if raw is None: + return None + value = raw.strip() + if value == "": + return None + return int(value) + + +def _dashboard_redirect( + *, + msg: str | None = None, + msg_type: str = "success", + status_filter: str | None = None, +) -> RedirectResponse: + query: dict[str, str] = {} + if msg: + query["msg"] = msg + query["type"] = msg_type + if status_filter: + query["status_filter"] = status_filter + suffix = f"?{urlencode(query)}" if query else "" + return RedirectResponse(url=f"/admin/dashboard{suffix}", status_code=303) + + +def _parse_meta_json(raw: str | None) -> dict: + if not raw: + return {} + try: + parsed = json.loads(raw) + return parsed if isinstance(parsed, dict) else {} + except Exception: + return {} + + +def _read_article_images(article: dict, extraction: dict) -> list[str]: + images: list[str] = [] + if article.get("image_urls_json"): + try: + parsed_images = json.loads(article["image_urls_json"]) + if isinstance(parsed_images, list): + images = [str(item) for item in parsed_images if item] + except Exception: + images = [] + if not images and isinstance(extraction.get("images"), list): + images = [str(item) for item in extraction.get("images") if item] + # deduplicate preserving order + seen: set[str] = set() + deduped: list[str] = [] + for image in images: + if image not in seen: + seen.add(image) + deduped.append(image) + return deduped + + +def _is_probably_irrelevant_image(url: str) -> bool: + lowered = url.lower() + patterns = ( + r"logo", + r"icon", + r"sprite", + r"avatar", + r"favicon", + r"/ads/", + r"tracking", + r"pixel", + r"banner", + ) + return any(re.search(pattern, lowered) for pattern in patterns) + + +def _is_http_image_url(url: str) -> bool: + try: + parsed = urlparse(url) + except Exception: + return False + return parsed.scheme in {"http", "https"} and bool(parsed.netloc) + + +def _build_image_entries(article: dict, extraction: dict, meta: dict) -> list[dict[str, object]]: + all_images = _read_article_images(article, extraction) + image_review = meta.get("image_review") if isinstance(meta.get("image_review"), dict) else {} + selected_url = image_review.get("selected_url") if isinstance(image_review.get("selected_url"), str) else None + excluded_urls = image_review.get("excluded_urls") if isinstance(image_review.get("excluded_urls"), list) else [] + excluded_set = {str(item) for item in excluded_urls if item} + + entries: list[dict[str, object]] = [] + for url in all_images: + entries.append( + { + "url": url, + "proxy_url": f"/admin/images/proxy?{urlencode({'url': url})}", + "is_selected": selected_url == url, + "is_excluded": url in excluded_set, + "is_irrelevant_hint": _is_probably_irrelevant_image(url), + } + ) + return entries + + +def _publish_readiness(article: dict, meta: dict) -> tuple[bool, list[str]]: + reasons: list[str] = [] + if internal_to_ui_status(article.get("status")) not in {"publish", "published"}: + reasons.append("Status ist nicht 'publish'") + image_review = meta.get("image_review") if isinstance(meta.get("image_review"), dict) else {} + selected_image = image_review.get("selected_url") if isinstance(image_review.get("selected_url"), str) else None + if not selected_image: + reasons.append("Hauptbild nicht ausgewählt") + return len(reasons) == 0, reasons + + +def _classify_publish_error(error_message: str | None) -> tuple[str, str]: + text = (error_message or "").lower() + if not text.strip(): + return "ok", "-" + if "rechtsfreigabe fehlt" in text or "hauptbild nicht gesetzt" in text or "status ist nicht" in text: + return "policy", "Artikelvoraussetzungen im UI prüfen (Status/Hauptbild)." + if "401" in text or "403" in text or "authorization" in text or "forbidden" in text or "unauthorized" in text: + return "auth", "WordPress Nutzer/App-Passwort prüfen." + if "404" in text and ("media" in text or "posts" in text or "wp-json" in text): + return "api", "WordPress REST-Endpunkt prüfen (`/wp-json/wp/v2`)." + if "timed out" in text or "timeout" in text or "nodename nor servname provided" in text or "name or service not known" in text: + return "dns", "DNS/Netzwerk zur WordPress-Domain prüfen." + if "media-upload fehlgeschlagen" in text or "liefert kein bild" in text or "featured_media" in text: + return "media", "Bild-URL/Format prüfen oder anderes Hauptbild auswählen." + return "unknown", "Fehlerdetails prüfen und bei Bedarf Job erneut starten." + + +def _legal_checklist(article: dict, feed: dict | None) -> list[dict[str, str]]: + meta = article.get("meta", {}) + extraction = meta.get("extraction") if isinstance(meta.get("extraction"), dict) else {} + attribution = meta.get("attribution") if isinstance(meta.get("attribution"), dict) else {} + + checks: list[dict[str, str]] = [] + checks.append( + { + "label": "Original-Link vorhanden", + "status": "ok" if article.get("source_url") else "missing", + "value": article.get("source_url") or "-", + } + ) + checks.append( + { + "label": "Autor vorhanden", + "status": "ok" if article.get("author") else "missing", + "value": article.get("author") or "-", + } + ) + checks.append( + { + "label": "Bilder extrahiert", + "status": "ok" if article.get("image_urls_json") else "missing", + "value": str(len(extraction.get("images", []))) if isinstance(extraction.get("images"), list) else "0", + } + ) + checks.append( + { + "label": "Pressekontakt", + "status": "ok" if article.get("press_contact") else "missing", + "value": article.get("press_contact") or extraction.get("press_contact") or "-", + } + ) + checks.append( + { + "label": "Lizenz/Terms", + "status": "ok" if article.get("source_license_name_snapshot") and article.get("source_terms_url_snapshot") else "missing", + "value": f"{article.get('source_license_name_snapshot') or attribution.get('source_license_name') or '-'} | {article.get('source_terms_url_snapshot') or attribution.get('source_terms_url') or '-'}", + } + ) + checks.append( + { + "label": "Risiko-Status Quelle", + "status": "ok" if (feed and feed.get("source_risk_level") == "green") else "missing", + "value": feed.get("source_risk_level") if feed else "-", + } + ) + image_review = meta.get("image_review") if isinstance(meta.get("image_review"), dict) else {} + selected_image = image_review.get("selected_url") if isinstance(image_review.get("selected_url"), str) else None + checks.append( + { + "label": "Hauptbild ausgewählt", + "status": "ok" if selected_image else "missing", + "value": selected_image or "-", + } + ) + return checks + + +def _build_connectivity_targets() -> list[dict[str, str]]: + targets: list[dict[str, str]] = [] + seen: set[tuple[str, str]] = set() + + def add_target(label: str, kind: str, value: str) -> None: + normalized = (value or "").strip() + if not normalized: + return + key = (kind, normalized.lower()) + if key in seen: + return + seen.add(key) + targets.append({"label": label, "kind": kind, "value": normalized}) + + add_target("OpenAI API", "host", "api.openai.com") + if settings.wordpress_base_url: + parsed = urlparse(settings.wordpress_base_url) + if parsed.hostname: + add_target("WordPress Host", "host", parsed.hostname) + wp_api_url = f"{settings.wordpress_base_url.rstrip('/')}/wp-json/wp/v2" + add_target("WordPress REST", "url", wp_api_url) + + for feed in list_feeds(): + name = (feed.get("name") or "").strip() or f"Feed #{feed.get('id')}" + feed_url = str(feed.get("url") or "").strip() + if not feed_url: + continue + parsed = urlparse(feed_url) + if parsed.hostname: + add_target(f"{name} (Feed)", "host", parsed.hostname) + add_target(f"{name} (Feed URL)", "url", feed_url) + + return targets + + +def _run_connectivity_check(target: dict[str, str]) -> dict[str, object]: + kind = target.get("kind", "") + value = str(target.get("value") or "") + row: dict[str, object] = { + "label": target.get("label") or "-", + "kind": kind, + "target": value, + "dns_ok": False, + "dns_info": "-", + "tcp_ok": False, + "tcp_info": "-", + "http_ok": False, + "http_info": "-", + "duration_ms": 0, + "ok": False, + } + started = time.perf_counter() + try: + hostname = value if kind == "host" else (urlparse(value).hostname or "") + port = 443 + if kind == "url": + parsed = urlparse(value) + if parsed.scheme not in {"http", "https"}: + row["http_info"] = f"unsupported scheme: {parsed.scheme or '-'}" + return row + port = 443 if parsed.scheme == "https" else 80 + if not hostname: + row["dns_info"] = "host fehlt" + return row + + try: + addr_info = socket.getaddrinfo(hostname, None, proto=socket.IPPROTO_TCP) + ips = sorted({entry[4][0] for entry in addr_info if entry and len(entry) > 4 and entry[4]}) + row["dns_ok"] = True + row["dns_info"] = ", ".join(ips[:3]) if ips else "resolved" + except Exception as exc: + row["dns_info"] = str(exc) + return row + + try: + socket.create_connection((hostname, port), timeout=4).close() + row["tcp_ok"] = True + row["tcp_info"] = f"port {port} erreichbar" + except Exception as exc: + row["tcp_info"] = str(exc) + return row + + if kind == "host": + row["http_ok"] = True + row["http_info"] = "n/a (host-only)" + row["ok"] = True + return row + + try: + req = UrlRequest( + url=value, + headers={"User-Agent": IMAGE_PROXY_USER_AGENT, "Accept": "*/*"}, + ) + with urlopen(req, timeout=6, context=ssl.create_default_context()) as resp: + code = getattr(resp, "status", None) or resp.getcode() + row["http_ok"] = True + row["http_info"] = f"HTTP {code}" + except Exception as exc: + row["http_info"] = str(exc) + return row + + row["ok"] = bool(row["dns_ok"] and row["tcp_ok"] and row["http_ok"]) + return row + finally: + row["duration_ms"] = int((time.perf_counter() - started) * 1000) + + +def _upsert_article_from_existing( + article: dict, + *, + content_rewritten: str | None = None, + status: str | None = None, + wp_post_id: int | None | object = _UNSET, + wp_post_url: str | None | object = _UNSET, + publish_attempts: int | object = _UNSET, + publish_last_error: str | None | object = _UNSET, + published_to_wp_at: str | None | object = _UNSET, + meta_json: str | None | object = _UNSET, +) -> None: + rewritten = article.get("content_rewritten") if content_rewritten is None else content_rewritten + upsert_article( + ArticleUpsert( + feed_id=article.get("feed_id"), + source_article_id=article.get("source_article_id"), + source_hash=article.get("source_hash"), + title=article.get("title"), + source_url=article.get("source_url"), + canonical_url=article.get("canonical_url"), + published_at=article.get("published_at"), + author=article.get("author"), + summary=article.get("summary"), + content_raw=article.get("content_raw"), + content_rewritten=rewritten, + image_urls_json=article.get("image_urls_json"), + press_contact=article.get("press_contact"), + source_name_snapshot=article.get("source_name_snapshot"), + source_terms_url_snapshot=article.get("source_terms_url_snapshot"), + source_license_name_snapshot=article.get("source_license_name_snapshot"), + legal_checked=bool(int(article.get("legal_checked", 0))), + legal_checked_at=article.get("legal_checked_at"), + legal_note=article.get("legal_note"), + wp_post_id=article.get("wp_post_id") if wp_post_id is _UNSET else wp_post_id, + wp_post_url=article.get("wp_post_url") if wp_post_url is _UNSET else wp_post_url, + publish_attempts=int(article.get("publish_attempts", 0)) if publish_attempts is _UNSET else publish_attempts, + publish_last_error=article.get("publish_last_error") if publish_last_error is _UNSET else publish_last_error, + published_to_wp_at=article.get("published_to_wp_at") if published_to_wp_at is _UNSET else published_to_wp_at, + word_count=len(str(rewritten or "").split()), + status=article.get("status") if status is None else status, + meta_json=article.get("meta_json") if meta_json is _UNSET else meta_json, + ) + ) + + +@router.get("/admin", response_class=HTMLResponse) +def admin_index(request: Request): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + return RedirectResponse(url="/admin/dashboard", status_code=303) + + +@router.get("/admin/login", response_class=HTMLResponse) +def admin_login_page(request: Request): + return templates.TemplateResponse( + request, + "admin_login.html", + {"request": request, "title": "Admin Login", "error": request.query_params.get("error")}, + ) + + +@router.post("/admin/login") +def admin_login(request: Request, username: str = Form(...), password: str = Form(...)): + if not verify_credentials(username, password): + return RedirectResponse(url="/admin/login?error=1", status_code=303) + + token = create_session_token(username) + response = RedirectResponse(url="/admin/dashboard", status_code=303) + response.set_cookie( + key=settings.session_cookie_name, + value=token, + max_age=settings.session_max_age_seconds, + httponly=True, + secure=False, + samesite="lax", + ) + return response + + +@router.post("/admin/logout") +def admin_logout(): + response = RedirectResponse(url="/admin/login", status_code=303) + response.delete_cookie(settings.session_cookie_name) + return response + + +@router.get("/admin/dashboard", response_class=HTMLResponse) +def admin_dashboard(request: Request): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + + sources = list_sources() + source_policy = {s["id"]: evaluate_source_policy(s) for s in sources} + feeds = list_feeds() + runs = list_runs(limit=30) + publish_jobs = list_publish_jobs(limit=30) + for job in publish_jobs: + category, hint = _classify_publish_error(job.get("error_message")) + job["error_category"] = category + job["error_hint"] = hint + status_filter = request.query_params.get("status_filter") + internal_filter = ui_to_internal_status(status_filter) if status_filter else None + if status_filter in set(UI_STATUSES): + articles = list_articles(limit=100, status_filter=internal_filter) + else: + status_filter = "" + articles = [a for a in list_articles(limit=250) if internal_to_ui_status(a.get("status")) != "close"][:100] + for article in articles: + meta = _parse_meta_json(article.get("meta_json")) + extraction = meta.get("extraction") if isinstance(meta.get("extraction"), dict) else {} + images = _read_article_images(article, extraction) + article["meta"] = meta + ready, reasons = _publish_readiness(article, meta) + article["publish_ready"] = ready + article["publish_blockers"] = reasons + article["extracted_images"] = images + article["image_entries"] = _build_image_entries(article, extraction, meta) + image_review = meta.get("image_review") if isinstance(meta.get("image_review"), dict) else {} + article["selected_image_url"] = image_review.get("selected_url") if isinstance(image_review.get("selected_url"), str) else None + article["selected_image_proxy_url"] = ( + f"/admin/images/proxy?{urlencode({'url': article['selected_image_url']})}" if article.get("selected_image_url") else None + ) + if not article.get("press_contact") and isinstance(extraction.get("press_contact"), str): + article["press_contact"] = extraction.get("press_contact") + article["extraction_error"] = extraction.get("extraction_error") if isinstance(extraction.get("extraction_error"), str) else None + article["days_old"] = article_age_days(article.get("published_at")) + article["relevance"] = article_relevance(article.get("published_at")) + article["status_ui"] = internal_to_ui_status(article.get("status")) + tags = meta.get("generated_tags") if isinstance(meta.get("generated_tags"), list) else [] + article["generated_tags"] = [str(t) for t in tags if t] + + return templates.TemplateResponse( + request, + "admin_dashboard.html", + { + "request": request, + "title": "Admin Dashboard", + "user": user, + "sources": sources, + "source_policy": source_policy, + "feeds": feeds, + "runs": runs, + "publish_jobs": publish_jobs, + "articles": articles, + "status_options": list(UI_STATUSES), + "allowed_transitions": ALLOWED_TRANSITIONS, + "status_filter": status_filter, + "flash_msg": request.query_params.get("msg", ""), + "flash_type": request.query_params.get("type", "success"), + }, + ) + + +@router.get("/admin/connectivity", response_class=HTMLResponse) +def admin_connectivity(request: Request): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + + checks = [_run_connectivity_check(target) for target in _build_connectivity_targets()] + ok_count = len([c for c in checks if c.get("ok")]) + error_count = len(checks) - ok_count + return templates.TemplateResponse( + request, + "admin_connectivity.html", + { + "request": request, + "title": "Connectivity Check", + "user": user, + "checks": checks, + "ok_count": ok_count, + "error_count": error_count, + }, + ) + + +@router.get("/admin/articles/{article_id}", response_class=HTMLResponse) +def admin_article_detail(request: Request, article_id: int): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + + article = get_article_by_id(article_id) + if not article: + return _dashboard_redirect(msg=f"Artikel #{article_id} nicht gefunden", msg_type="error") + + meta = _parse_meta_json(article.get("meta_json")) + article["meta"] = meta + extraction = meta.get("extraction") if isinstance(meta.get("extraction"), dict) else {} + extraction["images"] = _read_article_images(article, extraction) + if not article.get("press_contact") and isinstance(extraction.get("press_contact"), str): + article["press_contact"] = extraction.get("press_contact") + article["extraction"] = extraction + publish_ready, publish_blockers = _publish_readiness(article, meta) + article["publish_ready"] = publish_ready + article["publish_blockers"] = publish_blockers + article["image_selection"] = extraction.get("image_selection") if isinstance(extraction.get("image_selection"), dict) else {} + article["image_entries"] = _build_image_entries(article, extraction, meta) + image_review = meta.get("image_review") if isinstance(meta.get("image_review"), dict) else {} + article["selected_image_url"] = image_review.get("selected_url") if isinstance(image_review.get("selected_url"), str) else None + article["selected_image_proxy_url"] = ( + f"/admin/images/proxy?{urlencode({'url': article['selected_image_url']})}" if article.get("selected_image_url") else None + ) + article["days_old"] = article_age_days(article.get("published_at")) + article["relevance"] = article_relevance(article.get("published_at")) + article["status_ui"] = internal_to_ui_status(article.get("status")) + feed = get_feed_by_id(int(article["feed_id"])) if article.get("feed_id") else None + checklist = _legal_checklist(article, feed) + + return templates.TemplateResponse( + request, + "admin_article_detail.html", + { + "request": request, + "title": f"Artikel #{article_id}", + "user": user, + "article": article, + "feed": feed, + "checklist": checklist, + "allowed_transitions": ALLOWED_TRANSITIONS.get(article.get("status_ui"), ()), + "flash_msg": request.query_params.get("msg", ""), + "flash_type": request.query_params.get("type", "success"), + }, + ) + + +@router.post("/admin/articles/{article_id}/images/decision") +def admin_article_image_decision( + request: Request, + article_id: int, + image_url: str = Form(...), + action: str = Form(...), +): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + + ok = set_article_image_decision(article_id=article_id, image_url=image_url, action=action, actor=user) + if not ok: + return _dashboard_redirect(msg=f"Bildaktion fehlgeschlagen fuer Artikel #{article_id}", msg_type="error") + return RedirectResponse(url=f"/admin/articles/{article_id}", status_code=303) + + +@router.post("/admin/articles/{article_id}/publish-enqueue") +def admin_enqueue_publish(request: Request, article_id: int, max_attempts: str = Form("3")): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + try: + job_id = enqueue_publish(article_id=article_id, max_attempts=max(1, int(max_attempts))) + except Exception as exc: + return _dashboard_redirect(msg=f"Publish Queue Fehler fuer Artikel #{article_id}: {exc}", msg_type="error") + return RedirectResponse(url=f"/admin/articles/{article_id}?msg=Publish-Job%20#{job_id}%20erstellt&type=success", status_code=303) + + +@router.post("/admin/publisher/run") +def admin_run_publisher(request: Request, max_jobs: str = Form("10")): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + try: + stats = run_publisher(max_jobs=max(1, int(max_jobs))) + except Exception as exc: + return _dashboard_redirect(msg=f"Publisher Fehler: {exc}", msg_type="error") + return _dashboard_redirect( + msg=f"Publisher: processed={stats.processed}, success={stats.success}, failed={stats.failed}, requeued={stats.requeued}" + ) + + +@router.get("/admin/images/proxy") +def admin_image_proxy(request: Request, url: str): + if not _is_http_image_url(url): + return Response(status_code=400) + + try: + referer = request.headers.get("referer", "") + req = UrlRequest( + url=url, + headers={ + "User-Agent": IMAGE_PROXY_USER_AGENT, + "Accept": "image/avif,image/webp,image/apng,image/*,*/*;q=0.8", + "Referer": referer or url, + }, + ) + with urlopen(req, timeout=10) as resp: + body = resp.read() + content_type = resp.headers.get("Content-Type", "application/octet-stream") + except Exception: + return Response(status_code=404) + + if not content_type.lower().startswith("image/"): + return Response(status_code=415) + return Response(content=body, media_type=content_type) + + +@router.post("/admin/sources/create") +def admin_create_source( + request: Request, + name: str = Form(...), + base_url: str = Form(""), + terms_url: str = Form(""), + license_name: str = Form(""), + risk_level: str = Form("yellow"), + last_reviewed_at: str = Form(""), +): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + + try: + create_source( + SourceCreate( + name=name, + base_url=base_url or None, + terms_url=terms_url or None, + license_name=license_name or None, + risk_level=risk_level, + is_enabled=True, + notes=None, + last_reviewed_at=last_reviewed_at or None, + ) + ) + except Exception as exc: + return _dashboard_redirect(msg=f"Quelle konnte nicht gespeichert werden: {exc}", msg_type="error") + return _dashboard_redirect(msg="Quelle gespeichert") + + +@router.post("/admin/sources/{source_id}/update") +def admin_update_source( + request: Request, + source_id: int, + name: str = Form(...), + base_url: str = Form(""), + terms_url: str = Form(""), + license_name: str = Form(""), + risk_level: str = Form("yellow"), + is_enabled: str = Form("1"), + notes: str = Form(""), + last_reviewed_at: str = Form(""), +): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + try: + ok = update_source( + source_id, + SourceUpdate( + name=name, + base_url=base_url or None, + terms_url=terms_url or None, + license_name=license_name or None, + risk_level=risk_level, + is_enabled=is_enabled == "1", + notes=notes or None, + last_reviewed_at=last_reviewed_at or None, + ), + ) + except Exception as exc: + return _dashboard_redirect(msg=f"Quelle #{source_id} Update fehlgeschlagen: {exc}", msg_type="error") + if not ok: + return _dashboard_redirect(msg=f"Quelle #{source_id} nicht gefunden", msg_type="error") + return _dashboard_redirect(msg=f"Quelle #{source_id} aktualisiert") + + +@router.post("/admin/sources/{source_id}/delete") +def admin_delete_source(request: Request, source_id: int): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + ok = delete_source(source_id) + if not ok: + return _dashboard_redirect(msg=f"Quelle #{source_id} nicht gefunden", msg_type="error") + return _dashboard_redirect(msg=f"Quelle #{source_id} gelöscht") + + +@router.post("/admin/feeds/create") +def admin_create_feed( + request: Request, + name: str = Form(...), + url: str = Form(...), + source_id: str = Form(""), +): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + + try: + create_feed( + FeedCreate( + name=name, + url=url, + source_id=_to_optional_int(source_id), + is_enabled=True, + ) + ) + except Exception as exc: + return _dashboard_redirect(msg=f"Feed konnte nicht gespeichert werden: {exc}", msg_type="error") + return _dashboard_redirect(msg="Feed gespeichert") + + +@router.post("/admin/feeds/{feed_id}/update") +def admin_update_feed( + request: Request, + feed_id: int, + name: str = Form(...), + url: str = Form(...), + source_id: str = Form(""), + is_enabled: str = Form("1"), +): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + try: + ok = update_feed( + feed_id, + FeedUpdate( + name=name, + url=url, + source_id=_to_optional_int(source_id), + is_enabled=is_enabled == "1", + ), + ) + except Exception as exc: + return _dashboard_redirect(msg=f"Feed #{feed_id} Update fehlgeschlagen: {exc}", msg_type="error") + if not ok: + return _dashboard_redirect(msg=f"Feed #{feed_id} nicht gefunden", msg_type="error") + return _dashboard_redirect(msg=f"Feed #{feed_id} aktualisiert") + + +@router.post("/admin/feeds/{feed_id}/delete") +def admin_delete_feed(request: Request, feed_id: int): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + ok = delete_feed(feed_id) + if not ok: + return _dashboard_redirect(msg=f"Feed #{feed_id} nicht gefunden", msg_type="error") + return _dashboard_redirect(msg=f"Feed #{feed_id} gelöscht") + + +@router.post("/admin/ingestion/run") +def admin_run_ingestion(request: Request, feed_id: str = Form("")): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + try: + stats = run_ingestion(feed_id=_to_optional_int(feed_id)) + except Exception as exc: + return _dashboard_redirect(msg=f"Ingestion fehlgeschlagen: {exc}", msg_type="error") + return _dashboard_redirect(msg=f"Ingestion: {stats.status}, upserts={stats.articles_upserted}") + + +@router.post("/admin/articles/{article_id}/review") +def admin_review_article(request: Request, article_id: int, decision: str = Form(...), note: str = Form("")): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + + return _dashboard_redirect(msg="Review-Aktion wurde durch Rewrite ersetzt", msg_type="error") + + +@router.post("/admin/articles/{article_id}/rewrite-run") +def admin_rewrite_run(request: Request, article_id: int): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + article = get_article_by_id(article_id) + if not article: + return _dashboard_redirect(msg=f"Artikel #{article_id} nicht gefunden", msg_type="error") + if internal_to_ui_status(article.get("status")) not in {"new", "rewrite"}: + return _dashboard_redirect(msg=f"Rewrite nur aus new/rewrite fuer Artikel #{article_id}", msg_type="error") + try: + rewritten = rewrite_article_text(article) + tags = generate_article_tags(article, rewritten_text=rewritten) + except Exception as exc: + return _dashboard_redirect(msg=f"Rewrite fehlgeschlagen fuer Artikel #{article_id}: {exc}", msg_type="error") + merged_meta = merge_generated_tags(article.get("meta_json"), tags) + _upsert_article_from_existing(article, content_rewritten=rewritten, status="approved", meta_json=merged_meta) + return _dashboard_redirect(msg=f"Rewrite fertig fuer Artikel #{article_id} -> publish") + + +@router.post("/admin/rewrite/run") +def admin_rewrite_run_batch(request: Request, max_jobs: str = Form("10")): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + try: + limit = max(1, min(int(max_jobs), 100)) + except Exception: + limit = 10 + planned = list_articles(limit=limit, status_filter="rewrite") + processed = 0 + success = 0 + failed = 0 + for article in planned: + processed += 1 + try: + rewritten = rewrite_article_text(article) + tags = generate_article_tags(article, rewritten_text=rewritten) + merged_meta = merge_generated_tags(article.get("meta_json"), tags) + _upsert_article_from_existing(article, content_rewritten=rewritten, status="approved", meta_json=merged_meta) + success += 1 + except Exception: + failed += 1 + return _dashboard_redirect(msg=f"Rewrite-Run: processed={processed}, success={success}, failed={failed}") + + +@router.post("/admin/articles/{article_id}/rewrite-save") +def admin_rewrite_save(request: Request, article_id: int, content_rewritten: str = Form(...)): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + article = get_article_by_id(article_id) + if not article: + return _dashboard_redirect(msg=f"Artikel #{article_id} nicht gefunden", msg_type="error") + text = (content_rewritten or "").strip() + if not text: + return RedirectResponse( + url=f"/admin/articles/{article_id}?msg=Rewrite-Text%20darf%20nicht%20leer%20sein&type=error", + status_code=303, + ) + _upsert_article_from_existing(article, content_rewritten=text) + return RedirectResponse(url=f"/admin/articles/{article_id}?msg=Rewrite-Text%20gespeichert&type=success", status_code=303) + + +@router.post("/admin/articles/{article_id}/reopen") +def admin_reopen_article(request: Request, article_id: int): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + article = get_article_by_id(article_id) + if not article: + return _dashboard_redirect(msg=f"Artikel #{article_id} nicht gefunden", msg_type="error") + _upsert_article_from_existing( + article, + status="rewrite", + wp_post_id=None, + wp_post_url=None, + publish_attempts=0, + publish_last_error=None, + published_to_wp_at=None, + ) + return RedirectResponse( + url=f"/admin/articles/{article_id}?msg=Artikel%20zurueck%20in%20Rewrite-Workflow%20gesetzt&type=success", + status_code=303, + ) + + +@router.post("/admin/articles/{article_id}/transition") +def admin_transition_article(request: Request, article_id: int, target_status: str = Form(...), note: str = Form("")): + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + + article = get_article_by_id(article_id) + if article: + current_ui = internal_to_ui_status(article.get("status")) + target_internal = ui_to_internal_status(target_status) + target_ui = internal_to_ui_status(target_internal) + if target_ui in ALLOWED_TRANSITIONS.get(current_ui, ()): + update_article_status(article_id, target_internal, actor=user, note=note or None) + return _dashboard_redirect(msg=f"Artikel #{article_id}: {current_ui} -> {target_ui}") + return _dashboard_redirect(msg=f"Ungueltiger Statuswechsel fuer Artikel #{article_id}", msg_type="error") + + +_PAGE_SIZE = 50 + + +@router.get("/admin/article-list", response_class=HTMLResponse) +def admin_article_list(request: Request): + """Paginated article list with inline WP ID editing.""" + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + + page = max(1, int(request.query_params.get("page", 1))) + status_filter = request.query_params.get("status_filter", "") or None + search = request.query_params.get("search", "").strip() or None + offset = (page - 1) * _PAGE_SIZE + + articles, total = list_articles_page( + limit=_PAGE_SIZE, offset=offset, + status_filter=status_filter, search=search, + ) + + # Enrich each article with thumbnail URL + for a in articles: + meta = _parse_meta_json(a.get("meta_json")) + image_review = meta.get("image_review") if isinstance(meta.get("image_review"), dict) else {} + sel = image_review.get("selected_url") if isinstance(image_review.get("selected_url"), str) else None + if not sel: + sel = (meta.get("extraction") or {}).get("image_selection", {}).get("primary") + a["thumb_url"] = sel + a["thumb_proxy"] = f"/admin/images/proxy?{urlencode({'url': sel})}" if sel else None + raw = (a.get("content_raw") or a.get("summary") or "").strip() + a["excerpt"] = raw[:120] + "…" if len(raw) > 120 else raw + + total_pages = max(1, (total + _PAGE_SIZE - 1) // _PAGE_SIZE) + + return templates.TemplateResponse( + request, + "admin_article_list.html", + { + "request": request, + "title": "Artikelliste", + "user": user, + "articles": articles, + "page": page, + "total_pages": total_pages, + "total": total, + "page_size": _PAGE_SIZE, + "status_filter": status_filter or "", + "search": search or "", + "flash_msg": request.query_params.get("msg", ""), + "flash_type": request.query_params.get("type", "success"), + }, + ) + + +@router.post("/admin/article-list/update") +async def admin_article_list_update(request: Request): + """Bulk update WP post IDs from the article list form.""" + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + + form = await request.form() + updates: list[tuple[int, int | None]] = [] + + # Form fields: wp_ = new value, orig_ = original value + for key, new_val in form.items(): + if not key.startswith("wp_"): + continue + try: + article_id = int(key[3:]) + except ValueError: + continue + orig_val = str(form.get(f"orig_{article_id}", "")).strip() + new_val_s = str(new_val).strip() + if new_val_s == orig_val: + continue # unchanged + new_wp_id = int(new_val_s) if new_val_s else None + updates.append((article_id, new_wp_id)) + + if updates: + count = bulk_update_wp_post_ids(updates) + msg = f"{count} WP-ID(s) aktualisiert. Bitte jetzt WP-Sync ausführen um Slots & URLs zu aktualisieren." + msg_type = "success" + else: + msg = "Keine Änderungen erkannt." + msg_type = "success" + + # Preserve pagination/filter params from referer + page = form.get("page", "1") + status_filter = form.get("status_filter", "") + search = form.get("search", "") + qs: dict[str, str] = {"msg": msg, "type": msg_type, "page": page} + if status_filter: + qs["status_filter"] = status_filter + if search: + qs["search"] = search + return RedirectResponse(url=f"/admin/article-list?{urlencode(qs)}", status_code=303) + + +@router.post("/admin/wp-sync") +def admin_wp_sync(request: Request): + """Sync scheduled_publish_at and WP references in the DB from WordPress.""" + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + try: + from .wordpress import sync_db_from_wordpress + stats = sync_db_from_wordpress() + msg = ( + f"WP-Sync abgeschlossen: " + f"{stats['slot_updated']} Slots aktualisiert, " + f"{stats['slot_cleared_draft']} Slots geleert (Draft), " + f"{stats['marked_published']} als veröffentlicht markiert, " + f"{stats['wp_reference_cleared']} WP-Referenzen gelöscht (Papierkorb), " + f"{stats['already_in_sync']} bereits synchron." + ) + return RedirectResponse(url=f"/admin/schedule?msg={msg}&type=success", status_code=303) + except Exception as exc: + return RedirectResponse(url=f"/admin/schedule?msg=Sync fehlgeschlagen: {exc}&type=error", status_code=303) + + +@router.post("/admin/articles/{article_id}/retry") +def admin_retry_article(request: Request, article_id: int): + """Reset a failed article to 'new' so the pipeline picks it up on next run.""" + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + + article = get_article_by_id(article_id) + if not article: + return _dashboard_redirect(msg=f"Artikel #{article_id} nicht gefunden", msg_type="error") + + from .scheduler import release_publish_slot + release_publish_slot(article_id) + update_article_status(article_id, "new", actor=user, note="Manuell zurückgesetzt für erneuten Pipeline-Versuch") + return _dashboard_redirect( + msg=f"Artikel #{article_id} wurde auf 'neu' zurückgesetzt und wird beim nächsten Pipeline-Lauf verarbeitet", + status_filter="close", + ) + + +@router.get("/admin/schedule", response_class=HTMLResponse) +def admin_schedule(request: Request): + """Schedule overview: all booked slots from DB and WordPress.""" + user = _admin_user(request) + if not user: + return RedirectResponse(url="/admin/login", status_code=303) + + from .scheduler import get_schedule_overview, _preferred_hours, _today_cet + from datetime import timedelta + + slots = get_schedule_overview(lookahead_days=60) + today = _today_cet() + hours = _preferred_hours() + + # Build a calendar grid: for each day in the next 60 days, show each preferred hour slot + booked: dict[tuple[str, int], dict] = {(s["date"], s["hour"]): s for s in slots} + calendar_days = [] + for offset in range(0, 61): + d = today + timedelta(days=offset) + d_str = d.isoformat() + day_slots = [] + for h in hours: + key = (d_str, h) + day_slots.append({ + "hour": h, + "booked": key in booked, + "slot": booked.get(key), + }) + calendar_days.append({ + "date": d_str, + "date_fmt": d.strftime("%d.%m.%Y"), + "weekday": ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"][d.weekday()], + "slots": day_slots, + "any_booked": any(s["booked"] for s in day_slots), + }) + + return templates.TemplateResponse( + request, + "admin_schedule.html", + { + "request": request, + "title": "Veröffentlichungsplan", + "user": user, + "slots": slots, + "calendar_days": calendar_days, + "hours": hours, + "flash_msg": request.query_params.get("msg", ""), + "flash_type": request.query_params.get("type", "success"), + }, + ) diff --git a/backend/app/auth.py b/backend/app/auth.py new file mode 100644 index 0000000..188397f --- /dev/null +++ b/backend/app/auth.py @@ -0,0 +1,31 @@ +import hmac +from typing import Optional + +from itsdangerous import URLSafeTimedSerializer, BadSignature, SignatureExpired + +from .config import get_settings + + +def _serializer() -> URLSafeTimedSerializer: + settings = get_settings() + return URLSafeTimedSerializer(settings.app_secret_key, salt="rss-news-session") + + +def verify_credentials(username: str, password: str) -> bool: + settings = get_settings() + user_ok = hmac.compare_digest(username, settings.app_admin_username) + pw_ok = hmac.compare_digest(password, settings.app_admin_password) + return user_ok and pw_ok + + +def create_session_token(username: str) -> str: + return _serializer().dumps({"username": username}) + + +def verify_session_token(token: str) -> Optional[str]: + settings = get_settings() + try: + payload = _serializer().loads(token, max_age=settings.session_max_age_seconds) + except (BadSignature, SignatureExpired): + return None + return payload.get("username") diff --git a/backend/app/config.py b/backend/app/config.py new file mode 100644 index 0000000..24c3902 --- /dev/null +++ b/backend/app/config.py @@ -0,0 +1,65 @@ +from functools import lru_cache +from pathlib import Path + +from dotenv import load_dotenv +from pydantic import AliasChoices, Field +from pydantic_settings import BaseSettings, SettingsConfigDict + + +class Settings(BaseSettings): + # Prefer backend-specific env file to avoid collisions with legacy root .env + model_config = SettingsConfigDict( + env_file=("backend/.env", ".env"), + env_file_encoding="utf-8", + extra="ignore", + ) + + app_env: str = "development" + app_name: str = "rss-news-backend" + app_secret_key: str = "replace-with-a-long-random-secret" + + app_admin_username: str = "admin" + app_admin_password: str = "change-me" + + session_cookie_name: str = "rss_news_session" + session_max_age_seconds: int = 28800 + + app_db_path: str = "backend/data/rss_news.db" + + wordpress_base_url: str | None = Field(default=None, validation_alias=AliasChoices("WORDPRESS_BASE_URL", "WP_BASE_URL")) + wordpress_username: str | None = Field(default=None, validation_alias=AliasChoices("WORDPRESS_USERNAME", "WP_USERNAME")) + wordpress_app_password: str | None = Field(default=None, validation_alias=AliasChoices("WORDPRESS_APP_PASSWORD", "WP_PASSWORD")) + wordpress_default_status: str = "draft" + openai_api_key: str | None = Field(default=None, validation_alias=AliasChoices("OPENAI_API_KEY")) + openai_model: str = "gpt-4o-mini" + + # Telegram Bot + telegram_bot_token: str | None = Field(default=None, validation_alias=AliasChoices("TELEGRAM_BOT_TOKEN")) + telegram_chat_id: str | None = Field(default=None, validation_alias=AliasChoices("TELEGRAM_CHAT_ID")) + telegram_webhook_secret: str | None = Field(default=None, validation_alias=AliasChoices("TELEGRAM_WEBHOOK_SECRET")) + + # N8N API authentication + n8n_api_key: str | None = Field(default=None, validation_alias=AliasChoices("N8N_API_KEY")) + + # Pipeline behaviour + pipeline_relevance_auto: int = 80 # >= this: auto-process + pipeline_relevance_warn: int = 60 # >= this: Telegram warning, else reject + pipeline_max_drafts_per_day: int = 2 + pipeline_publish_hours: str = "9,14" # comma-separated preferred publish hours (CET) + pipeline_min_words_raw: int = 120 # minimum words in raw content before rewrite (else reject) + pipeline_min_words_rewritten: int = 150 # minimum words in rewritten content (else reject) + pipeline_max_article_age_days: int = 7 # skip articles older than N days during ingestion (0 = no limit) + + +@lru_cache(maxsize=1) +def get_settings() -> Settings: + # Prefer shared legacy env from the original rss-news workspace if present. + env_candidates = ( + Path("/Users/oliver/Documents/rss-news/.env"), + Path("backend/.env"), + Path(".env"), + ) + for env_path in env_candidates: + if env_path.exists(): + load_dotenv(env_path, override=False) + return Settings() diff --git a/backend/app/db.py b/backend/app/db.py new file mode 100644 index 0000000..b6ef898 --- /dev/null +++ b/backend/app/db.py @@ -0,0 +1,293 @@ +import sqlite3 +from contextlib import contextmanager +from pathlib import Path +from typing import Any, Iterator + +from .config import get_settings + + +def _db_path() -> Path: + settings = get_settings() + path = Path(settings.app_db_path) + path.parent.mkdir(parents=True, exist_ok=True) + return path + + +@contextmanager +def get_conn() -> Iterator[sqlite3.Connection]: + conn = sqlite3.connect(_db_path()) + conn.row_factory = sqlite3.Row + conn.execute("PRAGMA foreign_keys=ON;") + try: + yield conn + conn.commit() + finally: + conn.close() + + +def init_db() -> None: + with get_conn() as conn: + conn.executescript( + """ + PRAGMA journal_mode=WAL; + + CREATE TABLE IF NOT EXISTS sources ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + base_url TEXT, + terms_url TEXT, + license_name TEXT, + risk_level TEXT NOT NULL DEFAULT 'yellow' CHECK (risk_level IN ('green', 'yellow', 'red')), + is_enabled INTEGER NOT NULL DEFAULT 0, + notes TEXT, + last_reviewed_at TEXT, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + updated_at TEXT NOT NULL DEFAULT (datetime('now')) + ); + + CREATE TABLE IF NOT EXISTS feeds ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + source_id INTEGER, + name TEXT NOT NULL, + url TEXT NOT NULL UNIQUE, + is_enabled INTEGER NOT NULL DEFAULT 1, + etag TEXT, + last_modified TEXT, + last_checked_at TEXT, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + updated_at TEXT NOT NULL DEFAULT (datetime('now')), + FOREIGN KEY(source_id) REFERENCES sources(id) ON DELETE SET NULL + ); + + CREATE TABLE IF NOT EXISTS runs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + run_type TEXT NOT NULL, + status TEXT NOT NULL CHECK (status IN ('queued', 'running', 'success', 'failed')), + started_at TEXT NOT NULL DEFAULT (datetime('now')), + finished_at TEXT, + details TEXT + ); + + CREATE TABLE IF NOT EXISTS publish_jobs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + article_id INTEGER NOT NULL, + status TEXT NOT NULL CHECK (status IN ('queued', 'running', 'success', 'failed')), + attempts INTEGER NOT NULL DEFAULT 0, + max_attempts INTEGER NOT NULL DEFAULT 3, + error_message TEXT, + wp_post_id INTEGER, + wp_post_url TEXT, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + started_at TEXT, + finished_at TEXT, + FOREIGN KEY(article_id) REFERENCES articles(id) ON DELETE CASCADE + ); + + CREATE TABLE IF NOT EXISTS articles ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + feed_id INTEGER, + source_article_id TEXT, + source_hash TEXT, + title TEXT NOT NULL, + source_url TEXT NOT NULL, + canonical_url TEXT, + published_at TEXT, + author TEXT, + summary TEXT, + content_raw TEXT, + content_rewritten TEXT, + image_urls_json TEXT, + press_contact TEXT, + source_name_snapshot TEXT, + source_terms_url_snapshot TEXT, + source_license_name_snapshot TEXT, + legal_checked INTEGER NOT NULL DEFAULT 0, + legal_checked_at TEXT, + legal_note TEXT, + wp_post_id INTEGER, + wp_post_url TEXT, + publish_attempts INTEGER NOT NULL DEFAULT 0, + publish_last_error TEXT, + published_to_wp_at TEXT, + word_count INTEGER DEFAULT 0, + status TEXT NOT NULL DEFAULT 'new' CHECK (status IN ('new', 'rewrite', 'review', 'approved', 'published', 'error', 'no_image')), + meta_json TEXT, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + updated_at TEXT NOT NULL DEFAULT (datetime('now')), + FOREIGN KEY(feed_id) REFERENCES feeds(id) ON DELETE SET NULL, + UNIQUE(source_url) + ); + + CREATE INDEX IF NOT EXISTS idx_articles_source_article_id ON articles(source_article_id); + CREATE INDEX IF NOT EXISTS idx_articles_source_hash ON articles(source_hash); + CREATE UNIQUE INDEX IF NOT EXISTS uq_articles_feed_source_article_id + ON articles(feed_id, source_article_id) + WHERE source_article_id IS NOT NULL; + CREATE UNIQUE INDEX IF NOT EXISTS uq_articles_source_hash + ON articles(source_hash) + WHERE source_hash IS NOT NULL; + CREATE INDEX IF NOT EXISTS idx_articles_status ON articles(status); + CREATE INDEX IF NOT EXISTS idx_feeds_source_id ON feeds(source_id); + CREATE INDEX IF NOT EXISTS idx_runs_started_at ON runs(started_at); + CREATE INDEX IF NOT EXISTS idx_articles_published_at ON articles(published_at); + CREATE INDEX IF NOT EXISTS idx_publish_jobs_status_created_at ON publish_jobs(status, created_at); + + CREATE TRIGGER IF NOT EXISTS trg_sources_updated_at + AFTER UPDATE ON sources + FOR EACH ROW + BEGIN + UPDATE sources SET updated_at = datetime('now') WHERE id = OLD.id; + END; + + CREATE TRIGGER IF NOT EXISTS trg_feeds_updated_at + AFTER UPDATE ON feeds + FOR EACH ROW + BEGIN + UPDATE feeds SET updated_at = datetime('now') WHERE id = OLD.id; + END; + + CREATE TRIGGER IF NOT EXISTS trg_articles_updated_at + AFTER UPDATE ON articles + FOR EACH ROW + BEGIN + UPDATE articles SET updated_at = datetime('now') WHERE id = OLD.id; + END; + """ + ) + + # Lightweight migration for existing DBs created before source_hash was introduced. + existing_columns = { + row["name"] for row in conn.execute("PRAGMA table_info(articles)").fetchall() + } + migration_columns = { + "relevance_score": "ALTER TABLE articles ADD COLUMN relevance_score INTEGER", + "scheduled_publish_at": "ALTER TABLE articles ADD COLUMN scheduled_publish_at TEXT", + "source_hash": "ALTER TABLE articles ADD COLUMN source_hash TEXT", + "image_urls_json": "ALTER TABLE articles ADD COLUMN image_urls_json TEXT", + "press_contact": "ALTER TABLE articles ADD COLUMN press_contact TEXT", + "source_name_snapshot": "ALTER TABLE articles ADD COLUMN source_name_snapshot TEXT", + "source_terms_url_snapshot": "ALTER TABLE articles ADD COLUMN source_terms_url_snapshot TEXT", + "source_license_name_snapshot": "ALTER TABLE articles ADD COLUMN source_license_name_snapshot TEXT", + "legal_checked": "ALTER TABLE articles ADD COLUMN legal_checked INTEGER NOT NULL DEFAULT 0", + "legal_checked_at": "ALTER TABLE articles ADD COLUMN legal_checked_at TEXT", + "legal_note": "ALTER TABLE articles ADD COLUMN legal_note TEXT", + "wp_post_id": "ALTER TABLE articles ADD COLUMN wp_post_id INTEGER", + "wp_post_url": "ALTER TABLE articles ADD COLUMN wp_post_url TEXT", + "publish_attempts": "ALTER TABLE articles ADD COLUMN publish_attempts INTEGER NOT NULL DEFAULT 0", + "publish_last_error": "ALTER TABLE articles ADD COLUMN publish_last_error TEXT", + "published_to_wp_at": "ALTER TABLE articles ADD COLUMN published_to_wp_at TEXT", + } + for column, ddl in migration_columns.items(): + if column not in existing_columns: + conn.execute(ddl) + + # Migration: add 'no_image' to the status CHECK constraint if not present. + # SQLite cannot modify CHECK constraints in-place, so we recreate the table. + table_sql_row = conn.execute( + "SELECT sql FROM sqlite_master WHERE type='table' AND name='articles'" + ).fetchone() + if table_sql_row and "'no_image'" not in (table_sql_row["sql"] or ""): + conn.executescript( + """ + PRAGMA foreign_keys=OFF; + + CREATE TABLE articles_v2 ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + feed_id INTEGER, + source_article_id TEXT, + source_hash TEXT, + title TEXT NOT NULL, + source_url TEXT NOT NULL, + canonical_url TEXT, + published_at TEXT, + author TEXT, + summary TEXT, + content_raw TEXT, + content_rewritten TEXT, + image_urls_json TEXT, + press_contact TEXT, + source_name_snapshot TEXT, + source_terms_url_snapshot TEXT, + source_license_name_snapshot TEXT, + legal_checked INTEGER NOT NULL DEFAULT 0, + legal_checked_at TEXT, + legal_note TEXT, + wp_post_id INTEGER, + wp_post_url TEXT, + publish_attempts INTEGER NOT NULL DEFAULT 0, + publish_last_error TEXT, + published_to_wp_at TEXT, + word_count INTEGER DEFAULT 0, + status TEXT NOT NULL DEFAULT 'new' CHECK (status IN ('new', 'rewrite', 'review', 'approved', 'published', 'error', 'no_image')), + meta_json TEXT, + relevance_score INTEGER, + scheduled_publish_at TEXT, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + updated_at TEXT NOT NULL DEFAULT (datetime('now')), + FOREIGN KEY(feed_id) REFERENCES feeds(id) ON DELETE SET NULL, + UNIQUE(source_url) + ); + + INSERT INTO articles_v2 SELECT + id, feed_id, source_article_id, source_hash, title, source_url, + canonical_url, published_at, author, summary, content_raw, + content_rewritten, image_urls_json, press_contact, + source_name_snapshot, source_terms_url_snapshot, source_license_name_snapshot, + legal_checked, legal_checked_at, legal_note, + wp_post_id, wp_post_url, publish_attempts, publish_last_error, + published_to_wp_at, word_count, status, meta_json, + relevance_score, scheduled_publish_at, created_at, updated_at + FROM articles; + + DROP TABLE articles; + ALTER TABLE articles_v2 RENAME TO articles; + + CREATE INDEX IF NOT EXISTS idx_articles_source_article_id ON articles(source_article_id); + CREATE INDEX IF NOT EXISTS idx_articles_source_hash ON articles(source_hash); + CREATE UNIQUE INDEX IF NOT EXISTS uq_articles_feed_source_article_id + ON articles(feed_id, source_article_id) + WHERE source_article_id IS NOT NULL; + CREATE UNIQUE INDEX IF NOT EXISTS uq_articles_source_hash + ON articles(source_hash) + WHERE source_hash IS NOT NULL; + CREATE INDEX IF NOT EXISTS idx_articles_status ON articles(status); + CREATE INDEX IF NOT EXISTS idx_articles_published_at ON articles(published_at); + + CREATE TRIGGER IF NOT EXISTS trg_articles_updated_at + AFTER UPDATE ON articles + FOR EACH ROW + BEGIN + UPDATE articles SET updated_at = datetime('now') WHERE id = OLD.id; + END; + + PRAGMA foreign_keys=ON; + """ + ) + + table_rows = conn.execute( + "SELECT name FROM sqlite_master WHERE type = 'table' AND name = 'publish_jobs'" + ).fetchall() + if not table_rows: + conn.executescript( + """ + CREATE TABLE IF NOT EXISTS publish_jobs ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + article_id INTEGER NOT NULL, + status TEXT NOT NULL CHECK (status IN ('queued', 'running', 'success', 'failed')), + attempts INTEGER NOT NULL DEFAULT 0, + max_attempts INTEGER NOT NULL DEFAULT 3, + error_message TEXT, + wp_post_id INTEGER, + wp_post_url TEXT, + created_at TEXT NOT NULL DEFAULT (datetime('now')), + started_at TEXT, + finished_at TEXT, + FOREIGN KEY(article_id) REFERENCES articles(id) ON DELETE CASCADE + ); + CREATE INDEX IF NOT EXISTS idx_publish_jobs_status_created_at ON publish_jobs(status, created_at); + """ + ) + + +def rows_to_dicts(rows: list[sqlite3.Row]) -> list[dict[str, Any]]: + return [dict(r) for r in rows] diff --git a/backend/app/ingestion.py b/backend/app/ingestion.py new file mode 100644 index 0000000..391af92 --- /dev/null +++ b/backend/app/ingestion.py @@ -0,0 +1,486 @@ +from __future__ import annotations + +from dataclasses import dataclass +from datetime import datetime, timedelta, timezone +import hashlib +import json +import re +import time +from typing import Any +from urllib.parse import unquote, urlencode, urlparse, parse_qs +import urllib.error +import urllib.request as _urllib_req + +import feedparser + +from .repositories import ( + ArticleUpsert, + RunCreate, + create_run, + find_existing_article_for_upsert, + finish_run, + get_feed_by_id, + list_enabled_feeds, + update_feed_fetch_state, + upsert_article, +) +from .source_extraction import extract_article, extracted_article_to_meta + + +@dataclass(frozen=True) +class IngestionStats: + run_id: int + feeds_processed: int + entries_seen: int + articles_upserted: int + status: str + message: str + + +MAX_FEED_FETCH_RETRIES = 3 + + +def _normalize_article_url(url: str) -> str: + """Strip AMP and tracking query parameters from article URLs. + + Removes ?outputType=valid_amp and other AMP/tracking params so that + AMP and non-AMP versions of the same article are deduplicated. + """ + _AMP_PARAMS = {"outputtype", "amp", "outputformat"} + try: + from urllib.parse import parse_qs, urlencode + parsed = urlparse(url) + if not parsed.query: + return url + params = parse_qs(parsed.query, keep_blank_values=True) + filtered = {k: v for k, v in params.items() if k.lower() not in _AMP_PARAMS} + new_query = urlencode(filtered, doseq=True) + return parsed._replace(query=new_query).geturl() + except Exception: + return url + + +def _resolve_google_redirect(url: str) -> str: + """Extract the real article URL from Google redirect URLs. + + Google Alerts feed entries use tracking links like: + https://www.google.com/url?rct=j&sa=t&url=&ct=ga&... + + This function returns the decoded real URL if detected, otherwise the + original URL unchanged. + """ + try: + parsed = urlparse(url) + host = (parsed.hostname or "").lower() + if host not in ("www.google.com", "google.com"): + return url + if parsed.path not in ("/url", "/url/"): + return url + params = parse_qs(parsed.query, keep_blank_values=False) + real_urls = params.get("url") + if real_urls: + return unquote(real_urls[0]) + except Exception: + pass + return url + + +def _entry_published_iso(entry: dict) -> str | None: + published = entry.get("published_parsed") or entry.get("updated_parsed") + if not published: + return None + return datetime(*published[:6], tzinfo=timezone.utc).isoformat() + + +def _entry_text(entry: dict) -> tuple[str, str]: + summary = entry.get("summary", "") or "" + content = "" + if entry.get("content") and isinstance(entry.get("content"), list): + first = entry["content"][0] + content = first.get("value", "") if isinstance(first, dict) else "" + if not content: + content = summary + return summary, content + + +def _entry_hash(entry: dict, feed_id: int, link: str, title: str, summary: str) -> str: + source_id = entry.get("id") or entry.get("guid") or "" + published = _entry_published_iso(entry) or "" + fingerprint = f"{feed_id}|{source_id}|{link}|{title.strip()}|{summary.strip()}|{published}" + return hashlib.sha256(fingerprint.encode("utf-8")).hexdigest() + + +def _parsed_get(parsed: object, key: str, default: object = None) -> object: + if isinstance(parsed, dict): + return parsed.get(key, default) + return getattr(parsed, key, default) + + +def _normalize_tokens(text: str) -> set[str]: + normalized = re.sub(r"[^a-z0-9]+", " ", text.lower()) + return {token for token in normalized.split() if len(token) >= 4} + + +def _probe_image_url(url: str, timeout: int = 5) -> bool: + """Return True if URL responds without a 4xx/5xx error (HEAD request). + + Returns True on network/connection errors so that a flaky server does not + cause a valid image to be silently dropped. + """ + try: + req = _urllib_req.Request( + url, + method="HEAD", + headers={"User-Agent": "Mozilla/5.0 (compatible; rss-news/1.0)"}, + ) + with _urllib_req.urlopen(req, timeout=timeout) as resp: + return resp.status < 400 + except urllib.error.HTTPError as exc: + return exc.code < 400 # 3xx redirects are OK; 4xx/5xx are not + except Exception: + return True # network error → don't filter, let WP try later + + +def _rank_image_candidates(source_url: str, title: str, images: list[str]) -> list[dict[str, Any]]: + source_host = (urlparse(source_url).hostname or "").lower() + is_presseportal = "presseportal.de" in source_host + title_tokens = _normalize_tokens(title) + blocked_patterns = ("logo", "badge", "app-store", "google-play", "na-logo", "sprite", "icon", "favicon", "tracking", "pixel", ".svg", ".ico", ".gif") + # Known placeholder/default images that should never be used as featured image + placeholder_patterns = ("some-default.jpg", "default-image", "placeholder", "no-image", "noimage") + + + ranked: list[dict[str, Any]] = [] + for url in images: + # Skip inline data: URIs (e.g. base64-encoded SVG placeholders) + if url.startswith("data:"): + continue + + parsed = urlparse(url) + path = unquote(parsed.path.lower()) + full = f"{parsed.netloc.lower()}{path}" + score = 0 + reasons: list[str] = [] + + if any(token in full for token in placeholder_patterns): + score -= 300 + reasons.append("placeholder-image") + + if any(token in full for token in blocked_patterns): + score -= 150 + reasons.append("blocked-pattern") + + if is_presseportal and "/thumbnail/story_big/" in path: + score += 120 + reasons.append("presseportal-story-big") + elif is_presseportal and "/thumbnail/highlight/" in path: + score += 45 + reasons.append("presseportal-highlight") + elif is_presseportal and "/thumbnail/liste/" in path: + score -= 40 + reasons.append("presseportal-list") + + if "crop=" in (parsed.query or "").lower(): + score -= 10 + reasons.append("cropped-preview") + + path_tokens = _normalize_tokens(path.replace("-", " ")) + overlap = len(title_tokens.intersection(path_tokens)) + if overlap > 0: + score += min(30, overlap * 6) + reasons.append(f"title-match:{overlap}") + + ranked.append({"url": url, "score": score, "reasons": reasons}) + + ranked.sort(key=lambda item: item["score"], reverse=True) + return ranked + + +def _select_relevant_images(source_url: str, title: str, images: list[str], max_keep: int = 3) -> tuple[list[str], str | None, list[dict[str, Any]]]: + # dedupe incoming order first + deduped: list[str] = [] + seen: set[str] = set() + for image in images: + if image and image not in seen: + seen.add(image) + deduped.append(image) + + ranked = _rank_image_candidates(source_url, title, deduped) + candidates = [item["url"] for item in ranked if item["score"] > -100] + + # Probe top candidates (max 4) to skip definitively broken URLs (HTTP 4xx). + # Network errors are treated as OK to avoid false negatives on flaky servers. + primary = None + kept: list[str] = [] + for url in candidates[:4]: + if _probe_image_url(url): + if primary is None: + primary = url + kept.append(url) + if len(kept) >= max_keep: + break + + # Fallback: if all probes failed with network errors, use best candidate anyway + if not kept and candidates: + primary = candidates[0] + kept = candidates[:max_keep] + + return kept, primary, ranked + + +def _merge_ingestion_meta(existing_meta_json: str | None, attribution: dict[str, Any], extraction_meta: dict[str, Any]) -> str: + meta: dict[str, Any] = {} + if existing_meta_json: + try: + parsed = json.loads(existing_meta_json) + if isinstance(parsed, dict): + meta = parsed + except Exception: + meta = {} + meta["attribution"] = attribution + meta["extraction"] = extraction_meta + return json.dumps(meta, ensure_ascii=False) + + +def run_ingestion(feed_id: int | None = None) -> IngestionStats: + run_id = create_run(RunCreate(run_type="ingestion", status="running", details="started")) + feeds_processed = 0 + entries_seen = 0 + articles_upserted = 0 + feed_results: list[dict[str, object]] = [] + + try: + if feed_id is not None: + feed = get_feed_by_id(feed_id) + feeds = [feed] if feed and int(feed.get("is_enabled", 0)) == 1 else [] + else: + feeds = list_enabled_feeds() + + for feed in feeds: + if not feed: + continue + feeds_processed += 1 + + parsed = None + feed_error = None + for attempt in range(1, MAX_FEED_FETCH_RETRIES + 1): + try: + parsed = feedparser.parse( + feed["url"], + etag=feed.get("etag"), + modified=feed.get("last_modified"), + ) + break + except Exception as exc: + feed_error = str(exc) + if attempt < MAX_FEED_FETCH_RETRIES: + time.sleep(0.5 * attempt) + + if parsed is None: + feed_results.append( + { + "feed_id": int(feed["id"]), + "feed_url": feed["url"], + "status": "failed", + "error": feed_error or "unknown", + "entries_seen": 0, + "upserts": 0, + } + ) + continue + + # Persist ETag/Last-Modified for conditional requests. + parsed_etag = _parsed_get(parsed, "etag") + parsed_modified = _parsed_get(parsed, "modified") + if parsed_modified and not isinstance(parsed_modified, str): + parsed_modified = str(parsed_modified) + update_feed_fetch_state( + feed_id=int(feed["id"]), + etag=parsed_etag if isinstance(parsed_etag, str) else None, + last_modified=parsed_modified if isinstance(parsed_modified, str) else None, + ) + + feed_entries_seen = 0 + feed_upserts = 0 + from .config import get_settings as _get_settings + _max_age_days = _get_settings().pipeline_max_article_age_days + for entry in _parsed_get(parsed, "entries", []): + entries_seen += 1 + feed_entries_seen += 1 + link = entry.get("link") + if not link: + continue + + # Age filter: skip articles older than max_age_days (0 = no limit) + if _max_age_days > 0: + published_iso = _entry_published_iso(entry) + if published_iso: + try: + published_dt = datetime.fromisoformat(published_iso) + age = datetime.now(timezone.utc) - published_dt + if age > timedelta(days=_max_age_days): + continue + except Exception: + pass # can't parse date → allow through + + # Resolve Google redirect URLs (google.com/url?...&url=&...) + link = _resolve_google_redirect(link) + # Normalize AMP/tracking params (e.g. ?outputType=valid_amp) + link = _normalize_article_url(link) + + summary, content_raw = _entry_text(entry) + # Strip HTML tags from title (Google Alerts wraps matched keywords in ) + raw_title = entry.get("title") or "Ohne Titel" + title = re.sub(r"<[^>]+>", "", raw_title).strip() or "Ohne Titel" + extracted = extract_article(link) + + final_title = extracted.title or title + final_author = extracted.author or entry.get("author") + final_summary = extracted.summary or (summary[:1000] if summary else None) + final_content_raw = extracted.content_text or content_raw + final_canonical = extracted.canonical_url or entry.get("link") + selected_images, primary_image, ranked_images = _select_relevant_images( + link, + final_title, + extracted.images, + max_keep=3, + ) + + source_hash = _entry_hash( + entry, + int(feed["id"]), + link, + final_title, + final_summary or "", + ) + attribution = { + "source_name": feed.get("source_name"), + "source_base_url": feed.get("source_base_url"), + "source_terms_url": feed.get("source_terms_url"), + "source_license_name": feed.get("source_license_name"), + "source_risk_level": feed.get("source_risk_level"), + "original_link": link, + "feed_name": feed.get("name"), + "feed_id": int(feed["id"]), + "imported_at": datetime.now(timezone.utc).isoformat(), + } + extraction_meta: dict[str, Any] = extracted_article_to_meta(extracted) + extraction_meta["fetched_from"] = link + extraction_meta["image_selection"] = { + "primary": primary_image, + "selected_count": len(selected_images), + "total_candidates": len(extracted.images), + "ranked": ranked_images, + } + base_payload = ArticleUpsert( + feed_id=int(feed["id"]), + source_article_id=entry.get("id") or entry.get("guid"), + source_hash=source_hash, + title=final_title, + source_url=link, + canonical_url=final_canonical, + published_at=_entry_published_iso(entry), + author=final_author, + summary=final_summary, + content_raw=final_content_raw, + content_rewritten=None, + image_urls_json=json.dumps(selected_images, ensure_ascii=False) if selected_images else None, + press_contact=extracted.press_contact, + source_name_snapshot=feed.get("source_name"), + source_terms_url_snapshot=feed.get("source_terms_url"), + source_license_name_snapshot=feed.get("source_license_name"), + legal_checked=False, + legal_checked_at=None, + legal_note=None, + wp_post_id=None, + wp_post_url=None, + publish_attempts=0, + publish_last_error=None, + published_to_wp_at=None, + word_count=len((final_content_raw or "").split()), + status="new", + meta_json=json.dumps({"attribution": attribution, "extraction": extraction_meta}, ensure_ascii=False), + ) + existing = find_existing_article_for_upsert(base_payload) + if existing and existing.get("status") == "error": + # Explicitly closed article: ignore on subsequent ingestion runs. + continue + + payload = base_payload + if existing: + payload = ArticleUpsert( + feed_id=base_payload.feed_id, + source_article_id=base_payload.source_article_id, + source_hash=base_payload.source_hash, + title=base_payload.title, + source_url=base_payload.source_url, + canonical_url=base_payload.canonical_url, + published_at=base_payload.published_at, + author=base_payload.author, + summary=base_payload.summary, + content_raw=base_payload.content_raw, + content_rewritten=existing.get("content_rewritten"), + image_urls_json=base_payload.image_urls_json, + press_contact=base_payload.press_contact or existing.get("press_contact"), + source_name_snapshot=base_payload.source_name_snapshot, + source_terms_url_snapshot=base_payload.source_terms_url_snapshot, + source_license_name_snapshot=base_payload.source_license_name_snapshot, + legal_checked=bool(int(existing.get("legal_checked", 0))), + legal_checked_at=existing.get("legal_checked_at"), + legal_note=existing.get("legal_note"), + wp_post_id=existing.get("wp_post_id"), + wp_post_url=existing.get("wp_post_url"), + publish_attempts=int(existing.get("publish_attempts", 0)), + publish_last_error=existing.get("publish_last_error"), + published_to_wp_at=existing.get("published_to_wp_at"), + word_count=base_payload.word_count, + status=existing.get("status") or "new", + meta_json=_merge_ingestion_meta(existing.get("meta_json"), attribution, extraction_meta), + ) + + article_id = upsert_article(payload) + if article_id: + articles_upserted += 1 + feed_upserts += 1 + + feed_results.append( + { + "feed_id": int(feed["id"]), + "feed_url": feed["url"], + "status": "success", + "entries_seen": feed_entries_seen, + "upserts": feed_upserts, + } + ) + + finish_run( + run_id=run_id, + status="success", + details=json.dumps( + { + "feeds_processed": feeds_processed, + "entries_seen": entries_seen, + "upserts": articles_upserted, + "feeds": feed_results, + }, + ensure_ascii=False, + ), + ) + return IngestionStats( + run_id=run_id, + feeds_processed=feeds_processed, + entries_seen=entries_seen, + articles_upserted=articles_upserted, + status="success", + message="Ingestion abgeschlossen", + ) + except Exception as exc: + finish_run(run_id=run_id, status="failed", details=str(exc)) + return IngestionStats( + run_id=run_id, + feeds_processed=feeds_processed, + entries_seen=entries_seen, + articles_upserted=articles_upserted, + status="failed", + message=str(exc), + ) diff --git a/backend/app/main.py b/backend/app/main.py new file mode 100644 index 0000000..b4776af --- /dev/null +++ b/backend/app/main.py @@ -0,0 +1,727 @@ +import asyncio +from contextlib import asynccontextmanager +import csv +from datetime import datetime, timezone +import io +import json +import logging +from pathlib import Path + +from fastapi import Depends, FastAPI, HTTPException, Request, Response, status +from fastapi.responses import JSONResponse +from pydantic import BaseModel, Field +from fastapi.staticfiles import StaticFiles + +from .admin_ui import router as admin_router +from .auth import create_session_token, verify_credentials, verify_session_token +from .config import get_settings +from .db import init_db +from .ingestion import run_ingestion +from .pipeline import run_auto_pipeline +from .policy import evaluate_source_policy, is_source_allowed +from .publisher import enqueue_publish, run_publisher +from .relevance import article_age_days, article_relevance +from .rewrite import generate_article_tags, merge_generated_tags, rewrite_article_text +from .telegram_bot import handle_update, setup_webhook +from .repositories import ( + ArticleUpsert, + FeedCreate, + RunCreate, + SourceCreate, + create_feed as repo_create_feed, + create_run, + create_source as repo_create_source, + finish_run, + get_article_by_id, + get_feed_by_id, + get_run_by_id, + get_source_by_id, + list_publish_jobs, + list_articles as repo_list_articles, + list_feeds as repo_list_feeds, + list_runs, + list_sources as repo_list_sources, + set_article_legal_review, + update_article_status, + upsert_article as repo_upsert_article, +) +from .workflow import ALLOWED_UI_TRANSITIONS, UI_STATUSES, internal_to_ui_status, ui_to_internal_status + +settings = get_settings() + + +@asynccontextmanager +async def app_lifespan(_: FastAPI): + init_db() + yield + + +app = FastAPI(title=settings.app_name, lifespan=app_lifespan) +app.include_router(admin_router) +app.mount( + "/admin/static", + StaticFiles(directory=str(Path(__file__).resolve().parent.parent / "static")), + name="admin-static", +) + + +class LoginRequest(BaseModel): + username: str + password: str + + +class SourceCreateRequest(BaseModel): + name: str = Field(min_length=1, max_length=200) + base_url: str | None = None + terms_url: str | None = None + license_name: str | None = None + risk_level: str = Field(default="yellow", pattern="^(green|yellow|red)$") + is_enabled: bool = False + notes: str | None = None + last_reviewed_at: str | None = None + + +class FeedCreateRequest(BaseModel): + name: str = Field(min_length=1, max_length=200) + url: str = Field(min_length=5, max_length=1000) + source_id: int | None = None + is_enabled: bool = True + + +class RunCreateRequest(BaseModel): + run_type: str = Field(min_length=2, max_length=100) + status: str = Field(default="queued", pattern="^(queued|running|success|failed)$") + details: str | None = None + + +class RunFinishRequest(BaseModel): + status: str = Field(pattern="^(success|failed)$") + details: str | None = None + + +class ArticleUpsertRequest(BaseModel): + feed_id: int | None = None + source_article_id: str | None = None + source_hash: str | None = None + title: str = Field(min_length=1, max_length=500) + source_url: str = Field(min_length=5, max_length=2000) + canonical_url: str | None = None + published_at: str | None = None + author: str | None = None + summary: str | None = None + content_raw: str | None = None + content_rewritten: str | None = None + image_urls_json: str | None = None + press_contact: str | None = None + source_name_snapshot: str | None = None + source_terms_url_snapshot: str | None = None + source_license_name_snapshot: str | None = None + legal_checked: bool = False + legal_checked_at: str | None = None + legal_note: str | None = None + wp_post_id: int | None = None + wp_post_url: str | None = None + publish_attempts: int = 0 + publish_last_error: str | None = None + published_to_wp_at: str | None = None + word_count: int = 0 + status: str = Field(default="new", pattern="^(new|rewrite|publish|published|close|review|approved|error|no_image)$") + meta_json: str | None = None + + +class IngestionRunRequest(BaseModel): + feed_id: int | None = None + + +class ArticleTransitionRequest(BaseModel): + target_status: str = Field(pattern="^(new|rewrite|publish|published|close|review|approved|error|no_image)$") + note: str | None = None + + +class ArticleReviewRequest(BaseModel): + decision: str = Field(pattern="^(approve|reject)$") + note: str | None = None + + +class ArticleLegalReviewRequest(BaseModel): + approved: bool + note: str | None = None + + +class PublisherEnqueueRequest(BaseModel): + article_id: int + max_attempts: int = 3 + + +class PublisherRunRequest(BaseModel): + max_jobs: int = 10 + + +ALLOWED_ARTICLE_TRANSITIONS: dict[str, set[str]] = { + "new": {"rewrite", "error"}, + "rewrite": {"approved", "error"}, + "approved": {"published", "error"}, + "published": {"error"}, + "error": {"rewrite"}, +} + + +def require_auth(request: Request) -> str: + token = request.cookies.get(settings.session_cookie_name) + if not token: + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Nicht angemeldet") + + username = verify_session_token(token) + if not username: + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Session ungueltig oder abgelaufen") + + return username + + +@app.get("/health") +def health() -> dict: + return {"status": "ok", "service": settings.app_name, "db_path": settings.app_db_path} + + +@app.post("/auth/login") +def login(payload: LoginRequest, response: Response) -> dict: + if not verify_credentials(payload.username, payload.password): + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Ungueltige Zugangsdaten") + + token = create_session_token(payload.username) + response.set_cookie( + key=settings.session_cookie_name, + value=token, + max_age=settings.session_max_age_seconds, + httponly=True, + secure=False, + samesite="lax", + ) + return {"ok": True, "username": payload.username} + + +@app.post("/auth/logout") +def logout(response: Response) -> dict: + response.delete_cookie(settings.session_cookie_name) + return {"ok": True} + + +@app.get("/auth/me") +def me(username: str = Depends(require_auth)) -> dict: + return {"authenticated": True, "username": username} + + +@app.get("/api/protected") +def protected(username: str = Depends(require_auth)) -> dict: + return {"ok": True, "message": "Protected endpoint", "username": username} + + +@app.get("/api/pipeline/status") +def pipeline_status(username: str = Depends(require_auth)) -> dict: + feeds_total = len(repo_list_feeds()) + sources_total = len(repo_list_sources()) + articles_total = len(repo_list_articles(limit=500)) + return { + "ok": True, + "stage": "skeleton+db", + "requested_by": username, + "counts": { + "sources": sources_total, + "feeds": feeds_total, + "articles": articles_total, + }, + } + + +@app.get("/api/sources") +def list_sources(username: str = Depends(require_auth)) -> dict: + return {"ok": True, "items": repo_list_sources(), "requested_by": username} + + +@app.get("/api/sources/{source_id}/policy-check") +def source_policy_check(source_id: int, username: str = Depends(require_auth)) -> dict: + source = get_source_by_id(source_id) + if not source: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Quelle nicht gefunden") + issues = evaluate_source_policy(source) + return { + "ok": True, + "source_id": source_id, + "allowed": is_source_allowed(source), + "issues": issues, + "requested_by": username, + } + + +@app.post("/api/sources") +def create_source(payload: SourceCreateRequest, username: str = Depends(require_auth)) -> dict: + source_id = repo_create_source( + SourceCreate( + name=payload.name, + base_url=payload.base_url, + terms_url=payload.terms_url, + license_name=payload.license_name, + risk_level=payload.risk_level, + is_enabled=payload.is_enabled, + notes=payload.notes, + last_reviewed_at=payload.last_reviewed_at, + ) + ) + return {"ok": True, "id": source_id, "requested_by": username} + + +@app.get("/api/feeds") +def list_feeds(username: str = Depends(require_auth)) -> dict: + return {"ok": True, "items": repo_list_feeds(), "requested_by": username} + + +@app.get("/api/feeds/{feed_id}/policy-check") +def feed_policy_check(feed_id: int, username: str = Depends(require_auth)) -> dict: + feed = get_feed_by_id(feed_id) + if not feed: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Feed nicht gefunden") + + source_snapshot = { + "id": feed.get("source_id"), + "name": feed.get("source_name"), + "base_url": feed.get("source_base_url"), + "terms_url": feed.get("source_terms_url"), + "license_name": feed.get("source_license_name"), + "risk_level": feed.get("source_risk_level"), + "last_reviewed_at": feed.get("source_last_reviewed_at"), + "is_enabled": feed.get("source_is_enabled"), + } + issues = evaluate_source_policy(source_snapshot) + return { + "ok": True, + "feed_id": feed_id, + "allowed": len(issues) == 0, + "issues": issues, + "requested_by": username, + } + + +@app.post("/api/feeds") +def create_feed(payload: FeedCreateRequest, username: str = Depends(require_auth)) -> dict: + try: + feed_id = repo_create_feed( + FeedCreate( + name=payload.name, + url=payload.url, + source_id=payload.source_id, + is_enabled=payload.is_enabled, + ) + ) + except Exception as exc: + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail=f"Feed konnte nicht angelegt werden: {exc}") from exc + + return {"ok": True, "id": feed_id, "requested_by": username} + + +@app.get("/api/runs") +def api_list_runs(limit: int = 50, username: str = Depends(require_auth)) -> dict: + return {"ok": True, "items": list_runs(limit=limit), "requested_by": username} + + +@app.get("/api/runs/{run_id}") +def api_get_run(run_id: int, username: str = Depends(require_auth)) -> dict: + run = get_run_by_id(run_id) + if not run: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Run nicht gefunden") + return {"ok": True, "item": run, "requested_by": username} + + +@app.post("/api/runs") +def api_create_run(payload: RunCreateRequest, username: str = Depends(require_auth)) -> dict: + run_id = create_run(RunCreate(run_type=payload.run_type, status=payload.status, details=payload.details)) + return {"ok": True, "id": run_id, "requested_by": username} + + +@app.post("/api/runs/{run_id}/finish") +def api_finish_run(run_id: int, payload: RunFinishRequest, username: str = Depends(require_auth)) -> dict: + finish_run(run_id=run_id, status=payload.status, details=payload.details) + return {"ok": True, "id": run_id, "requested_by": username} + + +@app.get("/api/articles") +def api_list_articles(limit: int = 100, status_filter: str | None = None, username: str = Depends(require_auth)) -> dict: + internal_filter = ui_to_internal_status(status_filter) if status_filter else None + items = repo_list_articles(limit=limit, status_filter=internal_filter) + for item in items: + item["status_ui"] = internal_to_ui_status(item.get("status")) + return {"ok": True, "items": items, "requested_by": username} + + +@app.get("/api/articles/export") +def api_export_articles( + format: str = "json", + status_filter: str | None = None, + username: str = Depends(require_auth), +): + internal_filter = ui_to_internal_status(status_filter) if status_filter else None + articles = repo_list_articles(limit=500, status_filter=internal_filter) + rows = [] + for article in articles: + meta: dict = {} + if article.get("meta_json"): + try: + parsed = json.loads(article["meta_json"]) + if isinstance(parsed, dict): + meta = parsed + except Exception: + meta = {} + image_review = meta.get("image_review") if isinstance(meta.get("image_review"), dict) else {} + selected_image_url = image_review.get("selected_url") if isinstance(image_review.get("selected_url"), str) else None + + days_old = article_age_days(article.get("published_at")) + rows.append( + { + "id": article.get("id"), + "title": article.get("title"), + "status": article.get("status"), + "published_at": article.get("published_at"), + "days_old": days_old, + "relevance": article_relevance(article.get("published_at")), + "author": article.get("author"), + "source_url": article.get("source_url"), + "canonical_url": article.get("canonical_url"), + "source_name_snapshot": article.get("source_name_snapshot"), + "source_license_name_snapshot": article.get("source_license_name_snapshot"), + "source_terms_url_snapshot": article.get("source_terms_url_snapshot"), + "press_contact": article.get("press_contact"), + "image_urls_json": article.get("image_urls_json"), + "selected_image_url": selected_image_url, + "legal_checked": bool(int(article.get("legal_checked", 0))), + "legal_checked_at": article.get("legal_checked_at"), + "legal_note": article.get("legal_note"), + } + ) + + generated_at = datetime.now(timezone.utc).isoformat() + if format == "csv": + out = io.StringIO() + fieldnames = [ + "id", + "title", + "status", + "published_at", + "days_old", + "relevance", + "author", + "source_url", + "canonical_url", + "source_name_snapshot", + "source_license_name_snapshot", + "source_terms_url_snapshot", + "press_contact", + "image_urls_json", + "selected_image_url", + "legal_checked", + "legal_checked_at", + "legal_note", + ] + writer = csv.DictWriter(out, fieldnames=fieldnames) + writer.writeheader() + writer.writerows(rows) + return Response( + content=out.getvalue(), + media_type="text/csv; charset=utf-8", + headers={"Content-Disposition": 'attachment; filename="articles_export.csv"'}, + ) + + return JSONResponse( + { + "ok": True, + "count": len(rows), + "generated_at": generated_at, + "status_filter": status_filter, + "items": rows, + "requested_by": username, + } + ) + + +@app.get("/api/articles/{article_id}") +def api_get_article(article_id: int, username: str = Depends(require_auth)) -> dict: + article = get_article_by_id(article_id) + if not article: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Artikel nicht gefunden") + article["status_ui"] = internal_to_ui_status(article.get("status")) + return {"ok": True, "item": article, "requested_by": username} + + +@app.post("/api/articles/upsert") +def api_upsert_article(payload: ArticleUpsertRequest, username: str = Depends(require_auth)) -> dict: + article_id = repo_upsert_article( + ArticleUpsert( + feed_id=payload.feed_id, + source_article_id=payload.source_article_id, + source_hash=payload.source_hash, + title=payload.title, + source_url=payload.source_url, + canonical_url=payload.canonical_url, + published_at=payload.published_at, + author=payload.author, + summary=payload.summary, + content_raw=payload.content_raw, + content_rewritten=payload.content_rewritten, + image_urls_json=payload.image_urls_json, + press_contact=payload.press_contact, + source_name_snapshot=payload.source_name_snapshot, + source_terms_url_snapshot=payload.source_terms_url_snapshot, + source_license_name_snapshot=payload.source_license_name_snapshot, + legal_checked=payload.legal_checked, + legal_checked_at=payload.legal_checked_at, + legal_note=payload.legal_note, + wp_post_id=payload.wp_post_id, + wp_post_url=payload.wp_post_url, + publish_attempts=payload.publish_attempts, + publish_last_error=payload.publish_last_error, + published_to_wp_at=payload.published_to_wp_at, + word_count=payload.word_count, + status=ui_to_internal_status(payload.status), + meta_json=payload.meta_json, + ) + ) + return {"ok": True, "id": article_id, "requested_by": username} + + +@app.post("/api/articles/{article_id}/transition") +def api_article_transition(article_id: int, payload: ArticleTransitionRequest, username: str = Depends(require_auth)) -> dict: + article = get_article_by_id(article_id) + if not article: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Artikel nicht gefunden") + + current_status = article.get("status") + current_ui = internal_to_ui_status(current_status) + target_internal = ui_to_internal_status(payload.target_status) + target_ui = internal_to_ui_status(target_internal) + allowed_targets = ALLOWED_UI_TRANSITIONS.get(current_ui, set()) + if target_ui not in allowed_targets: + raise HTTPException( + status_code=status.HTTP_400_BAD_REQUEST, + detail=f"Ungueltiger Statuswechsel: {current_ui} -> {target_ui}", + ) + + updated = update_article_status(article_id, target_internal, actor=username, note=payload.note) + if not updated: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Artikel nicht gefunden") + return {"ok": True, "id": article_id, "from_status": current_ui, "to_status": target_ui} + + +@app.post("/api/articles/{article_id}/rewrite-run") +def api_article_rewrite_run(article_id: int, username: str = Depends(require_auth)) -> dict: + article = get_article_by_id(article_id) + if not article: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Artikel nicht gefunden") + if internal_to_ui_status(article.get("status")) not in {"rewrite", "new"}: + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Rewrite nur aus Status 'new' oder 'rewrite'") + + rewritten = rewrite_article_text(article) + tags: list[str] = [] + try: + tags = generate_article_tags(article, rewritten_text=rewritten) + except Exception: + tags = [] + merged_meta = merge_generated_tags(article.get("meta_json"), tags) + # upsert via status update + existing fields by lightweight path: + repo_upsert_article( + ArticleUpsert( + feed_id=article.get("feed_id"), + source_article_id=article.get("source_article_id"), + source_hash=article.get("source_hash"), + title=article.get("title"), + source_url=article.get("source_url"), + canonical_url=article.get("canonical_url"), + published_at=article.get("published_at"), + author=article.get("author"), + summary=article.get("summary"), + content_raw=article.get("content_raw"), + content_rewritten=rewritten, + image_urls_json=article.get("image_urls_json"), + press_contact=article.get("press_contact"), + source_name_snapshot=article.get("source_name_snapshot"), + source_terms_url_snapshot=article.get("source_terms_url_snapshot"), + source_license_name_snapshot=article.get("source_license_name_snapshot"), + legal_checked=bool(int(article.get("legal_checked", 0))), + legal_checked_at=article.get("legal_checked_at"), + legal_note=article.get("legal_note"), + wp_post_id=article.get("wp_post_id"), + wp_post_url=article.get("wp_post_url"), + publish_attempts=int(article.get("publish_attempts", 0)), + publish_last_error=article.get("publish_last_error"), + published_to_wp_at=article.get("published_to_wp_at"), + word_count=len(rewritten.split()), + status="approved", + meta_json=merged_meta, + ) + ) + return {"ok": True, "id": article_id, "status": "publish", "tags": tags} + + +@app.post("/api/articles/{article_id}/legal-review") +def api_article_legal_review(article_id: int, payload: ArticleLegalReviewRequest, username: str = Depends(require_auth)) -> dict: + article = get_article_by_id(article_id) + if not article: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Artikel nicht gefunden") + + updated = set_article_legal_review(article_id, approved=payload.approved, note=payload.note, actor=username) + if not updated: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Artikel nicht gefunden") + return { + "ok": True, + "id": article_id, + "legal_checked": payload.approved, + } + + +@app.get("/api/publisher/jobs") +def api_publisher_jobs(limit: int = 100, username: str = Depends(require_auth)) -> dict: + return {"ok": True, "items": list_publish_jobs(limit=limit), "requested_by": username} + + +@app.post("/api/publisher/enqueue") +def api_publisher_enqueue(payload: PublisherEnqueueRequest, username: str = Depends(require_auth)) -> dict: + article = get_article_by_id(payload.article_id) + if not article: + raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Artikel nicht gefunden") + job_id = enqueue_publish(article_id=payload.article_id, max_attempts=payload.max_attempts) + return {"ok": True, "job_id": job_id, "article_id": payload.article_id, "requested_by": username} + + +@app.post("/api/publisher/run") +def api_publisher_run(payload: PublisherRunRequest, username: str = Depends(require_auth)) -> dict: + stats = run_publisher(max_jobs=payload.max_jobs) + return { + "ok": True, + "requested_by": username, + "stats": { + "processed": stats.processed, + "success": stats.success, + "failed": stats.failed, + "requeued": stats.requeued, + }, + } + + +@app.post("/api/articles/{article_id}/review") +def api_article_review(article_id: int, payload: ArticleReviewRequest, username: str = Depends(require_auth)) -> dict: + raise HTTPException(status_code=status.HTTP_410_GONE, detail="Review-Endpoint ersetzt durch Rewrite-Workflow") + + +@app.post("/api/ingestion/run") +def api_run_ingestion(payload: IngestionRunRequest, username: str = Depends(require_auth)) -> dict: + stats = run_ingestion(feed_id=payload.feed_id) + return { + "ok": stats.status == "success", + "run_id": stats.run_id, + "status": stats.status, + "message": stats.message, + "stats": { + "feeds_processed": stats.feeds_processed, + "entries_seen": stats.entries_seen, + "articles_upserted": stats.articles_upserted, + }, + "requested_by": username, + } + + +# --------------------------------------------------------------------------- +# N8N Automation endpoint (API-Key auth, no session cookie required) +# --------------------------------------------------------------------------- + +def _require_api_key(request: Request) -> None: + api_key = request.headers.get("X-API-Key") or request.query_params.get("api_key") + expected = settings.n8n_api_key + if not expected: + raise HTTPException(status_code=status.HTTP_501_NOT_IMPLEMENTED, detail="N8N_API_KEY nicht konfiguriert") + if api_key != expected: + raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Ungültiger API-Key") + + +_pipeline_lock = asyncio.Lock() + + +@app.post("/api/n8n/pipeline") +async def api_n8n_pipeline(request: Request) -> dict: + """Trigger the full auto pipeline in background. Returns immediately. + Called by N8N (2x/day or on demand). Results arrive via Telegram.""" + _require_api_key(request) + + if _pipeline_lock.locked(): + logging.getLogger(__name__).warning("Pipeline bereits aktiv – Trigger ignoriert") + return {"ok": False, "message": "Pipeline läuft bereits – Trigger ignoriert"} + + async def _run(): + async with _pipeline_lock: + loop = asyncio.get_event_loop() + try: + await loop.run_in_executor(None, lambda: run_auto_pipeline(trigger="n8n")) + except Exception as exc: + logging.getLogger(__name__).error("Background pipeline error: %s", exc) + + asyncio.create_task(_run()) + return {"ok": True, "message": "Pipeline gestartet – Ergebnisse kommen per Telegram"} + + +@app.post("/api/n8n/ingest") +def api_n8n_ingest(request: Request) -> dict: + """Run only the ingestion step (no rewrite/publish). For N8N.""" + _require_api_key(request) + stats = run_ingestion() + return { + "ok": stats.status == "success", + "stats": { + "feeds_processed": stats.feeds_processed, + "entries_seen": stats.entries_seen, + "articles_upserted": stats.articles_upserted, + }, + } + + +# --------------------------------------------------------------------------- +# Telegram Webhook +# --------------------------------------------------------------------------- + +@app.post("/telegram/webhook") +async def telegram_webhook(request: Request) -> dict: + """Receive updates from Telegram Bot API. + + Returns 200 immediately so Telegram never retries the same update. + Actual processing runs in a background task. + """ + import asyncio + import logging + + # Verify secret token + secret = settings.telegram_webhook_secret + if secret: + incoming = request.headers.get("X-Telegram-Bot-Api-Secret-Token", "") + if incoming != secret: + raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail="Invalid secret") + + body = await request.body() + try: + update = json.loads(body.decode("utf-8")) + except Exception: + raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="Invalid JSON") + + async def _process(): + loop = asyncio.get_event_loop() + try: + await loop.run_in_executor(None, lambda: handle_update(update)) + except Exception as exc: + logging.getLogger(__name__).error("Telegram update handler error: %s", exc) + + asyncio.create_task(_process()) + return {"ok": True} + + +@app.post("/api/telegram/setup-webhook") +def api_setup_telegram_webhook(request: Request) -> dict: + """Register the Telegram webhook URL. Call once after deployment.""" + username = require_auth(request) + base_url = str(request.base_url).rstrip("/") + webhook_url = f"{base_url}/telegram/webhook" + result = setup_webhook(webhook_url) + return {"ok": True, "webhook_url": webhook_url, "telegram_response": result, "requested_by": username} diff --git a/backend/app/pipeline.py b/backend/app/pipeline.py new file mode 100644 index 0000000..93a251b --- /dev/null +++ b/backend/app/pipeline.py @@ -0,0 +1,516 @@ +"""Autonomous RSS-News pipeline. + +Full automated flow: +1. Run RSS ingestion +2. For each new article: + - Auto-select primary image + - Score relevance via GPT + - < warn threshold: reject (error status) → Telegram rejected summary + - warn..auto threshold: Telegram warning with override button + - >= auto threshold: rewrite → create WP draft → Telegram notification +3. Send pipeline summary to Telegram +""" +from __future__ import annotations + +import json +import logging +import time +from dataclasses import dataclass, field +from datetime import datetime, timezone +from typing import Any + +from .config import get_settings +from .ingestion import run_ingestion +from .publisher import enqueue_publish, run_publisher +from .repositories import ( + ArticleUpsert, + get_article_by_id, + list_articles, + set_article_image_decision, + update_article_status, + upsert_article as repo_upsert_article, +) +from .rewrite import generate_article_tags, merge_generated_tags, rewrite_article_text, score_article_relevance +from .scheduler import reserve_publish_slot +from .wordpress import publish_article_draft, selected_image_exists + +logger = logging.getLogger(__name__) + + +@dataclass +class PipelineStats: + ingested: int = 0 + processed: int = 0 + drafts_created: int = 0 + rejected: int = 0 + quality_gate_rejected: int = 0 + warnings: int = 0 + errors: int = 0 + no_image: int = 0 + rejected_articles: list[dict[str, Any]] = field(default_factory=list) + + +# --------------------------------------------------------------------------- +# Internal helpers +# --------------------------------------------------------------------------- + +def _auto_select_image(article: dict[str, Any]) -> bool: + """Auto-select the primary image from ingestion metadata if not already selected.""" + meta_json = article.get("meta_json") or "{}" + try: + meta = json.loads(meta_json) + except Exception: + return False + + # Already selected? + image_review = meta.get("image_review") or {} + if isinstance(image_review, dict) and image_review.get("selected_url"): + return True + + # Try to get primary from ingestion extraction + extraction = meta.get("extraction") or {} + image_selection = extraction.get("image_selection") or {} + primary = image_selection.get("primary") + + if not primary: + # Fallback: use first URL from image_urls_json + image_urls_json = article.get("image_urls_json") or "[]" + try: + urls = json.loads(image_urls_json) + if urls: + primary = urls[0] + except Exception: + pass + + if primary: + set_article_image_decision(int(article["id"]), primary, "select", actor="pipeline") + return True + return False + + +def _store_relevance(article_id: int, relevance: dict[str, Any]) -> None: + """Persist relevance score and reason in article meta_json and relevance_score column.""" + article = get_article_by_id(article_id) + if not article: + return + try: + meta = json.loads(article.get("meta_json") or "{}") + except Exception: + meta = {} + meta["relevance"] = relevance + new_meta = json.dumps(meta, ensure_ascii=False) + from .db import get_conn + with get_conn() as conn: + conn.execute( + "UPDATE articles SET meta_json = ?, relevance_score = ? WHERE id = ?", + (new_meta, relevance.get("score", 0), article_id), + ) + + +def _do_rewrite_and_draft(article: dict[str, Any]) -> tuple[int, str | None]: + """Rewrite article and create WP draft. Returns (wp_post_id, wp_post_url).""" + article_id = int(article["id"]) + settings = get_settings() + + # ── Quality gate 1: raw content length ────────────────────────────────── + import re as _re + raw_text = _re.sub(r"<[^>]+>", " ", article.get("content_raw") or "") + raw_words = len(raw_text.split()) + if raw_words < settings.pipeline_min_words_raw: + note = ( + f"Zu wenig Rohinhalt: {raw_words} Wörter " + f"(Minimum: {settings.pipeline_min_words_raw})" + ) + logger.warning("_do_rewrite_and_draft #%d: %s — überspringe", article_id, note) + update_article_status(article_id, "error", actor="pipeline", note=note) + raise ValueError(note) + + # Rewrite + logger.info("_do_rewrite_and_draft #%d: starte OpenAI-Rewrite (%d Roh-Wörter)", article_id, raw_words) + rewritten = rewrite_article_text(article) + + # ── Quality gate 2: rewritten content length ───────────────────────────── + rewritten_words = len(rewritten.split()) + if rewritten_words < settings.pipeline_min_words_rewritten: + note = ( + f"Rewrite zu kurz: {rewritten_words} Wörter " + f"(Minimum: {settings.pipeline_min_words_rewritten})" + ) + logger.warning("_do_rewrite_and_draft #%d: %s — überspringe", article_id, note) + update_article_status(article_id, "error", actor="pipeline", note=note) + raise ValueError(note) + logger.info("_do_rewrite_and_draft #%d: Rewrite fertig (%d Wörter), generiere Tags", article_id, len(rewritten.split())) + tags: list[str] = [] + try: + tags = generate_article_tags(article, rewritten_text=rewritten) + except Exception: + pass + merged_meta = merge_generated_tags(article.get("meta_json"), tags) + + # Save rewritten content + approved status + repo_upsert_article( + ArticleUpsert( + feed_id=article.get("feed_id"), + source_article_id=article.get("source_article_id"), + source_hash=article.get("source_hash"), + title=article.get("title", ""), + source_url=article.get("source_url", ""), + canonical_url=article.get("canonical_url"), + published_at=article.get("published_at"), + author=article.get("author"), + summary=article.get("summary"), + content_raw=article.get("content_raw"), + content_rewritten=rewritten, + image_urls_json=article.get("image_urls_json"), + press_contact=article.get("press_contact"), + source_name_snapshot=article.get("source_name_snapshot"), + source_terms_url_snapshot=article.get("source_terms_url_snapshot"), + source_license_name_snapshot=article.get("source_license_name_snapshot"), + legal_checked=bool(int(article.get("legal_checked", 0))), + legal_checked_at=article.get("legal_checked_at"), + legal_note=article.get("legal_note"), + wp_post_id=article.get("wp_post_id"), + wp_post_url=article.get("wp_post_url"), + publish_attempts=int(article.get("publish_attempts", 0)), + publish_last_error=article.get("publish_last_error"), + published_to_wp_at=article.get("published_to_wp_at"), + word_count=len(rewritten.split()), + status="approved", + meta_json=merged_meta, + ) + ) + + # Reload after save to get updated meta_json + fresh = get_article_by_id(article_id) + if not fresh: + raise RuntimeError(f"Artikel #{article_id} nach Rewrite nicht gefunden") + + # Ensure a publish slot is reserved — reserve one now if not yet set + if not fresh.get("scheduled_publish_at"): + from .scheduler import reserve_publish_slot + logger.info("_do_rewrite_and_draft #%d: kein Slot gesetzt, reserviere jetzt", article_id) + reserve_publish_slot(article_id) + fresh = get_article_by_id(article_id) + if not fresh: + raise RuntimeError(f"Artikel #{article_id} nach Slot-Reservierung nicht gefunden") + + # Create WP draft + logger.info("_do_rewrite_and_draft #%d: erstelle/aktualisiere WP Draft (wp_post_id=%s, sched=%s)", article_id, fresh.get("wp_post_id"), fresh.get("scheduled_publish_at")) + wp_post_id, wp_post_url = publish_article_draft(fresh) + logger.info("_do_rewrite_and_draft #%d: WP Draft fertig (post_id=%s)", article_id, wp_post_id) + + # Update WP info in DB + from .repositories import mark_article_publish_result + mark_article_publish_result( + article_id, + wp_post_id=wp_post_id, + wp_post_url=wp_post_url, + error=None, + increment_attempts=True, + set_published_status=False, + ) + + return wp_post_id, wp_post_url + + +# --------------------------------------------------------------------------- +# Public pipeline functions +# --------------------------------------------------------------------------- + +def run_auto_pipeline(trigger: str = "auto") -> dict[str, Any]: + """Run the full automated pipeline and return stats dict.""" + from . import telegram_bot as tg + + settings = get_settings() + stats = PipelineStats() + + tg.notify_pipeline_started(trigger) + + # Step 1: Ingestion + try: + ingest_result = run_ingestion() + stats.ingested = ingest_result.articles_upserted + except Exception as exc: + tg.notify_error(f"Ingestion fehlgeschlagen: {exc}") + logger.error("Ingestion error: %s", exc) + stats.errors += 1 + + # Step 2: Process new articles + new_articles = list_articles(limit=100, status_filter="new") + + for article in new_articles: + article_id = int(article["id"]) + try: + _process_article(article, stats, settings) + except Exception as exc: + logger.error("Fehler bei Artikel #%d: %s", article_id, exc) + tg.notify_error(f"Fehler bei Artikel #{article_id} ({article.get('title','?')[:50]}): {exc}") + stats.errors += 1 + # Rate limiting between OpenAI calls + time.sleep(1) + + # Step 3: Send rejected summary if any + if stats.rejected_articles: + try: + tg.notify_rejected_summary(stats.rejected_articles) + except Exception as exc: + logger.warning("Telegram rejected summary fehlgeschlagen: %s", exc) + + # Step 4: Summary + result = { + "ingested": stats.ingested, + "processed": stats.processed, + "drafts_created": stats.drafts_created, + "rejected": stats.rejected, + "quality_gate_rejected": stats.quality_gate_rejected, + "no_image": stats.no_image, + "warnings": stats.warnings, + "errors": stats.errors, + } + tg.notify_pipeline_done(result) + return result + + +def _process_article(article: dict[str, Any], stats: PipelineStats, settings: Any) -> None: + """Process a single new article through the pipeline.""" + from . import telegram_bot as tg + + article_id = int(article["id"]) + + # Auto-select image + _auto_select_image(article) + + # Reload to get updated image_review + article = get_article_by_id(article_id) or article + + # Exclude articles without a usable image + try: + meta = json.loads(article.get("meta_json") or "{}") + except Exception: + meta = {} + has_image = bool((meta.get("image_review") or {}).get("selected_url")) + if not has_image: + update_article_status( + article_id, + "no_image", + actor="pipeline", + note="Kein Bild vorhanden – Artikel ausgeschlossen", + ) + stats.no_image += 1 + logger.info("Artikel #%d ausgeschlossen: kein Bild gefunden", article_id) + try: + tg.send_message( + f"🖼️ Kein Bild – Artikel #{article_id} ausgeschlossen\n" + f"📰 {(article.get('title') or '')[:80]}" + ) + except Exception: + pass + return + + # Score relevance + try: + relevance = score_article_relevance(article) + except Exception as exc: + logger.warning("Relevanz-Scoring für #%d fehlgeschlagen: %s", article_id, exc) + relevance = {"score": 0, "reason": f"Scoring-Fehler: {exc}", "topics": []} + + score = relevance.get("score", 0) + reason = relevance.get("reason", "") + _store_relevance(article_id, relevance) + + stats.processed += 1 + + if score < settings.pipeline_relevance_warn: + # Reject + update_article_status( + article_id, + "error", + actor="pipeline", + note=f"Abgelehnt: Score {score}/100 — {reason}", + ) + stats.rejected += 1 + # Reload for summary (now has relevance in meta) + updated = get_article_by_id(article_id) + if updated: + stats.rejected_articles.append(updated) + + elif score < settings.pipeline_relevance_auto: + # Warning zone: set status to "review" so repeated /run calls don't re-warn + update_article_status( + article_id, + "review", + actor="pipeline", + note=f"Niedrige Relevanz: Score {score}/100 — {reason}", + ) + stats.warnings += 1 + try: + tg.notify_relevance_warning(article, score, reason) + except Exception as exc: + logger.warning("Telegram warning für #%d fehlgeschlagen: %s", article_id, exc) + + else: + # Auto-process: rewrite + WP draft + try: + # Reserve publish slot FIRST so it's available when WP draft is created + slot = reserve_publish_slot(article_id) + + # Reload article to get updated image_review + scheduled_publish_at + fresh = get_article_by_id(article_id) + if not fresh: + return + wp_post_id, wp_post_url = _do_rewrite_and_draft(fresh) + stats.drafts_created += 1 + + # Reload for notification + final = get_article_by_id(article_id) + if final: + try: + tg.notify_new_draft(final, score=score, suggested_publish_at=slot) + except Exception as exc: + logger.warning("Telegram draft-Benachrichtigung für #%d fehlgeschlagen: %s", article_id, exc) + + except ValueError as exc: + # Quality gate rejection (too short etc.) — status already set in _do_rewrite_and_draft + # Release the reserved slot so it's available for the next article + from .scheduler import release_publish_slot + release_publish_slot(article_id) + # Clean up any stale WP draft from a previous pipeline run + stale = get_article_by_id(article_id) + if stale and stale.get("wp_post_id"): + try: + from .wordpress import delete_wp_post + delete_wp_post(int(stale["wp_post_id"])) + logger.info("Artikel #%d: veralteten WP-Draft #%s gelöscht", article_id, stale["wp_post_id"]) + except Exception as del_exc: + logger.warning("Artikel #%d: WP-Draft konnte nicht gelöscht werden: %s", article_id, del_exc) + stats.quality_gate_rejected += 1 + logger.info("Artikel #%d wegen Qualitätsprüfung abgelehnt: %s", article_id, exc) + # Individual Telegram notification for quality gate rejection + try: + title = (article.get("title") or "Ohne Titel")[:80] + tg.send_message( + f"✂️ Qualitätsprüfung nicht bestanden\n" + f"📰 {title}\n" + f"💯 Score: {score}/100\n" + f"⚠️ {exc}" + ) + except Exception as tg_exc: + logger.warning("Telegram QG-Benachrichtigung für #%d fehlgeschlagen: %s", article_id, tg_exc) + + except Exception as exc: + logger.error("Draft-Erstellung für #%d fehlgeschlagen: %s", article_id, exc) + update_article_status(article_id, "error", actor="pipeline", note=f"Draft-Fehler: {exc}") + # Release reserved slot so it's not permanently blocked by a failed article + from .scheduler import release_publish_slot + release_publish_slot(article_id) + raise + + +# --------------------------------------------------------------------------- +# Callback actions (called from telegram_bot._handle_callback) +# --------------------------------------------------------------------------- + +def rewrite_and_update_draft(article_id: int) -> None: + """Rewrite article and update the existing WP draft.""" + article = get_article_by_id(article_id) + if not article: + raise RuntimeError(f"Artikel #{article_id} nicht gefunden") + _auto_select_image(article) + fresh = get_article_by_id(article_id) + _do_rewrite_and_draft(fresh) + + +def discard_article(article_id: int) -> None: + """Discard a draft: delete WP post if exists, set article to error.""" + article = get_article_by_id(article_id) + if not article: + return + + wp_post_id = article.get("wp_post_id") + if wp_post_id: + try: + from .wordpress import delete_wp_post + delete_wp_post(int(wp_post_id)) + except Exception as exc: + logger.warning("WP Post #%d konnte nicht gelöscht werden: %s", wp_post_id, exc) + + update_article_status(article_id, "error", actor="telegram", note="Via Telegram verworfen") + + +def override_rejected_article(article_id: int) -> None: + """Force-process a previously rejected article.""" + from . import telegram_bot as tg + + article = get_article_by_id(article_id) + if not article: + raise RuntimeError(f"Artikel #{article_id} nicht gefunden") + + # Reset to new so processing is allowed + update_article_status(article_id, "new", actor="telegram", note="Manuell übernommen via Telegram") + + # Reload + fresh = get_article_by_id(article_id) + if not fresh: + return + + _auto_select_image(fresh) + fresh = get_article_by_id(article_id) + + # Get existing score or re-score + try: + meta = json.loads(fresh.get("meta_json") or "{}") + score = int((meta.get("relevance") or {}).get("score", 0)) + except Exception: + score = 0 + + # Reserve publish slot FIRST so it's in the DB when WP draft is created + slot = reserve_publish_slot(article_id) + fresh = get_article_by_id(article_id) + + wp_post_id, wp_post_url = _do_rewrite_and_draft(fresh) + + final = get_article_by_id(article_id) + if final: + tg.notify_new_draft(final, score=score, suggested_publish_at=slot) + + +# --------------------------------------------------------------------------- +# Status helpers (used by /status command) +# --------------------------------------------------------------------------- + +def get_recently_rejected(days: int = 3) -> list[dict[str, Any]]: + """Return articles rejected in the last N days.""" + from .db import get_conn + from .db import rows_to_dicts + cutoff = datetime.now(timezone.utc).isoformat()[:10] + with get_conn() as conn: + rows = conn.execute( + """ + SELECT id, title, meta_json, source_url, created_at + FROM articles + WHERE status IN ('error', 'review') + AND json_extract(meta_json, '$.relevance.score') IS NOT NULL + AND date(updated_at) >= date('now', ?) + ORDER BY updated_at DESC + LIMIT 20 + """, + (f"-{days} days",), + ).fetchall() + return rows_to_dicts(rows) + + +def get_pipeline_status_text() -> str: + """Return a text summary of current pipeline state.""" + from .repositories import list_articles as _list + new_count = len(_list(limit=500, status_filter="new")) + approved_count = len(_list(limit=500, status_filter="approved")) + published_count = len(_list(limit=500, status_filter="published")) + error_count = len(_list(limit=500, status_filter="error")) + + return ( + f"📊 Pipeline-Status\n" + f"🆕 Neu / wartend: {new_count}\n" + f"✅ Draft / freigegeben: {approved_count}\n" + f"📢 Veröffentlicht: {published_count}\n" + f"🚫 Fehler / abgelehnt: {error_count}" + ) diff --git a/backend/app/policy.py b/backend/app/policy.py new file mode 100644 index 0000000..af6e65c --- /dev/null +++ b/backend/app/policy.py @@ -0,0 +1,35 @@ +from __future__ import annotations + +from typing import Any + + +def evaluate_source_policy(source: dict[str, Any] | None) -> list[str]: + issues: list[str] = [] + if not source: + issues.append("Keine Quelle zugeordnet") + return issues + + risk_level = (source.get("risk_level") or "").strip().lower() + if risk_level != "green": + issues.append(f"Quelle nicht freigegeben (risk_level={risk_level or 'unset'})") + + terms_url = (source.get("terms_url") or "").strip() + if not terms_url: + issues.append("terms_url fehlt") + + license_name = (source.get("license_name") or "").strip() + if not license_name: + issues.append("license_name fehlt") + + last_reviewed_at = (source.get("last_reviewed_at") or "").strip() + if not last_reviewed_at: + issues.append("last_reviewed_at fehlt") + + if int(source.get("is_enabled", 0) or 0) != 1: + issues.append("Quelle ist deaktiviert") + + return issues + + +def is_source_allowed(source: dict[str, Any] | None) -> bool: + return len(evaluate_source_policy(source)) == 0 diff --git a/backend/app/publisher.py b/backend/app/publisher.py new file mode 100644 index 0000000..e27bd1b --- /dev/null +++ b/backend/app/publisher.py @@ -0,0 +1,101 @@ +from __future__ import annotations + +from dataclasses import dataclass + +from .repositories import ( + claim_next_publish_job, + complete_publish_job, + create_publish_job, + fail_publish_job, + get_article_by_id, + mark_article_publish_result, + PublishJobCreate, +) +from .wordpress import publish_article_draft, selected_image_exists + + +@dataclass(frozen=True) +class PublisherStats: + processed: int + success: int + failed: int + requeued: int + + +def enqueue_publish(article_id: int, max_attempts: int = 3) -> int: + return create_publish_job(PublishJobCreate(article_id=article_id, max_attempts=max_attempts)) + + +def _can_publish(article: dict) -> tuple[bool, str | None]: + if article.get("status") not in {"approved", "published"}: + return False, "Artikelstatus muss 'publish' sein" + if not selected_image_exists(article): + return False, "Hauptbild nicht gesetzt" + return True, None + + +def run_publisher(max_jobs: int = 10) -> PublisherStats: + processed = 0 + success = 0 + failed = 0 + requeued = 0 + + for _ in range(max(1, max_jobs)): + job = claim_next_publish_job() + if not job: + break + processed += 1 + job_id = int(job["id"]) + article_id = int(job["article_id"]) + + article = get_article_by_id(article_id) + if not article: + fail_publish_job(job_id, "Artikel nicht gefunden", requeue=False) + failed += 1 + continue + + allowed, reason = _can_publish(article) + if not allowed: + fail_publish_job(job_id, reason or "Publish-Bedingungen nicht erfüllt", requeue=False) + mark_article_publish_result( + article_id, + wp_post_id=article.get("wp_post_id"), + wp_post_url=article.get("wp_post_url"), + error=reason or "blocked", + increment_attempts=True, + set_published_status=False, + ) + failed += 1 + continue + + try: + wp_post_id, wp_post_url = publish_article_draft(article) + complete_publish_job(job_id, wp_post_id=wp_post_id, wp_post_url=wp_post_url) + mark_article_publish_result( + article_id, + wp_post_id=wp_post_id, + wp_post_url=wp_post_url, + error=None, + increment_attempts=True, + set_published_status=True, + ) + success += 1 + except Exception as exc: + attempts = int(job.get("attempts", 1)) + max_attempts = int(job.get("max_attempts", 3)) + should_requeue = attempts < max_attempts + fail_publish_job(job_id, str(exc), requeue=should_requeue) + mark_article_publish_result( + article_id, + wp_post_id=article.get("wp_post_id"), + wp_post_url=article.get("wp_post_url"), + error=str(exc), + increment_attempts=True, + set_published_status=False, + ) + if should_requeue: + requeued += 1 + else: + failed += 1 + + return PublisherStats(processed=processed, success=success, failed=failed, requeued=requeued) diff --git a/backend/app/relevance.py b/backend/app/relevance.py new file mode 100644 index 0000000..8f69693 --- /dev/null +++ b/backend/app/relevance.py @@ -0,0 +1,44 @@ +from __future__ import annotations + +from datetime import datetime, timezone + + +def _parse_iso_datetime(value: str | None) -> datetime | None: + if not value: + return None + raw = value.strip() + if not raw: + return None + if raw.endswith("Z"): + raw = raw[:-1] + "+00:00" + try: + parsed = datetime.fromisoformat(raw) + except ValueError: + return None + if parsed.tzinfo is None: + parsed = parsed.replace(tzinfo=timezone.utc) + return parsed + + +def article_age_days(published_at: str | None, now: datetime | None = None) -> int | None: + published = _parse_iso_datetime(published_at) + if not published: + return None + ref = now or datetime.now(timezone.utc) + delta = ref - published + if delta.total_seconds() < 0: + return 0 + return delta.days + + +def article_relevance(published_at: str | None, now: datetime | None = None) -> str: + days = article_age_days(published_at, now=now) + if days is None: + return "unbekannt" + if days <= 2: + return "hoch" + if days <= 7: + return "mittel" + if days <= 30: + return "niedrig" + return "alt" diff --git a/backend/app/repositories.py b/backend/app/repositories.py new file mode 100644 index 0000000..cf38055 --- /dev/null +++ b/backend/app/repositories.py @@ -0,0 +1,855 @@ +from __future__ import annotations + +from dataclasses import dataclass +import json +from datetime import datetime, timezone +from typing import Any + +from .db import get_conn, rows_to_dicts + + +@dataclass(frozen=True) +class SourceCreate: + name: str + base_url: str | None + terms_url: str | None + license_name: str | None + risk_level: str + is_enabled: bool + notes: str | None + last_reviewed_at: str | None + + +@dataclass(frozen=True) +class FeedCreate: + name: str + url: str + source_id: int | None + is_enabled: bool + + +@dataclass(frozen=True) +class SourceUpdate: + name: str + base_url: str | None + terms_url: str | None + license_name: str | None + risk_level: str + is_enabled: bool + notes: str | None + last_reviewed_at: str | None + + +@dataclass(frozen=True) +class FeedUpdate: + name: str + url: str + source_id: int | None + is_enabled: bool + + +@dataclass(frozen=True) +class RunCreate: + run_type: str + status: str + details: str | None = None + + +@dataclass(frozen=True) +class ArticleUpsert: + feed_id: int | None + source_article_id: str | None + source_hash: str | None + title: str + source_url: str + canonical_url: str | None + published_at: str | None + author: str | None + summary: str | None + content_raw: str | None + content_rewritten: str | None + image_urls_json: str | None + press_contact: str | None + source_name_snapshot: str | None + source_terms_url_snapshot: str | None + source_license_name_snapshot: str | None + legal_checked: bool + legal_checked_at: str | None + legal_note: str | None + wp_post_id: int | None + wp_post_url: str | None + publish_attempts: int + publish_last_error: str | None + published_to_wp_at: str | None + word_count: int + status: str + meta_json: str | None + + +@dataclass(frozen=True) +class PublishJobCreate: + article_id: int + max_attempts: int = 3 + + +def create_source(payload: SourceCreate) -> int: + with get_conn() as conn: + cur = conn.execute( + """ + INSERT INTO sources (name, base_url, terms_url, license_name, risk_level, is_enabled, notes, last_reviewed_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) + """, + ( + payload.name.strip(), + payload.base_url, + payload.terms_url, + payload.license_name, + payload.risk_level, + 1 if payload.is_enabled else 0, + payload.notes, + payload.last_reviewed_at, + ), + ) + return int(cur.lastrowid) + + +def list_sources() -> list[dict[str, Any]]: + with get_conn() as conn: + rows = conn.execute( + """ + SELECT id, name, base_url, terms_url, license_name, risk_level, is_enabled, notes, last_reviewed_at, created_at, updated_at + FROM sources + ORDER BY id DESC + """ + ).fetchall() + return rows_to_dicts(rows) + + +def get_source_by_id(source_id: int) -> dict[str, Any] | None: + with get_conn() as conn: + row = conn.execute( + """ + SELECT id, name, base_url, terms_url, license_name, risk_level, is_enabled, notes, last_reviewed_at, created_at, updated_at + FROM sources + WHERE id = ? + """, + (source_id,), + ).fetchone() + return dict(row) if row else None + + +def update_source(source_id: int, payload: SourceUpdate) -> bool: + with get_conn() as conn: + cur = conn.execute( + """ + UPDATE sources + SET name = ?, base_url = ?, terms_url = ?, license_name = ?, risk_level = ?, is_enabled = ?, notes = ?, last_reviewed_at = ? + WHERE id = ? + """, + ( + payload.name.strip(), + payload.base_url, + payload.terms_url, + payload.license_name, + payload.risk_level, + 1 if payload.is_enabled else 0, + payload.notes, + payload.last_reviewed_at, + source_id, + ), + ) + return cur.rowcount > 0 + + +def delete_source(source_id: int) -> bool: + with get_conn() as conn: + cur = conn.execute("DELETE FROM sources WHERE id = ?", (source_id,)) + return cur.rowcount > 0 + + +def create_feed(payload: FeedCreate) -> int: + with get_conn() as conn: + cur = conn.execute( + "INSERT INTO feeds (name, url, source_id, is_enabled) VALUES (?, ?, ?, ?)", + (payload.name.strip(), payload.url.strip(), payload.source_id, 1 if payload.is_enabled else 0), + ) + return int(cur.lastrowid) + + +def list_feeds() -> list[dict[str, Any]]: + with get_conn() as conn: + rows = conn.execute( + """ + SELECT f.id, f.name, f.url, f.source_id, f.is_enabled, f.etag, f.last_modified, f.last_checked_at, + f.created_at, f.updated_at, s.name AS source_name, s.license_name AS source_license_name, + s.terms_url AS source_terms_url, s.risk_level AS source_risk_level, s.base_url AS source_base_url, + s.last_reviewed_at AS source_last_reviewed_at, s.is_enabled AS source_is_enabled + FROM feeds f + LEFT JOIN sources s ON s.id = f.source_id + ORDER BY f.id DESC + """ + ).fetchall() + return rows_to_dicts(rows) + + +def list_enabled_feeds() -> list[dict[str, Any]]: + with get_conn() as conn: + rows = conn.execute( + """ + SELECT f.id, f.name, f.url, f.source_id, f.is_enabled, f.etag, f.last_modified, f.last_checked_at, + s.name AS source_name, s.license_name AS source_license_name, s.terms_url AS source_terms_url, + s.risk_level AS source_risk_level, s.base_url AS source_base_url, + s.last_reviewed_at AS source_last_reviewed_at, s.is_enabled AS source_is_enabled + FROM feeds f + LEFT JOIN sources s ON s.id = f.source_id + WHERE f.is_enabled = 1 + ORDER BY f.id ASC + """ + ).fetchall() + return rows_to_dicts(rows) + + +def get_feed_by_id(feed_id: int) -> dict[str, Any] | None: + with get_conn() as conn: + row = conn.execute( + """ + SELECT f.id, f.name, f.url, f.source_id, f.is_enabled, f.etag, f.last_modified, f.last_checked_at, + s.name AS source_name, s.license_name AS source_license_name, s.terms_url AS source_terms_url, + s.risk_level AS source_risk_level, s.base_url AS source_base_url, + s.last_reviewed_at AS source_last_reviewed_at, s.is_enabled AS source_is_enabled + FROM feeds f + LEFT JOIN sources s ON s.id = f.source_id + WHERE f.id = ? + """, + (feed_id,), + ).fetchone() + return dict(row) if row else None + + +def update_feed(feed_id: int, payload: FeedUpdate) -> bool: + with get_conn() as conn: + cur = conn.execute( + """ + UPDATE feeds + SET name = ?, url = ?, source_id = ?, is_enabled = ? + WHERE id = ? + """, + ( + payload.name.strip(), + payload.url.strip(), + payload.source_id, + 1 if payload.is_enabled else 0, + feed_id, + ), + ) + return cur.rowcount > 0 + + +def delete_feed(feed_id: int) -> bool: + with get_conn() as conn: + cur = conn.execute("DELETE FROM feeds WHERE id = ?", (feed_id,)) + return cur.rowcount > 0 + + +def update_feed_fetch_state(feed_id: int, etag: str | None, last_modified: str | None) -> None: + with get_conn() as conn: + conn.execute( + """ + UPDATE feeds + SET etag = ?, last_modified = ?, last_checked_at = datetime('now') + WHERE id = ? + """, + (etag, last_modified, feed_id), + ) + + +def create_run(payload: RunCreate) -> int: + with get_conn() as conn: + cur = conn.execute( + "INSERT INTO runs (run_type, status, details) VALUES (?, ?, ?)", + (payload.run_type, payload.status, payload.details), + ) + return int(cur.lastrowid) + + +def finish_run(run_id: int, status: str, details: str | None = None) -> None: + with get_conn() as conn: + conn.execute( + """ + UPDATE runs + SET status = ?, details = ?, finished_at = datetime('now') + WHERE id = ? + """, + (status, details, run_id), + ) + + +def list_runs(limit: int = 50) -> list[dict[str, Any]]: + safe_limit = max(1, min(limit, 500)) + with get_conn() as conn: + rows = conn.execute( + """ + SELECT id, run_type, status, started_at, finished_at, details + FROM runs + ORDER BY id DESC + LIMIT ? + """, + (safe_limit,), + ).fetchall() + return rows_to_dicts(rows) + + +def get_run_by_id(run_id: int) -> dict[str, Any] | None: + with get_conn() as conn: + row = conn.execute( + """ + SELECT id, run_type, status, started_at, finished_at, details + FROM runs + WHERE id = ? + """, + (run_id,), + ).fetchone() + return dict(row) if row else None + + +def get_article_by_id(article_id: int) -> dict[str, Any] | None: + with get_conn() as conn: + row = conn.execute( + """ + SELECT a.id, a.feed_id, a.source_article_id, a.source_hash, a.title, a.source_url, a.canonical_url, a.published_at, a.author, + a.summary, a.content_raw, a.content_rewritten, a.image_urls_json, a.press_contact, + a.source_name_snapshot, a.source_terms_url_snapshot, a.source_license_name_snapshot, + a.legal_checked, a.legal_checked_at, a.legal_note, + a.wp_post_id, a.wp_post_url, a.publish_attempts, a.publish_last_error, a.published_to_wp_at, + a.word_count, a.status, a.meta_json, a.created_at, a.updated_at, + a.scheduled_publish_at + FROM articles a + WHERE a.id = ? + """, + (article_id,), + ).fetchone() + return dict(row) if row else None + + +def _merge_review_event(meta_json: str | None, event: dict[str, Any]) -> str: + meta: dict[str, Any] = {} + if meta_json: + try: + meta = json.loads(meta_json) + if not isinstance(meta, dict): + meta = {} + except Exception: + meta = {} + + events = meta.get("review_events") + if not isinstance(events, list): + events = [] + events.append(event) + meta["review_events"] = events + return json.dumps(meta, ensure_ascii=False) + + +def _load_meta(meta_json: str | None) -> dict[str, Any]: + if not meta_json: + return {} + try: + parsed = json.loads(meta_json) + return parsed if isinstance(parsed, dict) else {} + except Exception: + return {} + + +def update_article_status( + article_id: int, + new_status: str, + *, + actor: str | None = None, + note: str | None = None, + decision: str | None = None, +) -> bool: + article = get_article_by_id(article_id) + if not article: + return False + + event = { + "timestamp": datetime.now(timezone.utc).isoformat(), + "from_status": article.get("status"), + "to_status": new_status, + "actor": actor or "system", + "note": note, + "decision": decision, + } + merged_meta = _merge_review_event(article.get("meta_json"), event) + + with get_conn() as conn: + conn.execute( + "UPDATE articles SET status = ?, meta_json = ? WHERE id = ?", + (new_status, merged_meta, article_id), + ) + return True + + +def set_article_legal_review(article_id: int, approved: bool, note: str | None, actor: str | None = None) -> bool: + article = get_article_by_id(article_id) + if not article: + return False + + event = { + "timestamp": datetime.now(timezone.utc).isoformat(), + "event": "legal_review", + "approved": approved, + "actor": actor or "system", + "note": note, + } + merged_meta = _merge_review_event(article.get("meta_json"), event) + with get_conn() as conn: + conn.execute( + """ + UPDATE articles + SET legal_checked = ?, legal_checked_at = datetime('now'), legal_note = ?, meta_json = ? + WHERE id = ? + """, + (1 if approved else 0, note, merged_meta, article_id), + ) + return True + + +def set_article_image_decision(article_id: int, image_url: str, action: str, actor: str | None = None) -> bool: + article = get_article_by_id(article_id) + if not article: + return False + url = (image_url or "").strip() + if not url: + return False + if action not in {"select", "exclude", "restore"}: + return False + + meta = _load_meta(article.get("meta_json")) + image_review = meta.get("image_review") + if not isinstance(image_review, dict): + image_review = {} + + excluded = image_review.get("excluded_urls") + if not isinstance(excluded, list): + excluded = [] + excluded_set = {str(item) for item in excluded if item} + + selected_url = image_review.get("selected_url") + if not isinstance(selected_url, str): + selected_url = None + + if action == "select": + selected_url = url + excluded_set.discard(url) + elif action == "exclude": + excluded_set.add(url) + if selected_url == url: + selected_url = None + elif action == "restore": + excluded_set.discard(url) + + image_review["selected_url"] = selected_url + image_review["excluded_urls"] = sorted(excluded_set) + image_review["updated_at"] = datetime.now(timezone.utc).isoformat() + image_review["updated_by"] = actor or "system" + meta["image_review"] = image_review + + with get_conn() as conn: + conn.execute( + "UPDATE articles SET meta_json = ? WHERE id = ?", + (json.dumps(meta, ensure_ascii=False), article_id), + ) + return True + + +def create_publish_job(payload: PublishJobCreate) -> int: + with get_conn() as conn: + existing = conn.execute( + """ + SELECT id FROM publish_jobs + WHERE article_id = ? AND status IN ('queued', 'running') + ORDER BY id DESC + LIMIT 1 + """, + (payload.article_id,), + ).fetchone() + if existing: + return int(existing["id"]) + + cur = conn.execute( + """ + INSERT INTO publish_jobs (article_id, status, attempts, max_attempts) + VALUES (?, 'queued', 0, ?) + """, + (payload.article_id, max(1, payload.max_attempts)), + ) + return int(cur.lastrowid) + + +def list_publish_jobs(limit: int = 100) -> list[dict[str, Any]]: + safe_limit = max(1, min(limit, 500)) + with get_conn() as conn: + rows = conn.execute( + """ + SELECT j.id, j.article_id, j.status, j.attempts, j.max_attempts, j.error_message, j.wp_post_id, j.wp_post_url, + j.created_at, j.started_at, j.finished_at, a.title AS article_title + FROM publish_jobs j + LEFT JOIN articles a ON a.id = j.article_id + ORDER BY j.id DESC + LIMIT ? + """, + (safe_limit,), + ).fetchall() + return rows_to_dicts(rows) + + +def claim_next_publish_job() -> dict[str, Any] | None: + with get_conn() as conn: + row = conn.execute( + """ + SELECT id, article_id, status, attempts, max_attempts, error_message, wp_post_id, wp_post_url + FROM publish_jobs + WHERE status = 'queued' AND attempts < max_attempts + ORDER BY id ASC + LIMIT 1 + """ + ).fetchone() + if not row: + return None + job_id = int(row["id"]) + conn.execute( + """ + UPDATE publish_jobs + SET status = 'running', + attempts = attempts + 1, + started_at = datetime('now'), + finished_at = NULL + WHERE id = ? + """, + (job_id,), + ) + claimed = conn.execute( + """ + SELECT id, article_id, status, attempts, max_attempts, error_message, wp_post_id, wp_post_url + FROM publish_jobs + WHERE id = ? + """, + (job_id,), + ).fetchone() + return dict(claimed) if claimed else None + + +def complete_publish_job(job_id: int, wp_post_id: int | None, wp_post_url: str | None) -> None: + with get_conn() as conn: + conn.execute( + """ + UPDATE publish_jobs + SET status = 'success', + wp_post_id = ?, + wp_post_url = ?, + error_message = NULL, + finished_at = datetime('now') + WHERE id = ? + """, + (wp_post_id, wp_post_url, job_id), + ) + + +def fail_publish_job(job_id: int, error_message: str, requeue: bool) -> None: + next_status = "queued" if requeue else "failed" + with get_conn() as conn: + conn.execute( + """ + UPDATE publish_jobs + SET status = ?, + error_message = ?, + finished_at = datetime('now') + WHERE id = ? + """, + (next_status, error_message[:2000], job_id), + ) + + +def mark_article_publish_result( + article_id: int, + *, + wp_post_id: int | None, + wp_post_url: str | None, + error: str | None, + increment_attempts: bool, + set_published_status: bool, +) -> None: + with get_conn() as conn: + conn.execute( + """ + UPDATE articles + SET wp_post_id = ?, + wp_post_url = ?, + publish_attempts = CASE WHEN ? THEN publish_attempts + 1 ELSE publish_attempts END, + publish_last_error = ?, + published_to_wp_at = CASE WHEN ? IS NOT NULL THEN datetime('now') ELSE published_to_wp_at END, + status = CASE WHEN ? THEN 'published' ELSE status END + WHERE id = ? + """, + ( + wp_post_id, + wp_post_url, + 1 if increment_attempts else 0, + error[:2000] if error else None, + wp_post_id, + 1 if set_published_status else 0, + article_id, + ), + ) + + +def _resolve_existing_article_id(payload: ArticleUpsert) -> int | None: + with get_conn() as conn: + # 1) strongest key: source_url + row = conn.execute( + "SELECT id FROM articles WHERE source_url = ?", + (payload.source_url.strip(),), + ).fetchone() + if row: + return int(row["id"]) + + # 2) stable feed+guid combo + if payload.feed_id is not None and payload.source_article_id: + row = conn.execute( + "SELECT id FROM articles WHERE feed_id = ? AND source_article_id = ?", + (payload.feed_id, payload.source_article_id), + ).fetchone() + if row: + return int(row["id"]) + + # 3) content hash fallback + if payload.source_hash: + row = conn.execute( + "SELECT id FROM articles WHERE source_hash = ?", + (payload.source_hash,), + ).fetchone() + if row: + return int(row["id"]) + + return None + + +def find_existing_article_for_upsert(payload: ArticleUpsert) -> dict[str, Any] | None: + article_id = _resolve_existing_article_id(payload) + if article_id is None: + return None + return get_article_by_id(article_id) + + +def upsert_article(payload: ArticleUpsert) -> int: + existing_id = _resolve_existing_article_id(payload) + with get_conn() as conn: + if existing_id is None: + conn.execute( + """ + INSERT INTO articles ( + feed_id, source_article_id, source_hash, title, source_url, canonical_url, published_at, author, + summary, content_raw, content_rewritten, image_urls_json, press_contact, + source_name_snapshot, source_terms_url_snapshot, source_license_name_snapshot, + legal_checked, legal_checked_at, legal_note, + wp_post_id, wp_post_url, publish_attempts, publish_last_error, published_to_wp_at, + word_count, status, meta_json + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + """, + ( + payload.feed_id, + payload.source_article_id, + payload.source_hash, + payload.title.strip(), + payload.source_url.strip(), + payload.canonical_url, + payload.published_at, + payload.author, + payload.summary, + payload.content_raw, + payload.content_rewritten, + payload.image_urls_json, + payload.press_contact, + payload.source_name_snapshot, + payload.source_terms_url_snapshot, + payload.source_license_name_snapshot, + 1 if payload.legal_checked else 0, + payload.legal_checked_at, + payload.legal_note, + payload.wp_post_id, + payload.wp_post_url, + payload.publish_attempts, + payload.publish_last_error, + payload.published_to_wp_at, + payload.word_count, + payload.status, + payload.meta_json, + ), + ) + else: + conn.execute( + """ + UPDATE articles + SET + feed_id = ?, + source_article_id = ?, + source_hash = ?, + title = ?, + source_url = ?, + canonical_url = ?, + published_at = ?, + author = ?, + summary = ?, + content_raw = ?, + content_rewritten = ?, + image_urls_json = ?, + press_contact = ?, + source_name_snapshot = ?, + source_terms_url_snapshot = ?, + source_license_name_snapshot = ?, + legal_checked = ?, + legal_checked_at = ?, + legal_note = ?, + wp_post_id = ?, + wp_post_url = ?, + publish_attempts = ?, + publish_last_error = ?, + published_to_wp_at = ?, + word_count = ?, + status = ?, + meta_json = ? + WHERE id = ? + """, + ( + payload.feed_id, + payload.source_article_id, + payload.source_hash, + payload.title.strip(), + payload.source_url.strip(), + payload.canonical_url, + payload.published_at, + payload.author, + payload.summary, + payload.content_raw, + payload.content_rewritten, + payload.image_urls_json, + payload.press_contact, + payload.source_name_snapshot, + payload.source_terms_url_snapshot, + payload.source_license_name_snapshot, + 1 if payload.legal_checked else 0, + payload.legal_checked_at, + payload.legal_note, + payload.wp_post_id, + payload.wp_post_url, + payload.publish_attempts, + payload.publish_last_error, + payload.published_to_wp_at, + payload.word_count, + payload.status, + payload.meta_json, + existing_id, + ), + ) + row = conn.execute("SELECT id FROM articles WHERE source_url = ?", (payload.source_url.strip(),)).fetchone() + if row: + return int(row["id"]) + return int(existing_id) if existing_id else 0 + + +def list_articles_page( + limit: int = 50, + offset: int = 0, + status_filter: str | None = None, + search: str | None = None, +) -> tuple[list[dict[str, Any]], int]: + """Return (articles, total_count) with optional status filter and title search.""" + safe_limit = max(1, min(limit, 200)) + safe_offset = max(0, offset) + + conditions: list[str] = [] + params: list[Any] = [] + if status_filter: + conditions.append("a.status = ?") + params.append(status_filter) + if search: + conditions.append("(a.title LIKE ? OR a.id = ?)") + try: + params.extend([f"%{search}%", int(search)]) + except ValueError: + params.extend([f"%{search}%", -1]) + + where = f"WHERE {' AND '.join(conditions)}" if conditions else "" + select = """ + SELECT a.id, a.title, a.status, a.published_at, a.summary, a.content_raw, + a.meta_json, a.wp_post_id, a.wp_post_url, a.scheduled_publish_at, + a.word_count, f.name AS feed_name + FROM articles a + LEFT JOIN feeds f ON f.id = a.feed_id + """ + with get_conn() as conn: + total = conn.execute( + f"SELECT COUNT(*) FROM articles a {where}", params + ).fetchone()[0] + rows = conn.execute( + f"{select} {where} ORDER BY a.id DESC LIMIT ? OFFSET ?", + params + [safe_limit, safe_offset], + ).fetchall() + return rows_to_dicts(rows), total + + +def bulk_update_wp_post_ids(updates: list[tuple[int, int | None]]) -> int: + """Update wp_post_id (and clear stale wp_post_url) for multiple articles. + + Returns the number of rows actually updated. + Call sync_db_from_wordpress() afterwards to repopulate wp_post_url and + scheduled_publish_at from the live WordPress data. + """ + if not updates: + return 0 + updated = 0 + with get_conn() as conn: + for article_id, new_wp_id in updates: + conn.execute( + "UPDATE articles SET wp_post_id = ?, wp_post_url = NULL WHERE id = ?", + (new_wp_id, article_id), + ) + updated += 1 + return updated + + +def list_articles(limit: int = 100, status_filter: str | None = None) -> list[dict[str, Any]]: + safe_limit = max(1, min(limit, 500)) + with get_conn() as conn: + if status_filter: + rows = conn.execute( + """ + SELECT a.id, a.feed_id, a.source_article_id, a.source_hash, a.title, a.source_url, a.canonical_url, a.published_at, a.author, + a.summary, a.content_raw, a.word_count, a.status, a.meta_json, a.created_at, a.updated_at, f.name AS feed_name, + a.image_urls_json, a.press_contact, a.source_name_snapshot, a.source_terms_url_snapshot, + a.source_license_name_snapshot, a.legal_checked, a.legal_checked_at, a.legal_note, + a.wp_post_id, a.wp_post_url, a.publish_attempts, a.publish_last_error, a.published_to_wp_at + FROM articles a + LEFT JOIN feeds f ON f.id = a.feed_id + WHERE a.status = ? + ORDER BY a.id DESC + LIMIT ? + """, + (status_filter, safe_limit), + ).fetchall() + else: + rows = conn.execute( + """ + SELECT a.id, a.feed_id, a.source_article_id, a.source_hash, a.title, a.source_url, a.canonical_url, a.published_at, a.author, + a.summary, a.content_raw, a.word_count, a.status, a.meta_json, a.created_at, a.updated_at, f.name AS feed_name, + a.image_urls_json, a.press_contact, a.source_name_snapshot, a.source_terms_url_snapshot, + a.source_license_name_snapshot, a.legal_checked, a.legal_checked_at, a.legal_note, + a.wp_post_id, a.wp_post_url, a.publish_attempts, a.publish_last_error, a.published_to_wp_at + FROM articles a + LEFT JOIN feeds f ON f.id = a.feed_id + ORDER BY a.id DESC + LIMIT ? + """, + (safe_limit,), + ).fetchall() + return rows_to_dicts(rows) diff --git a/backend/app/rewrite.py b/backend/app/rewrite.py new file mode 100644 index 0000000..05937e5 --- /dev/null +++ b/backend/app/rewrite.py @@ -0,0 +1,204 @@ +from __future__ import annotations + +import json +import re +from typing import Any +from urllib.request import Request, urlopen + +from .config import get_settings + + +def _sanitize_source_text(text: str) -> str: + raw = (text or "").strip() + if not raw: + return "" + + lines = [ln.strip() for ln in raw.splitlines() if ln.strip()] + if len(lines) > 3: + lines = lines[3:] + + joined = "\n".join(lines) + # Remove press contact block at end from "Pressekontakt" onward. + joined = re.sub( + r"\n?\s*Pressekontakt[\s\S]*$", + "", + joined, + flags=re.IGNORECASE, + ).strip() + return joined + + +def _normalize_tags(tags: list[str], max_tags: int = 8) -> list[str]: + out: list[str] = [] + seen: set[str] = set() + for raw in tags: + value = re.sub(r"\s+", " ", str(raw or "").strip()) + value = re.sub(r"^[#\-•\s]+", "", value) + value = re.sub(r"[;,.:\s]+$", "", value) + if not value: + continue + if len(value) < 2 or len(value) > 40: + continue + key = value.casefold() + if key in seen: + continue + seen.add(key) + out.append(value) + if len(out) >= max_tags: + break + return out + + +def _openai_chat(system: str, user: str, temperature: float = 0.4) -> str: + settings = get_settings() + api_key = settings.openai_api_key + if not api_key: + raise RuntimeError("OPENAI_API_KEY fehlt") + + payload = { + "model": settings.openai_model, + "temperature": temperature, + "messages": [ + {"role": "system", "content": system}, + {"role": "user", "content": user}, + ], + } + req = Request( + url="https://api.openai.com/v1/chat/completions", + method="POST", + data=json.dumps(payload).encode("utf-8"), + headers={ + "Authorization": f"Bearer {api_key}", + "Content-Type": "application/json", + "Accept": "application/json", + }, + ) + with urlopen(req, timeout=60) as resp: + raw = resp.read().decode("utf-8", errors="replace") + data = json.loads(raw) + choices = data.get("choices") + if not isinstance(choices, list) or not choices: + raise RuntimeError(f"Ungültige OpenAI-Antwort: {data}") + message = choices[0].get("message", {}) + content = message.get("content") + if not isinstance(content, str) or not content.strip(): + raise RuntimeError("OpenAI lieferte keinen Inhalt") + return content.strip() + + +def rewrite_article_text(article: dict[str, Any]) -> str: + source_text = _sanitize_source_text(article.get("content_raw") or "") + if not source_text: + source_text = (article.get("summary") or "").strip() + if not source_text: + raise RuntimeError("Kein Quelltext für Rewrite verfügbar") + + title = (article.get("title") or "").strip() + source_name = (article.get("source_name_snapshot") or article.get("author") or "die Quelle").strip() + prompt = ( + "Schreibe den folgenden News-Text neu auf Deutsch in persönlicher Du-Form. " + "Stil: ausführlich, gut lesbar, ohne Einleitung mit Datum/Uhrzeit/Firma/Ort, " + "ohne Pressekontakt, ohne Quellenblock. " + "Nutze klare Absätze und Zwischenüberschriften in HTML (

,

,

  • falls passend). " + "Inhaltlich korrekt bleiben, nichts erfinden. " + f"Wichtig: Der Artikel wurde von '{source_name}' veröffentlicht. " + "Verwende NIEMALS 'wir' oder 'ich' aus Sicht der Quelle – beziehe Aussagen stets auf die Quelle, " + f"z.B. 'laut {source_name}', '{source_name} hat ermittelt', 'die Auswertung zeigt'.\n\n" + f"Titel: {title}\n\n" + f"Originaltext:\n{source_text}" + ) + return _openai_chat( + "Du bist ein deutscher News-Redakteur.", + prompt, + temperature=0.4, + ) + + +def generate_article_tags(article: dict[str, Any], rewritten_text: str | None = None, max_tags: int = 8) -> list[str]: + source_text = rewritten_text or _sanitize_source_text(article.get("content_raw") or "") or (article.get("summary") or "") + source_text = str(source_text).strip() + if not source_text: + return [] + title = (article.get("title") or "").strip() + prompt = ( + "Erzeuge präzise Schlagwörter für einen deutschen News-Artikel. " + f"Maximal {max_tags} Tags. Nur relevante Begriffe, keine allgemeinen Wörter wie News/Artikel. " + "Gib ausschließlich ein JSON-Array mit Strings zurück, ohne Erklärung.\n\n" + f"Titel: {title}\n\n" + f"Text:\n{source_text[:3500]}" + ) + raw = _openai_chat( + "Du extrahierst präzise, kurze News-Tags auf Deutsch.", + prompt, + temperature=0.2, + ) + try: + parsed = json.loads(raw) + if isinstance(parsed, list): + return _normalize_tags([str(x) for x in parsed], max_tags=max_tags) + except Exception: + pass + # fallback: extract first JSON-like array if model wrapped output + match = re.search(r"\[[\s\S]*\]", raw) + if match: + try: + parsed = json.loads(match.group(0)) + if isinstance(parsed, list): + return _normalize_tags([str(x) for x in parsed], max_tags=max_tags) + except Exception: + return [] + return [] + + +def score_article_relevance(article: dict[Any, Any]) -> dict[str, Any]: + """Score article relevance for VanLife/Camping/Outdoor blog (0-100). + + Returns {"score": int, "reason": str, "topics": list[str]}. + Raises RuntimeError on OpenAI failure. + """ + title = (article.get("title") or "").strip() + text = _sanitize_source_text(article.get("content_raw") or "") + if not text: + text = (article.get("summary") or "").strip() + + prompt = ( + "Bewerte die Relevanz des folgenden Artikels für einen deutschen VanLife-, Camping- und Outdoor-Blog. " + "Relevante Themen: Campingplätze, Stellplätze, Wohnmobil, Camper, Van, Roadtrip, " + "Outdoor-Ausrüstung, Wandern, Naturreisen, Reise-Tipps für Campende. " + "Nicht relevant: allgemeine Nachrichten, Politik, Wirtschaft, Sport (außer Outdoor), Unterhaltung.\n\n" + "Antworte NUR mit einem JSON-Objekt:\n" + '{"score": <0-100>, "reason": "", "topics": ["", ""]}\n\n' + f"Titel: {title}\n\n" + f"Text (Auszug):\n{text[:2000]}" + ) + raw = _openai_chat( + "Du bist ein Redakteur für einen VanLife- und Camping-Blog und bewertest Artikelrelevanz.", + prompt, + temperature=0.1, + ) + try: + match = re.search(r"\{[\s\S]*\}", raw) + if match: + parsed = json.loads(match.group(0)) + score = max(0, min(100, int(parsed.get("score", 0)))) + return { + "score": score, + "reason": str(parsed.get("reason", "")), + "topics": [str(t) for t in (parsed.get("topics") or [])], + } + except Exception: + pass + return {"score": 0, "reason": "Parsing-Fehler bei Relevanz-Score", "topics": []} + + +def merge_generated_tags(meta_json: str | None, tags: list[str]) -> str: + meta: dict[str, Any] = {} + if meta_json: + try: + parsed = json.loads(meta_json) + if isinstance(parsed, dict): + meta = parsed + except Exception: + meta = {} + meta["generated_tags"] = _normalize_tags(tags) + return json.dumps(meta, ensure_ascii=False) diff --git a/backend/app/scheduler.py b/backend/app/scheduler.py new file mode 100644 index 0000000..d5ea5bf --- /dev/null +++ b/backend/app/scheduler.py @@ -0,0 +1,336 @@ +"""Smart publishing scheduler. + +Calculates suggested publish slots for new WordPress drafts. +Rules: +- Maximum N drafts per day (configurable, default 2) +- Preferred slots: configurable hours (default 09:00 and 14:00 CET) +- New articles queue up after the last already-scheduled article +- Checks both local DB AND WordPress future posts to avoid double-booking +""" +from __future__ import annotations + +import base64 +import json +import threading +import urllib.request +from datetime import date, datetime, timedelta, timezone +from typing import Any + +from .config import get_settings +from .db import get_conn + +# Ensures that concurrent pipeline runs (two threads) never assign the same slot. +_slot_lock = threading.Lock() + + +# CET offset (UTC+1 winter / UTC+2 summer – fixed +1 for simplicity) +_CET_OFFSET = timedelta(hours=1) + + +def _today_cet() -> date: + return (datetime.now(timezone.utc) + _CET_OFFSET).date() + + +def _preferred_hours() -> list[int]: + settings = get_settings() + try: + return [int(h.strip()) for h in settings.pipeline_publish_hours.split(",") if h.strip()] + except Exception: + return [9, 14] + + +def _fetch_wp_occupied_slots() -> set[tuple[str, int]]: + """Fetch all future-scheduled WordPress posts and return occupied (date_iso, hour) pairs. + + This prevents the scheduler from assigning a slot that is already taken + by a WP post that was not created via this pipeline (e.g. manually or via recovery scripts). + Returns an empty set on any error so the scheduler degrades gracefully. + """ + settings = get_settings() + try: + auth = base64.b64encode( + f"{settings.wordpress_username}:{settings.wordpress_app_password}".encode() + ).decode() + url = ( + f"{settings.wordpress_base_url}/wp-json/wp/v2/posts" + f"?status=future&per_page=100&orderby=date&order=asc&_fields=id,date" + ) + req = urllib.request.Request(url, headers={"Authorization": f"Basic {auth}"}) + with urllib.request.urlopen(req, timeout=10) as resp: + posts = json.loads(resp.read()) + occupied: set[tuple[str, int]] = set() + for p in posts: + try: + dt = datetime.fromisoformat(p["date"]) + occupied.add((dt.date().isoformat(), dt.hour)) + except Exception: + pass + return occupied + except Exception: + return set() + + +def _get_last_future_scheduled_date(wp_occupied: set[tuple[str, int]]) -> date | None: + """Return the date of the latest already-scheduled slot (DB + WP).""" + today = _today_cet() + + # Latest from local DB + with get_conn() as conn: + row = conn.execute( + """ + SELECT MAX(scheduled_publish_at) AS last_slot + FROM articles + WHERE scheduled_publish_at IS NOT NULL + AND scheduled_publish_at >= ? + AND status NOT IN ('error', 'no_image') + """, + (today.isoformat() + "T00:00:00",), + ).fetchone() + db_last: date | None = None + if row and row["last_slot"]: + try: + db_last = datetime.fromisoformat(row["last_slot"]).date() + except Exception: + pass + + # Latest from WP + wp_last: date | None = None + for d_str, _ in wp_occupied: + try: + d = date.fromisoformat(d_str) + if d >= today and (wp_last is None or d > wp_last): + wp_last = d + except Exception: + pass + + if db_last and wp_last: + return max(db_last, wp_last) + return db_last or wp_last + + +def _next_free_hour(target_date: date, wp_occupied: set[tuple[str, int]]) -> int | None: + """Return first preferred hour not yet used on target_date (DB + WP), or None if day is full.""" + hours = _preferred_hours() + date_str = target_date.isoformat() + + # Hours used in local DB + with get_conn() as conn: + rows = conn.execute( + """ + SELECT scheduled_publish_at FROM articles + WHERE scheduled_publish_at >= ? AND scheduled_publish_at < ? + AND status NOT IN ('error', 'no_image') + """, + (date_str + "T00:00:00", date_str + "T23:59:59"), + ).fetchall() + + used_hours: set[int] = set() + for row in rows: + ts = row["scheduled_publish_at"] or "" + try: + used_hours.add(datetime.fromisoformat(ts).hour) + except Exception: + pass + + # Hours used in WordPress + for d_str, h in wp_occupied: + if d_str == date_str: + used_hours.add(h) + + for h in hours: + if h not in used_hours: + return h + return None + + +def _format_slot(d: date, hour: int) -> str: + weekday_names = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] + wd = weekday_names[d.weekday()] + return f"{wd}, {d.strftime('%d.%m.%Y')} um {hour:02d}:00 Uhr" + + +def _find_next_free_slot( + wp_occupied: set[tuple[str, int]], lookahead_days: int = 60 +) -> tuple[date, int] | None: + """Find the next free (date, hour) slot. + + Starts from tomorrow and scans forward, filling any gaps in the schedule + rather than always appending after the last existing post. + """ + today = _today_cet() + tomorrow = today + timedelta(days=1) + + for offset in range(0, lookahead_days + 1): + candidate = tomorrow + timedelta(days=offset) + hour = _next_free_hour(candidate, wp_occupied) + if hour is not None: + return candidate, hour + + return tomorrow, _preferred_hours()[0] if _preferred_hours() else 9 + + +def get_schedule_overview(lookahead_days: int = 60) -> list[dict]: + """Return all booked scheduling slots (DB + WP) for the next N days, sorted by date.""" + today = _today_cet() + hours = _preferred_hours() + + # Slots booked in local DB + with get_conn() as conn: + rows = conn.execute( + """ + SELECT id, title, status, wp_post_id, wp_post_url, scheduled_publish_at + FROM articles + WHERE scheduled_publish_at IS NOT NULL + AND scheduled_publish_at >= ? + AND status NOT IN ('error', 'no_image') + ORDER BY scheduled_publish_at + """, + (today.isoformat() + "T00:00:00",), + ).fetchall() + + db_slots: dict[tuple[str, int], dict] = {} + for row in rows: + try: + dt = datetime.fromisoformat(row["scheduled_publish_at"]) + key = (dt.date().isoformat(), dt.hour) + db_slots[key] = { + "date": dt.date().isoformat(), + "hour": dt.hour, + "formatted": _format_slot(dt.date(), dt.hour), + "source": "db", + "article_id": row["id"], + "article_title": row["title"], + "article_status": row["status"], + "wp_post_id": row["wp_post_id"], + "wp_post_url": row["wp_post_url"], + } + except Exception: + pass + + # Slots occupied in WordPress but not in local DB + wp_occupied = _fetch_wp_occupied_slots() + wp_only: list[dict] = [] + for d_str, h in sorted(wp_occupied): + if (d_str, h) in db_slots: + continue + try: + d = date.fromisoformat(d_str) + if d >= today: + wp_only.append({ + "date": d_str, + "hour": h, + "formatted": _format_slot(d, h), + "source": "wordpress", + "article_id": None, + "article_title": "(WP-Beitrag außerhalb Pipeline)", + "article_status": None, + "wp_post_id": None, + "wp_post_url": None, + }) + except Exception: + pass + + all_slots = list(db_slots.values()) + wp_only + all_slots.sort(key=lambda s: (s["date"], s["hour"])) + return all_slots + + +def release_publish_slot(article_id: int) -> None: + """Clear a previously reserved slot (e.g. when article is rejected after slot assignment).""" + with get_conn() as conn: + conn.execute( + "UPDATE articles SET scheduled_publish_at = NULL WHERE id = ?", + (article_id,), + ) + + +def suggest_publish_slot() -> str: + """Return a suggested publish datetime string (CET) for the next free slot.""" + wp_occupied = _fetch_wp_occupied_slots() + result = _find_next_free_slot(wp_occupied) + if result: + d, hour = result + return _format_slot(d, hour) + tomorrow = _today_cet() + timedelta(days=1) + return _format_slot(tomorrow, _preferred_hours()[0] if _preferred_hours() else 9) + + +def reserve_publish_slot(article_id: int) -> str: + """Reserve a publish slot for an article and persist it in the DB. + + If the article already has a scheduled_publish_at, keep it unchanged. + Returns the formatted publish datetime string. + + Uses a module-level lock so that concurrent pipeline runs (two threads) + cannot read the same "free" slot and assign it twice. + """ + # Fetch WP-occupied slots BEFORE acquiring the lock — the API call can be slow + # and must not block other threads unnecessarily. + wp_occupied = _fetch_wp_occupied_slots() + + with _slot_lock: + # Single DB connection for the entire read-find-write cycle so the + # slot we pick is still free when we write it. + with get_conn() as conn: + row = conn.execute( + "SELECT scheduled_publish_at FROM articles WHERE id = ?", + (article_id,), + ).fetchone() + existing_slot = row["scheduled_publish_at"] if row else None + if existing_slot: + try: + dt = datetime.fromisoformat(existing_slot) + return _format_slot(dt.date(), dt.hour) + except Exception: + pass # invalid — fall through and assign a fresh slot + + # Find the next free (date, hour) slot using THIS connection so we + # see all slots written during this lock window. + hours = _preferred_hours() + today = _today_cet() + tomorrow = today + timedelta(days=1) + candidate: date | None = None + chosen_hour: int | None = None + + for offset in range(0, 61): + d = tomorrow + timedelta(days=offset) + date_str = d.isoformat() + + rows = conn.execute( + """ + SELECT scheduled_publish_at FROM articles + WHERE scheduled_publish_at >= ? AND scheduled_publish_at < ? + AND status NOT IN ('error', 'no_image') + """, + (date_str + "T00:00:00", date_str + "T23:59:59"), + ).fetchall() + + used_hours: set[int] = set() + for r in rows: + ts = r["scheduled_publish_at"] or "" + try: + used_hours.add(datetime.fromisoformat(ts).hour) + except Exception: + pass + for d_str, h in wp_occupied: + if d_str == date_str: + used_hours.add(h) + + for h in hours: + if h not in used_hours: + candidate = d + chosen_hour = h + break + if candidate is not None: + break + + if candidate is None: + candidate = tomorrow + chosen_hour = hours[0] if hours else 9 + + iso_ts = f"{candidate.isoformat()}T{chosen_hour:02d}:00:00" + conn.execute( + "UPDATE articles SET scheduled_publish_at = ? WHERE id = ?", + (iso_ts, article_id), + ) + return _format_slot(candidate, chosen_hour) diff --git a/backend/app/source_extraction.py b/backend/app/source_extraction.py new file mode 100644 index 0000000..d3cbed8 --- /dev/null +++ b/backend/app/source_extraction.py @@ -0,0 +1,442 @@ +from __future__ import annotations + +from dataclasses import dataclass, field +from html import unescape +import re +from typing import Any +from urllib.parse import urljoin +from urllib.request import Request, urlopen + +DEFAULT_TIMEOUT_SECONDS = 10 +DEFAULT_USER_AGENT = "rss-news-bot/1.0 (+https://news.vanityontour.de)" + + +@dataclass(frozen=True) +class ExtractedArticle: + title: str | None + author: str | None + canonical_url: str | None + summary: str | None + content_text: str | None + images: list[str] + press_contact: str | None + extraction_error: str | None = None + image_metadata: dict[str, dict] = field(default_factory=dict) + + +def _clean_text(raw: str | None) -> str | None: + if not raw: + return None + text = unescape(raw) + text = re.sub(r"<[^>]+>", " ", text) + text = re.sub(r"\s+", " ", text).strip() + return text or None + + +def _strip_noise(html: str) -> str: + html = re.sub(r"", " ", html, flags=re.IGNORECASE) + html = re.sub(r"", " ", html, flags=re.IGNORECASE) + html = re.sub(r"", " ", html, flags=re.IGNORECASE) + return html + + +def _meta_content(html: str, attr: str, value: str) -> str | None: + pattern = re.compile( + rf"]+{attr}\s*=\s*[\"']{re.escape(value)}[\"'][^>]*content\s*=\s*[\"']([^\"']+)[\"'][^>]*>", + re.IGNORECASE, + ) + match = pattern.search(html) + if match: + return _clean_text(match.group(1)) + + # handle reversed attribute order + pattern_rev = re.compile( + rf"]+content\s*=\s*[\"']([^\"']+)[\"'][^>]*{attr}\s*=\s*[\"']{re.escape(value)}[\"'][^>]*>", + re.IGNORECASE, + ) + match = pattern_rev.search(html) + if match: + return _clean_text(match.group(1)) + return None + + +def _extract_title(html: str) -> str | None: + title = _meta_content(html, "property", "og:title") + if title: + return title + + match = re.search(r"]*>([\s\S]*?)", html, re.IGNORECASE) + if match: + cleaned = _clean_text(match.group(1)) + if cleaned: + return cleaned + + match = re.search(r"]*>([\s\S]*?)

", html, re.IGNORECASE) + if match: + return _clean_text(match.group(1)) + return None + + +def _extract_canonical(html: str) -> str | None: + match = re.search( + r"]+rel\s*=\s*[\"']canonical[\"'][^>]*href\s*=\s*[\"']([^\"']+)[\"'][^>]*>", + html, + re.IGNORECASE, + ) + if match: + return _clean_text(match.group(1)) + + match = re.search( + r"]+href\s*=\s*[\"']([^\"']+)[\"'][^>]*rel\s*=\s*[\"']canonical[\"'][^>]*>", + html, + re.IGNORECASE, + ) + if match: + return _clean_text(match.group(1)) + return None + + +def _extract_author(html: str) -> str | None: + for attr, value in (("name", "author"), ("property", "article:author"), ("property", "og:article:author")): + author = _meta_content(html, attr, value) + if author: + return author + + for pattern in ( + r"(?:Von|Autor(?:in)?)\s*[:\-]\s*([^<\n\r]{3,120})", + r"class=[\"'][^\"']*(?:author|byline)[^\"']*[\"'][^>]*>([\s\S]{1,180})<", + ): + match = re.search(pattern, html, re.IGNORECASE) + if match: + author = _clean_text(match.group(1)) + if author: + return author + return None + + +def _extract_images(html: str, page_url: str) -> list[str]: + images: list[str] = [] + seen: set[str] = set() + + for prop in ("og:image", "twitter:image"): + pattern = re.compile( + rf"]+property\s*=\s*[\"']{re.escape(prop)}[\"'][^>]*content\s*=\s*[\"']([^\"']+)[\"'][^>]*>", + re.IGNORECASE, + ) + for match in pattern.finditer(html): + src = match.group(1).strip() + abs_src = urljoin(page_url, src) + if abs_src not in seen: + seen.add(abs_src) + images.append(abs_src) + + for match in re.finditer(r"]+src\s*=\s*[\"']([^\"']+)[\"'][^>]*>", html, re.IGNORECASE): + src = match.group(1).strip() + abs_src = urljoin(page_url, src) + if abs_src not in seen: + seen.add(abs_src) + images.append(abs_src) + + return images + + +def _extract_content_text(html: str) -> str | None: + section = None + for pattern in ( + r"]*>([\s\S]*?)", + r"]*>([\s\S]*?)", + r"]*>([\s\S]*?)", + ): + match = re.search(pattern, html, re.IGNORECASE) + if match: + section = match.group(1) + break + + if not section: + section = html + + paragraphs = [] + for match in re.finditer(r"]*>([\s\S]*?)", section, re.IGNORECASE): + text = _clean_text(match.group(1)) + if text and re.search(r"\b(pressekontakt|press contact|kontakt|agentur)\b", text, re.IGNORECASE): + paragraphs.append(text) + + for match in re.finditer(r"]*>([\s\S]*?)

", section, re.IGNORECASE): + text = _clean_text(match.group(1)) + if text and len(text) > 2: + paragraphs.append(text) + + if paragraphs: + return "\n".join(paragraphs) + + stripped = _clean_text(section) + return stripped + + +def _extract_press_contact(content_text: str | None) -> str | None: + if not content_text: + return None + + lines = [line.strip() for line in content_text.split("\n") if line.strip()] + marker_re = re.compile(r"\b(pressekontakt|press contact|presse\-kontakt|agentur)\b", re.IGNORECASE) + for idx, line in enumerate(lines): + if marker_re.search(line): + chunk = [line] + for nxt in lines[idx + 1 : idx + 6]: + if re.search(r"\b(original\-content von|ots:|newsroom:|alle meldungen|zum newsroom)\b", nxt, re.IGNORECASE): + break + chunk.append(nxt) + return _clean_text("\n".join(chunk)) + + match = re.search( + r"((?:Pressekontakt|Agentur)[\s\S]{0,1200}?)(?:Original-Content von|OTS:|newsroom:|Alle Meldungen|Zum Newsroom|$)", + content_text, + re.IGNORECASE, + ) + if match: + return _clean_text(match.group(1)) + return None + + +# CSS class keywords that indicate a copyright/credit element inside a figcaption +_CREDIT_CLASS_RE = re.compile( + r"class\s*=\s*[\"'][^\"']*(?:copyright|credit|photographer|photo-credit|image-credit|bildrechte|fotocredit)[^\"']*[\"']", + re.IGNORECASE, +) + +# Inline text patterns that signal a credit/copyright notice +_CREDIT_TEXT_RE = re.compile( + r"(©[^<\n\r]{1,100}|(?:Foto|Bild|Credit|Fotograf|Fotografie)\s*:[^<\n\r]{1,100})", + re.IGNORECASE, +) + +# data-* attribute names that carry credit/caption information directly on +_IMG_DATA_CREDIT_ATTRS = ("data-credit", "data-photographer", "data-copyright") +_IMG_DATA_CAPTION_ATTRS = ("data-caption", "data-description") + +# Class keywords for adjacent sibling credit spans/divs after an +_ADJ_CREDIT_CLASS_RE = re.compile( + r"class\s*=\s*[\"'][^\"']*(?:copyright|credit|photographer|photo-credit|image-credit|bildrechte|fotocredit)[^\"']*[\"']", + re.IGNORECASE, +) + + +def _extract_image_metadata(html: str, page_url: str) -> dict[str, dict]: + """Return a mapping of absolute image URL → {"caption": ..., "credit": ...}. + + Uses three progressive strategies: + 1.
with +
+ 2. data-* attributes on tags not already covered + 3. tags whose immediately following HTML contains a credit element + """ + result: dict[str, dict] = {} + + try: + # ------------------------------------------------------------------ + # Strategy 1:
blocks containing and
+ # ------------------------------------------------------------------ + for fig_match in re.finditer(r"]*>([\s\S]*?)
", html, re.IGNORECASE): + fig_html = fig_match.group(1) + + # Locate image src (src or lazy-loaded data-src) + img_match = re.search( + r"]+(?:src|data-src)\s*=\s*[\"']([^\"']+)[\"'][^>]*>", + fig_html, + re.IGNORECASE, + ) + if not img_match: + continue + img_src = urljoin(page_url, img_match.group(1).strip()) + + # Locate figcaption + figcap_match = re.search( + r"]*>([\s\S]*?)
", + fig_html, + re.IGNORECASE, + ) + if not figcap_match: + continue + figcap_html = figcap_match.group(1) + + # --- Extract credit --- + credit: str | None = None + + # Try credit via class attribute on an inner element + credit_elem_match = re.search( + r"<(?:span|p|div)[^>]*" + + _CREDIT_CLASS_RE.pattern + + r"[^>]*>([\s\S]*?)", + figcap_html, + re.IGNORECASE, + ) + if credit_elem_match: + credit = _clean_text(credit_elem_match.group(1)) + + # Fallback: scan plain text of figcaption for credit patterns + if not credit: + figcap_text = unescape(re.sub(r"<[^>]+>", " ", figcap_html)) + cred_text_match = _CREDIT_TEXT_RE.search(figcap_text) + if cred_text_match: + credit = _clean_text(cred_text_match.group(1)) + + # --- Extract caption (full figcaption text) --- + caption = _clean_text(figcap_html) + + # Only store entries that carry at least one piece of metadata + if caption or credit: + entry: dict[str, str] = {} + if caption: + entry["caption"] = caption + if credit: + entry["credit"] = credit + result[img_src] = entry + + # ------------------------------------------------------------------ + # Strategy 2: data-* attributes on tags + # ------------------------------------------------------------------ + for img_match in re.finditer(r"]+)>", html, re.IGNORECASE): + img_attrs = img_match.group(1) + + # Resolve image URL (prefer src over data-src) + src_match = re.search(r'(?:^|\s)src\s*=\s*["\']([^"\']+)["\']', img_attrs, re.IGNORECASE) + if not src_match: + src_match = re.search(r'data-src\s*=\s*["\']([^"\']+)["\']', img_attrs, re.IGNORECASE) + if not src_match: + continue + img_src = urljoin(page_url, src_match.group(1).strip()) + + # Skip images already handled by Strategy 1 + if img_src in result: + continue + + credit: str | None = None + caption: str | None = None + + for attr in _IMG_DATA_CREDIT_ATTRS: + attr_match = re.search( + rf'{re.escape(attr)}\s*=\s*["\']([^"\']+)["\']', + img_attrs, + re.IGNORECASE, + ) + if attr_match: + credit = _clean_text(attr_match.group(1)) + break + + for attr in _IMG_DATA_CAPTION_ATTRS: + attr_match = re.search( + rf'{re.escape(attr)}\s*=\s*["\']([^"\']+)["\']', + img_attrs, + re.IGNORECASE, + ) + if attr_match: + caption = _clean_text(attr_match.group(1)) + break + + if caption or credit: + entry = {} + if caption: + entry["caption"] = caption + if credit: + entry["credit"] = credit + result[img_src] = entry + + # ------------------------------------------------------------------ + # Strategy 3: followed within 200 chars by a credit element + # ------------------------------------------------------------------ + for img_match in re.finditer(r"]+)>", html, re.IGNORECASE): + img_attrs = img_match.group(1) + + src_match = re.search(r'(?:^|\s)src\s*=\s*["\']([^"\']+)["\']', img_attrs, re.IGNORECASE) + if not src_match: + src_match = re.search(r'data-src\s*=\s*["\']([^"\']+)["\']', img_attrs, re.IGNORECASE) + if not src_match: + continue + img_src = urljoin(page_url, src_match.group(1).strip()) + + # Skip images already handled by earlier strategies + if img_src in result: + continue + + # Look at the 200 characters of HTML immediately after the img tag + after_start = img_match.end() + after_html = html[after_start : after_start + 200] + + adj_match = re.search( + r"<(?:span|p|div)[^>]*" + + _ADJ_CREDIT_CLASS_RE.pattern + + r"[^>]*>([\s\S]*?)", + after_html, + re.IGNORECASE, + ) + if adj_match: + credit = _clean_text(adj_match.group(1)) + if credit: + result[img_src] = {"credit": credit} + + except Exception: + return {} + + return result + + +def extract_article(url: str, timeout_seconds: int = DEFAULT_TIMEOUT_SECONDS) -> ExtractedArticle: + try: + req = Request( + url=url, + headers={ + "User-Agent": DEFAULT_USER_AGENT, + "Accept-Language": "de-DE,de;q=0.9,en;q=0.8", + }, + ) + with urlopen(req, timeout=timeout_seconds) as resp: + raw = resp.read() + charset = resp.headers.get_content_charset() or "utf-8" + html = raw.decode(charset, errors="replace") + except Exception as exc: + return ExtractedArticle( + title=None, + author=None, + canonical_url=None, + summary=None, + content_text=None, + images=[], + press_contact=None, + extraction_error=str(exc), + ) + + html = _strip_noise(html) + title = _extract_title(html) + author = _extract_author(html) + canonical_url = _extract_canonical(html) + summary = _meta_content(html, "name", "description") + content_text = _extract_content_text(html) + if not summary and content_text: + summary = _clean_text(content_text[:320]) + images = _extract_images(html, url) + press_contact = _extract_press_contact(content_text) + image_metadata = _extract_image_metadata(html, url) + + return ExtractedArticle( + title=title, + author=author, + canonical_url=canonical_url, + summary=summary, + content_text=content_text, + images=images, + press_contact=press_contact, + extraction_error=None, + image_metadata=image_metadata, + ) + + +def extracted_article_to_meta(article: ExtractedArticle) -> dict[str, Any]: + return { + "title": article.title, + "author": article.author, + "canonical_url": article.canonical_url, + "summary": article.summary, + "images": article.images, + "press_contact": article.press_contact, + "extraction_error": article.extraction_error, + "image_metadata": article.image_metadata, + } diff --git a/backend/app/telegram_bot.py b/backend/app/telegram_bot.py new file mode 100644 index 0000000..880a49d --- /dev/null +++ b/backend/app/telegram_bot.py @@ -0,0 +1,474 @@ +"""Telegram Bot integration for RSS-News pipeline notifications and controls.""" +from __future__ import annotations + +import json +import logging +from typing import Any +from urllib.error import URLError +from urllib.parse import urlencode +from urllib.request import Request, urlopen + +from .config import get_settings + +logger = logging.getLogger(__name__) + +_BASE = "https://api.telegram.org/bot{token}/{method}" +_N8N_APP_RELEASE_WEBHOOK = "https://n8n.vanityontour.de/webhook/tg-app-release-bot-v1/webhook" + + +# --------------------------------------------------------------------------- +# Low-level API helpers +# --------------------------------------------------------------------------- + +def _call(method: str, payload: dict[str, Any]) -> dict[str, Any]: + settings = get_settings() + token = settings.telegram_bot_token + if not token: + raise RuntimeError("TELEGRAM_BOT_TOKEN nicht konfiguriert") + url = _BASE.format(token=token, method=method) + data = json.dumps(payload).encode("utf-8") + req = Request( + url=url, + data=data, + method="POST", + headers={"Content-Type": "application/json", "Accept": "application/json"}, + ) + try: + with urlopen(req, timeout=15) as resp: + raw = resp.read().decode("utf-8", errors="replace") + return json.loads(raw) + except URLError as exc: + logger.error("Telegram API Fehler (%s): %s", method, exc) + raise RuntimeError(f"Telegram API Fehler: {exc}") from exc + + +def _chat_id() -> str: + settings = get_settings() + cid = settings.telegram_chat_id + if not cid: + raise RuntimeError("TELEGRAM_CHAT_ID nicht konfiguriert") + return cid + + +def _inline_keyboard(buttons: list[list[dict[str, str]]]) -> dict: + return {"inline_keyboard": buttons} + + +# --------------------------------------------------------------------------- +# Public send functions +# --------------------------------------------------------------------------- + +def send_message(text: str, reply_markup: dict | None = None, parse_mode: str = "HTML") -> dict: + payload: dict[str, Any] = { + "chat_id": _chat_id(), + "text": text, + "parse_mode": parse_mode, + "disable_web_page_preview": False, + } + if reply_markup: + payload["reply_markup"] = reply_markup + return _call("sendMessage", payload) + + +def send_photo_message( + photo_url: str, + caption: str, + reply_markup: dict | None = None, + parse_mode: str = "HTML", +) -> dict: + payload: dict[str, Any] = { + "chat_id": _chat_id(), + "photo": photo_url, + "caption": caption, + "parse_mode": parse_mode, + } + if reply_markup: + payload["reply_markup"] = reply_markup + try: + return _call("sendPhoto", payload) + except Exception: + # Fall back to text message if photo fails (e.g. image URL no longer valid) + return send_message(caption, reply_markup=reply_markup, parse_mode=parse_mode) + + +def answer_callback_query(callback_query_id: str, text: str = "") -> None: + try: + _call("answerCallbackQuery", {"callback_query_id": callback_query_id, "text": text}) + except Exception as exc: + logger.warning("answerCallbackQuery fehlgeschlagen: %s", exc) + + +def edit_message_reply_markup(chat_id: str, message_id: int, reply_markup: dict | None = None) -> None: + payload: dict[str, Any] = {"chat_id": chat_id, "message_id": message_id} + if reply_markup: + payload["reply_markup"] = reply_markup + else: + payload["reply_markup"] = {"inline_keyboard": []} + try: + _call("editMessageReplyMarkup", payload) + except Exception as exc: + logger.warning("editMessageReplyMarkup fehlgeschlagen: %s", exc) + + +def setup_webhook(webhook_url: str) -> dict: + settings = get_settings() + payload: dict[str, Any] = {"url": webhook_url, "allowed_updates": ["message", "callback_query"]} + if settings.telegram_webhook_secret: + payload["secret_token"] = settings.telegram_webhook_secret + return _call("setWebhook", payload) + + +def delete_webhook() -> dict: + return _call("deleteWebhook", {}) + + +def _forward_to_n8n_app_release(update: dict[str, Any]) -> None: + """Forward a Telegram update to the N8N App Release webhook.""" + try: + data = json.dumps(update).encode("utf-8") + req = Request( + url=_N8N_APP_RELEASE_WEBHOOK, + data=data, + method="POST", + headers={"Content-Type": "application/json"}, + ) + with urlopen(req, timeout=5) as _: + pass + except Exception as exc: + logger.debug("N8N App-Release-Forward fehlgeschlagen: %s", exc) + + +# --------------------------------------------------------------------------- +# Notification helpers +# --------------------------------------------------------------------------- + +def _format_tags(meta_json: str | None) -> str: + if not meta_json: + return "" + try: + meta = json.loads(meta_json) + tags = meta.get("generated_tags") or [] + if tags: + return " ".join(f"#{t.replace(' ', '_')}" for t in tags[:6]) + except Exception: + pass + return "" + + +def _score_emoji(score: int) -> str: + if score >= 85: + return "🟢" + if score >= 70: + return "🟡" + return "🔴" + + +def notify_new_draft( + article: dict[str, Any], + score: int, + suggested_publish_at: str | None = None, +) -> None: + """Send Telegram notification for a newly created WP draft.""" + title = (article.get("title") or "Ohne Titel").strip() + wp_url = article.get("wp_post_url") or "" + tags_str = _format_tags(article.get("meta_json")) + art_id = article.get("id") + + score_line = f"{_score_emoji(score)} Relevanz-Score: {score}/100" + publish_line = f"📅 Vorgeschlagene Veröffentlichung: {suggested_publish_at}" if suggested_publish_at else "" + link_line = f'🔗 Draft in WordPress öffnen' if wp_url else "" + tags_line = f"🏷 {tags_str}" if tags_str else "" + + text_parts = [ + f"✅ Neuer Draft erstellt", + f"📰 {title}", + score_line, + ] + if publish_line: + text_parts.append(publish_line) + if tags_line: + text_parts.append(tags_line) + if link_line: + text_parts.append(link_line) + + text = "\n".join(text_parts) + + keyboard = _inline_keyboard([ + [ + {"text": "✏️ Neu schreiben", "callback_data": f"rewrite:{art_id}"}, + {"text": "❌ Verwerfen", "callback_data": f"discard:{art_id}"}, + ] + ]) + + # Try with image first + meta = {} + try: + meta = json.loads(article.get("meta_json") or "{}") + except Exception: + pass + image_url = None + image_review = meta.get("image_review") or {} + if isinstance(image_review, dict): + image_url = image_review.get("selected_url") + if not image_url: + image_sel = (meta.get("extraction") or {}).get("image_selection") or {} + image_url = image_sel.get("primary") + + if image_url: + send_photo_message(image_url, caption=text, reply_markup=keyboard) + else: + send_message(text, reply_markup=keyboard) + + +def notify_relevance_warning(article: dict[str, Any], score: int, reason: str) -> None: + """Send Telegram warning for borderline articles (score between warn and auto thresholds).""" + title = (article.get("title") or "Ohne Titel").strip() + art_id = article.get("id") + source_url = article.get("source_url") or "" + + text = ( + f"⚠️ Artikel mit niedrigem Relevanz-Score\n" + f"📰 {title}\n" + f"{_score_emoji(score)} Score: {score}/100\n" + f"💬 {reason}\n" + f'🔗 Originalartikel' + ) + keyboard = _inline_keyboard([ + [ + {"text": "➕ Trotzdem verarbeiten", "callback_data": f"override:{art_id}"}, + {"text": "❌ Ablehnen", "callback_data": f"reject:{art_id}"}, + ] + ]) + send_message(text, reply_markup=keyboard) + + +def notify_rejected_summary(articles: list[dict[str, Any]]) -> None: + """Send summary of rejected articles for this pipeline run.""" + if not articles: + return + lines = [f"🚫 {len(articles)} Artikel abgelehnt (Score < {get_settings().pipeline_relevance_warn})\n"] + for art in articles[:10]: + title = (art.get("title") or "Ohne Titel")[:60] + score = _get_relevance_score(art) + reason = _get_rejection_reason(art) + art_id = art.get("id") + lines.append(f"• {title} (Score: {score}) — {reason}") + if len(articles) > 10: + lines.append(f"... und {len(articles) - 10} weitere") + + text = "\n".join(lines) + # Build override buttons for first 5 + rows = [] + for art in articles[:5]: + art_id = art.get("id") + title = (art.get("title") or "")[:25] + rows.append([{"text": f"➕ {title}…", "callback_data": f"override:{art_id}"}]) + + keyboard = _inline_keyboard(rows) if rows else None + send_message(text, reply_markup=keyboard) + + +def notify_error(message: str) -> None: + """Send error alert to Telegram.""" + try: + send_message(f"🔴 Fehler im RSS-Pipeline\n{message}") + except Exception as exc: + logger.error("Telegram Fehler-Benachrichtigung fehlgeschlagen: %s", exc) + + +def notify_pipeline_started(trigger: str = "auto") -> None: + icon = "🤖" if trigger == "auto" else "👤" + try: + send_message(f"{icon} Pipeline gestartet (Auslöser: {trigger})") + except Exception: + pass + + +def notify_pipeline_done(stats: dict[str, Any]) -> None: + ingested = stats.get("ingested", 0) + processed = stats.get("processed", 0) + drafts = stats.get("drafts_created", 0) + rejected = stats.get("rejected", 0) + quality_gate_rejected = stats.get("quality_gate_rejected", 0) + no_image = stats.get("no_image", 0) + warnings = stats.get("warnings", 0) + errors = stats.get("errors", 0) + + lines = [ + "📊 Pipeline abgeschlossen", + f"📥 Neue Artikel importiert: {ingested}", + f"⚙️ Verarbeitet: {processed}", + f"📝 Drafts erstellt: {drafts}", + ] + if rejected: + lines.append(f"🚫 Abgelehnt (Score): {rejected}") + if quality_gate_rejected: + lines.append(f"✂️ Qualitätsprüfung: {quality_gate_rejected}") + if no_image: + lines.append(f"🖼️ Kein Bild: {no_image}") + if warnings: + lines.append(f"⚠️ Warnungen: {warnings}") + if errors: + lines.append(f"🔴 Fehler: {errors}") + + try: + send_message("\n".join(lines)) + except Exception: + pass + + +# --------------------------------------------------------------------------- +# Helper to read relevance info from meta_json +# --------------------------------------------------------------------------- + +def _get_relevance_score(article: dict[str, Any]) -> int: + try: + meta = json.loads(article.get("meta_json") or "{}") + return int(meta.get("relevance", {}).get("score", 0)) + except Exception: + return 0 + + +def _get_rejection_reason(article: dict[str, Any]) -> str: + try: + meta = json.loads(article.get("meta_json") or "{}") + return str(meta.get("relevance", {}).get("reason", ""))[:80] + except Exception: + return "" + + +# --------------------------------------------------------------------------- +# Incoming update handler (called by webhook endpoint) +# --------------------------------------------------------------------------- + +def handle_update(update: dict[str, Any]) -> None: + """Process an incoming Telegram update.""" + # Import here to avoid circular imports + from . import pipeline as _pipeline + + if "callback_query" in update: + _handle_callback(update["callback_query"]) + elif "message" in update: + _handle_message(update["message"]) + + +def _handle_message(message: dict[str, Any]) -> None: + from . import pipeline as _pipeline + + text = (message.get("text") or "").strip() + if not text.startswith("/"): + return + + cmd = text.split()[0].lower().lstrip("/") + if "@" in cmd: + cmd = cmd.split("@")[0] + + if cmd == "run": + send_message("🤖 Pipeline wird manuell gestartet …") + try: + stats = _pipeline.run_auto_pipeline(trigger="manual") + notify_pipeline_done(stats) + except Exception as exc: + notify_error(f"/run fehlgeschlagen: {exc}") + + elif cmd == "rejected": + try: + articles = _pipeline.get_recently_rejected(days=3) + if not articles: + send_message("✅ Keine abgelehnten Artikel in den letzten 3 Tagen.") + else: + notify_rejected_summary(articles) + except Exception as exc: + notify_error(f"/rejected fehlgeschlagen: {exc}") + + elif cmd == "status": + try: + status_text = _pipeline.get_pipeline_status_text() + send_message(status_text) + except Exception as exc: + notify_error(f"/status fehlgeschlagen: {exc}") + + elif cmd == "help": + send_message( + "📋 Verfügbare Befehle\n" + "/run — Pipeline manuell starten\n" + "/rejected — Abgelehnte Artikel der letzten 3 Tage\n" + "/status — Pipeline-Status\n" + "/help — Diese Hilfe" + ) + + else: + # Unbekannter Befehl → an N8N App-Release-Workflow weiterleiten + _forward_to_n8n_app_release({"message": message}) + + +def _handle_callback(callback_query: dict[str, Any]) -> None: + from . import pipeline as _pipeline + from .repositories import get_article_by_id, update_article_status + + query_id = callback_query.get("id", "") + data = (callback_query.get("data") or "").strip() + chat_id = str(callback_query.get("message", {}).get("chat", {}).get("id", "")) + message_id = int(callback_query.get("message", {}).get("message_id", 0)) + + if ":" not in data: + answer_callback_query(query_id, "Ungültige Aktion") + return + + action, _, raw_id = data.partition(":") + try: + article_id = int(raw_id) + except ValueError: + answer_callback_query(query_id, "Ungültige Artikel-ID") + return + + article = get_article_by_id(article_id) + if not article: + answer_callback_query(query_id, "Artikel nicht gefunden") + return + + # Answer Telegram immediately so the spinning indicator stops + action_labels = { + "rewrite": "✏️ Artikel wird neu geschrieben …", + "discard": "❌ Artikel verworfen", + "override": "➕ Artikel wird verarbeitet …", + "reject": "🚫 Abgelehnt", + } + answer_callback_query(query_id, action_labels.get(action, "")) + edit_message_reply_markup(chat_id, message_id) + + logger.info("Callback: action=%s article_id=%s", action, article_id) + + if action == "rewrite": + try: + logger.info("Rewrite #%d: starte rewrite_and_update_draft", article_id) + _pipeline.rewrite_and_update_draft(article_id) + logger.info("Rewrite #%d: abgeschlossen, sende Benachrichtigung", article_id) + updated = get_article_by_id(article_id) + if updated: + from .scheduler import suggest_publish_slot + slot = suggest_publish_slot() + notify_new_draft(updated, score=_get_relevance_score(updated), suggested_publish_at=slot) + except Exception as exc: + logger.error("Rewrite #%d fehlgeschlagen: %s", article_id, exc, exc_info=True) + notify_error(f"Rewrite #{article_id} fehlgeschlagen: {exc}") + + elif action == "discard": + try: + _pipeline.discard_article(article_id) + except Exception as exc: + logger.error("Discard #%d fehlgeschlagen: %s", article_id, exc) + notify_error(f"Verwerfen #{article_id} fehlgeschlagen: {exc}") + + elif action == "override": + try: + _pipeline.override_rejected_article(article_id) + except Exception as exc: + logger.error("Override #%d fehlgeschlagen: %s", article_id, exc) + notify_error(f"Override #{article_id} fehlgeschlagen: {exc}") + + elif action == "reject": + update_article_status(article_id, "error", actor="telegram", note="Manuell abgelehnt via Telegram") + + else: + logger.warning("Unbekannte Callback-Aktion: %s", action) diff --git a/backend/app/wordpress.py b/backend/app/wordpress.py new file mode 100644 index 0000000..bb96198 --- /dev/null +++ b/backend/app/wordpress.py @@ -0,0 +1,689 @@ +from __future__ import annotations + +import base64 +from html import escape +import logging +import json +import mimetypes +from pathlib import Path +import re +from typing import Any +from html import unescape as _html_unescape +from urllib.parse import quote_plus, urlparse +from urllib.request import Request, urlopen + +from .config import get_settings + + +def _auth_header(username: str, app_password: str) -> str: + token = base64.b64encode(f"{username}:{app_password}".encode("utf-8")).decode("ascii") + return f"Basic {token}" + + +def _wp_request( + *, + base_url: str, + auth_header: str, + method: str, + endpoint: str, + payload: dict[str, Any] | None = None, +) -> Any: + url = f"{base_url.rstrip('/')}/wp-json/wp/v2/{endpoint.lstrip('/')}" + data = json.dumps(payload).encode("utf-8") if payload is not None else None + req = Request( + url=url, + data=data, + method=method, + headers={ + "Authorization": auth_header, + "Content-Type": "application/json; charset=utf-8", + "Accept": "application/json", + "User-Agent": "rss-news-publisher/1.0", + }, + ) + with urlopen(req, timeout=20) as resp: + raw = resp.read().decode("utf-8", errors="replace") + return json.loads(raw) if raw else {} + + +def _selected_image_url_from_meta(meta_json: str | None) -> str | None: + if not meta_json: + return None + try: + meta = json.loads(meta_json) + except Exception: + return None + if not isinstance(meta, dict): + return None + image_review = meta.get("image_review") + if not isinstance(image_review, dict): + return None + selected = image_review.get("selected_url") + return selected if isinstance(selected, str) and selected.strip() else None + + +def _selected_tags_from_meta(meta_json: str | None) -> list[str]: + if not meta_json: + return [] + try: + meta = json.loads(meta_json) + except Exception: + return [] + if not isinstance(meta, dict): + return [] + raw_tags = meta.get("generated_tags") + if not isinstance(raw_tags, list): + return [] + tags: list[str] = [] + seen: set[str] = set() + for item in raw_tags: + value = str(item or "").strip() + if not value: + continue + key = value.casefold() + if key in seen: + continue + seen.add(key) + tags.append(value) + if len(tags) >= 12: + break + return tags + + +def _resolve_wp_tag_ids(*, base_url: str, auth_header: str, tags: list[str]) -> list[int]: + ids: list[int] = [] + seen: set[int] = set() + for tag in tags: + name = tag.strip() + if not name: + continue + try: + endpoint = f"tags?search={quote_plus(name)}&per_page=20" + result = _wp_request(base_url=base_url, auth_header=auth_header, method="GET", endpoint=endpoint) + tag_id: int | None = None + if isinstance(result, list): + for row in result: + if not isinstance(row, dict): + continue + row_name = str(row.get("name") or "") + rid = int(row.get("id", 0) or 0) + if rid <= 0: + continue + if row_name.casefold() == name.casefold(): + tag_id = rid + break + if tag_id is None: + for row in result: + if isinstance(row, dict) and int(row.get("id", 0) or 0) > 0: + tag_id = int(row.get("id", 0)) + break + if tag_id is None: + created = _wp_request( + base_url=base_url, + auth_header=auth_header, + method="POST", + endpoint="tags", + payload={"name": name}, + ) + if isinstance(created, dict): + rid = int(created.get("id", 0) or 0) + if rid > 0: + tag_id = rid + if tag_id is not None and tag_id > 0 and tag_id not in seen: + seen.add(tag_id) + ids.append(tag_id) + except Exception: + continue + return ids + + +_BLOCKED_IMAGE_EXTS = {".svg", ".gif", ".ico", ".webp"} +_logger = logging.getLogger(__name__) + + +def _sanitize_image_url(url: str) -> str: + """Decode HTML entities (e.g. & → &) in image URLs from RSS feeds.""" + return _html_unescape(url) + + +_PLACEHOLDER_PATTERNS = ("some-default.jpg", "default-image", "placeholder", "no-image", "noimage") + +def _is_usable_image_url(url: str) -> bool: + """Return False for URLs that are unlikely to work as WP featured images.""" + if not url or url.startswith("data:"): + return False + try: + path = urlparse(url).path.lower() + _, ext = path.rsplit(".", 1) if "." in path else ("", "") + if f".{ext}" in _BLOCKED_IMAGE_EXTS: + return False + if any(p in path for p in _PLACEHOLDER_PATTERNS): + return False + except Exception: + pass + return True + + +def _download_image_bytes(url: str, referer: str | None = None) -> tuple[bytes, str]: + url = _sanitize_image_url(url) + headers = { + "User-Agent": "Mozilla/5.0 (compatible; rss-news-publisher/1.0)", + "Accept": "image/avif,image/webp,image/apng,image/*,*/*;q=0.8", + } + if referer: + headers["Referer"] = referer + req = Request(url=url, headers=headers) + with urlopen(req, timeout=20) as resp: + raw = resp.read() + content_type = resp.headers.get("Content-Type", "application/octet-stream") + content_type = content_type.split(";")[0].strip() if content_type else "application/octet-stream" + if not content_type.lower().startswith("image/"): + raise RuntimeError(f"Ausgewählte Bild-URL liefert kein Bild ({content_type})") + return raw, content_type + + +def _guess_filename(image_url: str, content_type: str) -> str: + parsed = urlparse(_sanitize_image_url(image_url)) + stem = Path(parsed.path).name or "article-image" + if "." not in stem: + ext = mimetypes.guess_extension(content_type.split(";")[0].strip()) or ".jpg" + stem = f"{stem}{ext}" + # Sanitize to ASCII-safe characters for the HTTP Content-Disposition header + stem = stem.encode("ascii", errors="ignore").decode("ascii") + stem = re.sub(r"[^\w.\-]", "_", stem) or "article-image.jpg" + return stem + + +def _get_image_meta_for_url(meta_json: str | None, image_url: str) -> dict: + """Return the caption/credit dict for a specific image URL from extraction metadata.""" + if not meta_json or not image_url: + return {} + try: + from urllib.parse import urlparse + meta = json.loads(meta_json) + image_metadata = (meta.get("extraction") or {}).get("image_metadata") or {} + # Exact match first + if image_url in image_metadata: + return image_metadata[image_url] + # Fuzzy match: compare without query string (handles ?w=1200 variants) + base_url = urlparse(image_url)._replace(query="").geturl() + for key, val in image_metadata.items(): + key_base = urlparse(key)._replace(query="").geturl() + if key_base == base_url: + return val + return {} + except Exception: + return {} + + +def _build_image_caption(image_meta: dict, source_url: str) -> str: + """Build a WP caption string from image metadata and source URL.""" + # caption from figcaption typically already contains the credit text + caption = (image_meta.get("caption") or "").strip() + if caption: + return caption + return f"Quelle: {source_url}" + + +def _upload_featured_media( + *, + base_url: str, + auth_header: str, + image_url: str, + article_title: str, + source_url: str, + image_caption: str = "", +) -> int: + image_bytes, content_type = _download_image_bytes(image_url, referer=source_url or None) + filename = _guess_filename(image_url, content_type) + + media_url = f"{base_url.rstrip('/')}/wp-json/wp/v2/media" + media_req = Request( + url=media_url, + data=image_bytes, + method="POST", + headers={ + "Authorization": auth_header, + "Content-Type": content_type, + "Content-Disposition": f'attachment; filename="{filename}"', + "Accept": "application/json", + "User-Agent": "rss-news-publisher/1.0", + }, + ) + with urlopen(media_req, timeout=30) as resp: + media_raw = resp.read().decode("utf-8", errors="replace") + media_payload = json.loads(media_raw) if media_raw else {} + media_id = int(media_payload.get("id", 0)) if isinstance(media_payload, dict) else 0 + if media_id <= 0: + raise RuntimeError(f"WordPress Media-Upload fehlgeschlagen: {media_payload}") + + _wp_request( + base_url=base_url, + auth_header=auth_header, + method="POST", + endpoint=f"media/{media_id}", + payload={ + "title": f"{article_title[:120]} - Bild", + "caption": image_caption or f"Quelle: {source_url}", + "alt_text": article_title[:200], + }, + ) + return media_id + + +def _as_paragraph_html(text: str) -> str: + chunks = [chunk.strip() for chunk in re.split(r"\n{2,}", text.strip()) if chunk.strip()] + if not chunks: + return "" + lines = [] + for chunk in chunks: + compact = re.sub(r"\s*\n\s*", " ", chunk) + lines.append(f"

{escape(compact)}

") + return "\n".join(lines) + + +def _as_block_paragraphs(text: str) -> str: + chunks = [chunk.strip() for chunk in re.split(r"\n{2,}", text.strip()) if chunk.strip()] + if not chunks: + return "" + lines = [] + for chunk in chunks: + compact = re.sub(r"\s*\n\s*", " ", chunk) + lines.append(f"

{escape(compact)}

") + return "\n".join(lines) + + +def _strip_html_tags(raw: str) -> str: + text = re.sub(r"<[^>]+>", " ", raw or "") + return re.sub(r"\s+", " ", text).strip() + + +def _html_to_wp_blocks(html: str) -> str: + src = (html or "").strip() + if not src: + return "" + pattern = re.compile( + r"]*>[\s\S]*?|]*>[\s\S]*?

|]*>[\s\S]*?|]*>[\s\S]*?", + re.IGNORECASE, + ) + blocks: list[str] = [] + for match in pattern.finditer(src): + block_html = match.group(0).strip() + if not block_html: + continue + tag_match = re.match(r"<([a-z0-9]+)", block_html, re.IGNORECASE) + tag = (tag_match.group(1).lower() if tag_match else "") + if tag == "p": + blocks.append(f"{block_html}") + elif tag in {"ul", "ol"}: + ordered = tag == "ol" + if ordered: + blocks.append(f'{block_html}') + else: + blocks.append(f"{block_html}") + elif tag.startswith("h") and len(tag) == 2 and tag[1].isdigit(): + level = int(tag[1]) + blocks.append(f'{block_html}') + if blocks: + return "\n".join(blocks) + return _as_block_paragraphs(_strip_html_tags(src)) + + +def _as_block_heading(level: int, text: str) -> str: + safe_level = min(6, max(1, int(level))) + return f'{escape(text)}' + + +def _as_block_list(items: list[str]) -> str: + if not items: + return "" + content = "".join(f"
  • {item}
  • " for item in items) + return f"
      {content}
    " + + +def _sanitize_publish_text(text: str) -> str: + raw = (text or "").strip() + if not raw: + return "" + lines = [ln.strip() for ln in raw.splitlines() if ln.strip()] + if len(lines) > 3: + lines = lines[3:] + merged = "\n".join(lines) + merged = re.sub(r"\n?\s*Pressekontakt[\s\S]*$", "", merged, flags=re.IGNORECASE).strip() + return merged + + +def _build_attribution_block(article: dict[str, Any]) -> str: + """Build a WP Gutenberg attribution block for the bottom of the article.""" + from urllib.parse import urlparse + source_url = (article.get("canonical_url") or article.get("source_url") or "").strip() + source_name = (article.get("source_name_snapshot") or "").strip() + author = (article.get("author") or "").strip() + + # If the feed name is "Google Alerts" (or similar generic names), derive the + # real source name from the hostname of the canonical URL. + if not source_name or source_name.lower() in ("google alerts", "google"): + try: + hostname = urlparse(source_url).hostname or "" + source_name = hostname.removeprefix("www.") + except Exception: + pass + + # Get image credit from extraction metadata (uses fuzzy URL match) + meta_json = article.get("meta_json") + credit = "" + try: + meta = json.loads(meta_json or "{}") + selected_url = (meta.get("image_review") or {}).get("selected_url") or "" + if selected_url: + img_meta = _get_image_meta_for_url(meta_json, selected_url) + raw_credit = (img_meta.get("credit") or "").strip() + caption_text = (img_meta.get("caption") or "").strip() + # If credit is just a bare marker prefix (e.g. "Foto:", "Bild:"), + # clear it and extract the full credit from the caption text instead. + _BARE_MARKERS = {"foto", "bild", "credit", "fotograf", "fotografie", "photo", "bildnachweis"} + if raw_credit.endswith(":") and raw_credit[:-1].strip().lower() in _BARE_MARKERS: + raw_credit = "" + if raw_credit: + credit = raw_credit + elif caption_text: + # Extract credit markers like "Foto: IMAGO/…", "© Agentur", "Bild: …" + import re as _re + m = _re.search( + r"(©[^\n]{1,120}|(?:Foto|Bild|Credit|Fotograf|Photo)\s*:[^\n]{1,120})", + caption_text, + ) + credit = m.group(1).strip() if m else "" + except Exception: + pass + + parts: list[str] = [] + if source_url: + label = source_name or source_url + parts.append(f'Originalartikel: {escape(label)}') + if author: + parts.append(f"Autor: {escape(author)}") + if credit: + parts.append(f"Bildnachweis: {escape(credit)}") + + if not parts: + return "" + + inner = "  |  ".join(parts) + return ( + "\n" + "
    \n" + f'' + f'

    {inner}

    ' + "" + ) + + +def _build_post_content(article: dict[str, Any]) -> tuple[str, str | None]: + summary = (article.get("summary") or "").strip() + body_text = (article.get("content_rewritten") or article.get("content_raw") or "").strip() + body_text = _sanitize_publish_text(body_text) + if not body_text: + body_text = summary + + has_html = bool(re.search(r"<[a-zA-Z][^>]*>", body_text)) + body_html = _html_to_wp_blocks(body_text) if has_html else _as_block_paragraphs(body_text) + if not body_html: + body_html = "

    Kein Inhalt verfügbar.

    " + + attribution = _build_attribution_block(article) + content = (body_html + attribution).strip() + return content, None + + +def publish_article_draft(article: dict[str, Any]) -> tuple[int, str | None]: + settings = get_settings() + if not settings.wordpress_base_url or not settings.wordpress_username or not settings.wordpress_app_password: + raise RuntimeError("WordPress Konfiguration fehlt (base_url, username, app_password)") + + auth = _auth_header(settings.wordpress_username, settings.wordpress_app_password) + + title = (article.get("title") or "Ohne Titel").strip() + content, excerpt = _build_post_content(article) + source_url = article.get("source_url") or "" + + featured_media_id = None + selected_image_url = _selected_image_url_from_meta(article.get("meta_json")) + + # Build candidate list: primary selected URL + fallbacks from image_urls_json + image_candidates: list[str] = [] + if selected_image_url and _is_usable_image_url(selected_image_url): + image_candidates.append(selected_image_url) + try: + extra_urls = json.loads(article.get("image_urls_json") or "[]") + for u in extra_urls: + if u and u not in image_candidates and _is_usable_image_url(u): + image_candidates.append(u) + except Exception: + pass + + for candidate_url in image_candidates: + image_meta = _get_image_meta_for_url(article.get("meta_json"), candidate_url) + image_caption = _build_image_caption(image_meta, source_url) + try: + featured_media_id = _upload_featured_media( + base_url=settings.wordpress_base_url, + auth_header=auth, + image_url=candidate_url, + article_title=title, + source_url=source_url, + image_caption=image_caption, + ) + break # success — stop trying further candidates + except Exception as img_exc: + _logger.warning( + "Bild-Upload fehlgeschlagen, versuche nächste URL: %s — %s", candidate_url, img_exc + ) + + if not featured_media_id and image_candidates: + _logger.warning( + "Alle %d Bild-Kandidaten fehlgeschlagen für Artikel #%s (%s)", + len(image_candidates), article.get("id"), title[:60], + ) + + payload = { + "title": title, + "content": content, + "status": settings.wordpress_default_status, + } + if excerpt: + payload["excerpt"] = excerpt + if featured_media_id: + payload["featured_media"] = featured_media_id + scheduled_at = article.get("scheduled_publish_at") + if scheduled_at: + payload["date"] = scheduled_at # e.g. "2026-03-24T09:00:00" + # Use status "future" so WP schedules auto-publishing at the given date. + # WP ignores date for drafts and shows "Sofort veröffentlichen" instead. + try: + from datetime import datetime as _dt + if _dt.fromisoformat(scheduled_at) > _dt.now(): + payload["status"] = "future" + except Exception: + pass + + wp_post_id = article.get("wp_post_id") + tag_ids = _resolve_wp_tag_ids( + base_url=settings.wordpress_base_url, + auth_header=auth, + tags=_selected_tags_from_meta(article.get("meta_json")), + ) + if tag_ids: + payload["tags"] = tag_ids + + if wp_post_id: + result = _wp_request( + base_url=settings.wordpress_base_url, + auth_header=auth, + method="POST", + endpoint=f"posts/{int(wp_post_id)}", + payload=payload, + ) + else: + result = _wp_request( + base_url=settings.wordpress_base_url, + auth_header=auth, + method="POST", + endpoint="posts", + payload=payload, + ) + + if not isinstance(result, dict): + raise RuntimeError(f"WordPress Antwort im unerwarteten Format: {result}") + post_id = int(result.get("id", 0)) + if post_id <= 0: + raise RuntimeError(f"WordPress Antwort ohne Post-ID: {result}") + post_url = result.get("link") + return post_id, post_url if isinstance(post_url, str) else None + + +def selected_image_exists(article: dict[str, Any]) -> bool: + return _selected_image_url_from_meta(article.get("meta_json")) is not None + + +def delete_wp_post(wp_post_id: int) -> None: + """Permanently delete a WordPress post (moves to trash, then deletes).""" + settings = get_settings() + if not settings.wordpress_base_url or not settings.wordpress_username or not settings.wordpress_app_password: + raise RuntimeError("WordPress Konfiguration fehlt") + auth = _auth_header(settings.wordpress_username, settings.wordpress_app_password) + # force=true skips trash + _wp_request( + base_url=settings.wordpress_base_url, + auth_header=auth, + method="DELETE", + endpoint=f"posts/{wp_post_id}?force=true", + ) + + +def sync_db_from_wordpress() -> dict[str, Any]: + """Sync scheduled_publish_at and wp_post_url in the DB from WordPress. + + WordPress is treated as the source of truth for scheduling. + For each DB article that has a wp_post_id: + - If WP post exists as 'future': update scheduled_publish_at to WP date. + - If WP post exists as 'draft': clear scheduled_publish_at (not yet scheduled). + - If WP post exists as 'publish': mark article as published in DB. + - If WP post is trashed/deleted (404 or trash status): clear wp_post_id, + wp_post_url, and scheduled_publish_at so the article can be re-processed. + Returns a stats dict with counts of each action taken. + """ + from .db import get_conn + + settings = get_settings() + if not settings.wordpress_base_url or not settings.wordpress_username or not settings.wordpress_app_password: + raise RuntimeError("WordPress Konfiguration fehlt") + auth = _auth_header(settings.wordpress_username, settings.wordpress_app_password) + base_url = settings.wordpress_base_url.rstrip("/") + + # Fetch all future + draft + published WP posts in one pass (up to 300 per status) + wp_posts: dict[int, dict] = {} + for status in ("future", "draft", "publish"): + for page in range(1, 4): # max 300 per status + try: + result = _wp_request( + base_url=base_url, + auth_header=auth, + method="GET", + endpoint=f"posts?status={status}&per_page=100&page={page}&_fields=id,date,status,link", + ) + except Exception: + break + if not isinstance(result, list) or not result: + break + for post in result: + try: + wp_posts[int(post["id"])] = post + except Exception: + pass + if len(result) < 100: + break + + # Load all DB articles that have a wp_post_id + with get_conn() as conn: + rows = conn.execute( + """ + SELECT id, wp_post_id, wp_post_url, scheduled_publish_at, status + FROM articles + WHERE wp_post_id IS NOT NULL + AND status NOT IN ('no_image') + ORDER BY id + """ + ).fetchall() + + stats: dict[str, int] = { + "total_db_articles": len(rows), + "wp_posts_found": len(wp_posts), + "slot_updated": 0, + "slot_cleared_draft": 0, + "marked_published": 0, + "wp_reference_cleared": 0, + "already_in_sync": 0, + } + + for row in rows: + article_id = row["id"] + wp_post_id = int(row["wp_post_id"]) + wp_post = wp_posts.get(wp_post_id) + + if wp_post is None: + # Post not found in future/draft/publish — likely trashed or deleted + # Clear wp reference so article can be re-processed if needed + with get_conn() as conn: + conn.execute( + """UPDATE articles + SET wp_post_id = NULL, wp_post_url = NULL, scheduled_publish_at = NULL + WHERE id = ?""", + (article_id,), + ) + stats["wp_reference_cleared"] += 1 + continue + + wp_status = wp_post.get("status", "") + wp_date = wp_post.get("date", "") # local CET datetime, e.g. "2026-05-05T09:00:00" + wp_link = wp_post.get("link") or row["wp_post_url"] + + if wp_status == "publish": + # Already published in WP — mark as published in DB if not already + if row["status"] != "published": + with get_conn() as conn: + conn.execute( + "UPDATE articles SET status = 'published', wp_post_url = ? WHERE id = ?", + (wp_link, article_id), + ) + stats["marked_published"] += 1 + else: + stats["already_in_sync"] += 1 + + elif wp_status == "future": + # Scheduled — sync the date into scheduled_publish_at + current_slot = row["scheduled_publish_at"] or "" + # WP returns e.g. "2026-05-05T09:00:00" — compare ignoring seconds + if current_slot[:16] != wp_date[:16]: + with get_conn() as conn: + conn.execute( + "UPDATE articles SET scheduled_publish_at = ?, wp_post_url = ? WHERE id = ?", + (wp_date, wp_link, article_id), + ) + stats["slot_updated"] += 1 + else: + stats["already_in_sync"] += 1 + + elif wp_status == "draft": + # Draft without a schedule — clear scheduled_publish_at if set + if row["scheduled_publish_at"]: + with get_conn() as conn: + conn.execute( + "UPDATE articles SET scheduled_publish_at = NULL WHERE id = ?", + (article_id,), + ) + stats["slot_cleared_draft"] += 1 + else: + stats["already_in_sync"] += 1 + + return stats diff --git a/backend/app/workflow.py b/backend/app/workflow.py new file mode 100644 index 0000000..83e9b63 --- /dev/null +++ b/backend/app/workflow.py @@ -0,0 +1,39 @@ +from __future__ import annotations + +UI_STATUSES = ("new", "rewrite", "publish", "published", "close", "no_image") + + +def internal_to_ui_status(status: str | None) -> str: + value = (status or "").strip() + if value == "approved": + return "publish" + if value == "error": + return "close" + if value == "review": + return "rewrite" + if value in {"new", "rewrite", "published", "no_image"}: + return value + return value or "new" + + +def ui_to_internal_status(status: str | None) -> str: + value = (status or "").strip() + if value == "publish": + return "approved" + if value == "close": + return "error" + if value in {"new", "rewrite", "published", "no_image"}: + return value + if value in {"approved", "error", "review"}: + return value + return value + + +ALLOWED_UI_TRANSITIONS: dict[str, set[str]] = { + "new": {"rewrite", "close"}, + "rewrite": {"publish", "close"}, + "publish": {"published", "close"}, + "published": {"rewrite", "close"}, + "close": {"rewrite"}, + "no_image": {"rewrite", "close"}, +} diff --git a/backend/data/rss_news.db b/backend/data/rss_news.db new file mode 100644 index 0000000..7929307 Binary files /dev/null and b/backend/data/rss_news.db differ diff --git a/backend/requirements-test.txt b/backend/requirements-test.txt new file mode 100644 index 0000000..cf39f84 --- /dev/null +++ b/backend/requirements-test.txt @@ -0,0 +1,3 @@ +pytest==8.3.5 +pytest-cov==6.0.0 +httpx==0.28.1 diff --git a/backend/requirements.txt b/backend/requirements.txt new file mode 100644 index 0000000..f4ffe61 --- /dev/null +++ b/backend/requirements.txt @@ -0,0 +1,8 @@ +fastapi==0.116.1 +uvicorn[standard]==0.35.0 +itsdangerous==2.2.0 +pydantic-settings==2.10.1 +python-dotenv==1.1.1 +feedparser==6.0.11 +jinja2==3.1.4 +python-multipart==0.0.20 diff --git a/backend/static/admin.css b/backend/static/admin.css new file mode 100644 index 0000000..0b31bb5 --- /dev/null +++ b/backend/static/admin.css @@ -0,0 +1,303 @@ +body { + margin: 0; + font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; + background: #f4f6f8; + color: #1f2937; +} + +.topbar { + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px 28px; + background: #0f172a; + color: #f8fafc; +} + +.container { + padding: 20px 28px 28px 28px; +} + +.login { + max-width: 520px; + margin: 60px auto; +} + +.card { + background: #ffffff; + border-radius: 10px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12); + padding: 16px; + margin-bottom: 16px; +} + +.stats { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 12px; + margin-bottom: 16px; +} + +.stat { + background: #ffffff; + border-radius: 10px; + padding: 12px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12); +} + +.stat .label { + font-size: 12px; + color: #64748b; +} + +.stat .value { + font-size: 24px; + font-weight: 700; +} + +.grid.two { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 16px; +} + +.stack { + display: grid; + gap: 10px; +} + +.row { + display: flex; + gap: 8px; + align-items: center; +} + +.filter-row { + margin-bottom: 10px; +} + +.inline { + display: flex; + gap: 6px; + align-items: center; +} + +table { + width: 100%; + border-collapse: collapse; +} + +th, td { + text-align: left; + padding: 8px; + border-bottom: 1px solid #e5e7eb; + vertical-align: top; +} + +input, select, button, textarea { + padding: 8px; + border-radius: 6px; + border: 1px solid #cbd5e1; + font: inherit; +} + +button { + background: #0ea5e9; + border-color: #0ea5e9; + color: white; + cursor: pointer; +} + +button.secondary { + background: #64748b; + border-color: #64748b; +} + +.badge { + display: inline-block; + padding: 2px 8px; + border-radius: 999px; + background: #e2e8f0; + font-size: 12px; +} + +.badge.ok { + background: #dcfce7; + color: #166534; +} + +.badge.bad { + background: #fee2e2; + color: #991b1b; +} + +.badge.errcat { + margin-bottom: 4px; +} + +.badge.errcat-policy { + background: #fee2e2; + color: #991b1b; +} + +.badge.errcat-auth { + background: #ffedd5; + color: #9a3412; +} + +.badge.errcat-dns { + background: #dbeafe; + color: #1e40af; +} + +.badge.errcat-media { + background: #fef9c3; + color: #854d0e; +} + +.badge.errcat-api { + background: #ede9fe; + color: #5b21b6; +} + +.badge.errcat-unknown { + background: #e2e8f0; + color: #334155; +} + +.alert { + margin-bottom: 12px; + padding: 10px; + border-radius: 8px; + background: #fee2e2; + color: #991b1b; +} + +.flash { + font-weight: 600; +} + +.flash-success { + border-left: 4px solid #10b981; +} + +.flash-error { + border-left: 4px solid #ef4444; +} + +.subtle { + color: #64748b; + font-size: 12px; + margin-top: 4px; +} + +.pre { + white-space: pre-wrap; + line-height: 1.35; + max-height: 220px; + overflow: auto; + background: #f8fafc; + border: 1px solid #e2e8f0; + border-radius: 8px; + padding: 8px; + margin-top: 6px; +} + +.linkbtn { + display: inline-block; + padding: 8px 10px; + border-radius: 6px; + text-decoration: none; + border: 1px solid #cbd5e1; + color: #334155; + background: #f8fafc; +} + +.detail-grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); + gap: 8px 12px; + margin-bottom: 10px; +} + +.detail-item { + background: #f8fafc; + border: 1px solid #e2e8f0; + border-radius: 8px; + padding: 8px; + display: grid; + gap: 4px; +} + +.detail-item .k { + font-size: 12px; + color: #64748b; +} + +.thumb { + width: 72px; + height: 72px; + object-fit: cover; + border-radius: 8px; + border: 1px solid #cbd5e1; + margin-top: 6px; +} + +.image-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); + gap: 10px; +} + +.image-card { + border: 1px solid #e2e8f0; + border-radius: 8px; + padding: 8px; + background: #fff; +} + +.image-card img { + width: 100%; + height: 120px; + object-fit: cover; + border-radius: 6px; + border: 1px solid #e2e8f0; + background: #f8fafc; +} + +.img-failed { + opacity: 0.3; + filter: grayscale(1); +} + +.image-meta { + margin-top: 6px; + display: flex; + gap: 6px; + flex-wrap: wrap; +} + +.image-actions { + margin-top: 8px; + display: flex; + gap: 6px; + flex-wrap: wrap; +} + +.image-selected { + border-color: #10b981; + box-shadow: 0 0 0 1px rgba(16, 185, 129, 0.25); +} + +.image-excluded { + opacity: 0.65; +} + +@media (max-width: 920px) { + .stats { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + .grid.two { + grid-template-columns: 1fr; + } +} diff --git a/backend/templates/admin_article_detail.html b/backend/templates/admin_article_detail.html new file mode 100644 index 0000000..1c16658 --- /dev/null +++ b/backend/templates/admin_article_detail.html @@ -0,0 +1,224 @@ + + + + + + {{ title }} + + + +
    +
    +

    Artikel-Detail #{{ article.id }}

    +

    Angemeldet als {{ user }}

    +
    +
    + Zurück +
    + +
    +
    +
    + +
    + {% if flash_msg %} +
    + {{ flash_msg }} +
    + {% endif %} + +
    +

    {{ article.title }}

    +
    +
    Status{{ article.status_ui }}
    +
    Artikel-Datum{{ article.published_at or "-" }}
    +
    Alter{{ article.days_old if article.days_old is not none else "-" }} Tage
    +
    Relevanz{{ article.relevance }}
    +
    Autor{{ article.author or "-" }}
    +
    Feed{{ feed.name if feed else "-" }}
    +
    Quelle Snapshot{{ article.source_name_snapshot or "-" }}
    +
    Lizenz Snapshot{{ article.source_license_name_snapshot or "-" }}
    +
    Terms Snapshot{{ article.source_terms_url_snapshot or "-" }}
    +
    +

    Quelle: {{ article.source_url }}

    + {% if article.canonical_url %}

    Canonical: {{ article.canonical_url }}

    {% endif %} + {% if article.summary %} +

    Summary: {{ article.summary }}

    + {% endif %} +

    WordPress Post: + {% if article.wp_post_url %} + #{{ article.wp_post_id }} + {% elif article.wp_post_id %} + #{{ article.wp_post_id }} + {% else %} + - + {% endif %} +

    +

    Publish Attempts: {{ article.publish_attempts or 0 }} | Letzter Fehler: {{ article.publish_last_error or "-" }}

    +
    + +
    +

    Checkliste

    + + + + + + {% for c in checklist %} + + + + + + {% endfor %} + +
    KriteriumStatusWert
    {{ c.label }} + {% if c.status == "ok" %} + OK + {% else %} + Fehlt + {% endif %} + {{ c.value }}
    +
    + +
    +

    Extrahierte Daten

    +

    Bilder: {{ article.image_entries|length if article.image_entries else 0 }}

    + {% if article.selected_image_url %} +

    Ausgewähltes Hauptbild: {{ article.selected_image_url }}

    + {% if article.selected_image_proxy_url %} + Ausgewähltes Hauptbild + {% endif %} + {% endif %} + {% if article.image_entries %} + {% if article.image_selection %} +
    + Automatische Bildauswahl (Score + Gründe) +
    Primärbild (Auto): {{ article.image_selection.primary or "-" }}
    +
    Ausgewählt: {{ article.image_selection.selected_count or 0 }} / Kandidaten: {{ article.image_selection.total_candidates or 0 }}
    + {% if article.image_selection.ranked %} + + + + + + {% for r in article.image_selection.ranked %} + + + + + + {% endfor %} + +
    BildScoreGründe
    {{ r.url }}{{ r.score }}{{ r.reasons|join(", ") if r.reasons else "-" }}
    + {% endif %} +
    + {% endif %} +
    + {% for image in article.image_entries %} +
    + + Artikelbild + +
    + {% if image.is_selected %}Ausgewählt{% endif %} + {% if image.is_excluded %}Ausgeblendet{% endif %} + {% if image.is_irrelevant_hint %}evtl. irrelevant{% endif %} +
    +
    +
    + + + +
    + {% if not image.is_excluded %} +
    + + + +
    + {% else %} +
    + + + +
    + {% endif %} +
    + +
    + {% endfor %} +
    + {% endif %} + {% if article.press_contact or article.extraction.press_contact %} +

    Pressekontakt

    +
    {{ article.press_contact or article.extraction.press_contact }}
    + {% endif %} + {% if article.extraction.extraction_error %} +

    Extraktionsfehler: {{ article.extraction.extraction_error }}

    + {% endif %} +
    + +
    +

    Volltext

    +
    {{ article.content_raw or "-" }}
    +
    + +
    +

    Rewrite-Text (editierbar)

    +
    + + +
    + {% if article.meta.generated_tags %} +

    Generierte Tags: {{ article.meta.generated_tags|join("; ") }}

    + {% endif %} +

    Dieser Text wird für den WordPress-Entwurf verwendet, falls vorhanden.

    +
    + +
    +

    Status ändern

    + {% if article.status_ui in ["new", "rewrite"] %} +
    + +
    + {% endif %} + {% if article.status_ui == "published" %} +
    + +
    + {% endif %} +
    + + + +
    +
    + +
    +

    WordPress Publish Queue

    + {% if article.publish_ready %} +

    Publish bereit

    + {% else %} +

    Publish blockiert

    + {% if article.publish_blockers %} +
      + {% for reason in article.publish_blockers %} +
    • {{ reason }}
    • + {% endfor %} +
    + {% endif %} + {% endif %} +

    Voraussetzungen: Status `publish` und Hauptbild gesetzt.

    +
    + + +
    +
    +
    + + diff --git a/backend/templates/admin_article_list.html b/backend/templates/admin_article_list.html new file mode 100644 index 0000000..38bfb22 --- /dev/null +++ b/backend/templates/admin_article_list.html @@ -0,0 +1,221 @@ + + + + + + {{ title }} + + + + +
    +
    +

    Artikelliste

    +

    Angemeldet als {{ user }}

    +
    +
    + Dashboard + Veröffentlichungsplan +
    + +
    +
    +
    + +
    + {% if flash_msg %} +
    + {{ flash_msg }} +
    + {% endif %} + + +
    +
    +
    +
    + + +
    +
    + + +
    +
    + + Reset +
    +
    +
    +

    {{ total }} Artikel gesamt · Seite {{ page }} / {{ total_pages }} · {{ page_size }} pro Seite

    +
    + + +
    + + + + + + + +
    + + + + + + + + + + + + {% for a in articles %} + + + + + + + + {% endfor %} + +
    BildTitel & KurztextStatusDatumWP ID
    + {% if a.thumb_proxy %} + + Vorschau + + + {% else %} +
    🖼
    + {% endif %} +
    + + {% if a.excerpt %} +
    {{ a.excerpt }}
    + {% endif %} + {% if a.feed_name %} +
    📡 {{ a.feed_name }}
    + {% endif %} +
    + {{ a.status }} + + {% if a.scheduled_publish_at %} + 📅 {{ a.scheduled_publish_at[:16] }} + {% elif a.published_at %} + {{ a.published_at[:10] }} + {% else %} + — + {% endif %} + + + + + {% if a.wp_post_url %} + ↗ WP öffnen + {% endif %} +
    +
    +
    + + + +
    + + + + diff --git a/backend/templates/admin_connectivity.html b/backend/templates/admin_connectivity.html new file mode 100644 index 0000000..5fc0392 --- /dev/null +++ b/backend/templates/admin_connectivity.html @@ -0,0 +1,84 @@ + + + + + + {{ title }} + + + +
    +
    +

    Connectivity Check

    +

    Angemeldet als {{ user }}

    +
    +
    + Zurück +
    + +
    +
    +
    + +
    +
    +
    +
    Checks
    +
    {{ checks|length }}
    +
    +
    +
    OK
    +
    {{ ok_count }}
    +
    +
    +
    Fehler
    +
    {{ error_count }}
    +
    +
    +
    Zeitpunkt
    +
    Live
    +
    +
    + +
    +

    Ziele

    +

    Geprüft werden DNS-Auflösung, TCP-Erreichbarkeit und bei URLs ein HTTP-Request.

    +
    + +
    +
    + +
    +

    Ergebnis

    + + + + + + {% for c in checks %} + + + + + + + + + + + {% endfor %} + +
    StatusNameTypZielDNSTCPHTTPDauer
    {% if c.ok %}OK{% else %}Fehler{% endif %}{{ c.label }}{{ c.kind }}{{ c.target }} + {% if c.dns_ok %}OK{% else %}FAIL{% endif %} +
    {{ c.dns_info }}
    +
    + {% if c.tcp_ok %}OK{% else %}FAIL{% endif %} +
    {{ c.tcp_info }}
    +
    + {% if c.http_ok %}OK{% else %}FAIL{% endif %} +
    {{ c.http_info }}
    +
    {{ c.duration_ms }} ms
    +
    +
    + + diff --git a/backend/templates/admin_dashboard.html b/backend/templates/admin_dashboard.html new file mode 100644 index 0000000..0795b96 --- /dev/null +++ b/backend/templates/admin_dashboard.html @@ -0,0 +1,405 @@ + + + + + + {{ title }} + + + +
    +
    +

    rss-news Admin Dashboard

    +

    Angemeldet als {{ user }}

    +
    + +
    + +
    + {% if flash_msg %} +
    + {{ flash_msg }} +
    + {% endif %} + +
    +
    +
    Quellen
    +
    {{ sources|length }}
    +
    +
    +
    Feeds
    +
    {{ feeds|length }}
    +
    +
    +
    Artikel
    +
    {{ articles|length }}
    +
    +
    +
    Runs
    +
    {{ runs|length }}
    +
    +
    + +
    +
    +

    Quelle anlegen

    +
    + + + + + + + +
    +
    + +
    +

    Feed anlegen

    +
    + + + + + +
    +
    +
    + +
    +

    Ingestion starten

    +
    + + +
    +
    + +
    +

    Publisher ausführen

    +
    + + +
    +
    + +
    +

    Rewrite Run (geplante Artikel)

    +

    Verarbeitet alle Artikel im Status rewrite und setzt sie auf publish.

    +
    + + +
    +
    + +
    +

    Quellen + Policy

    + + + + + + {% for s in sources %} + + + + + + + + + {% endfor %} + +
    IDNameRiskLizenzTermsPolicy
    {{ s.id }}{{ s.name }}{{ s.risk_level }}{{ s.license_name or "-" }}{{ s.terms_url or "-" }} + {% if source_policy[s.id] %} + BLOCKED ({{ source_policy[s.id]|length }}) +
    {{ source_policy[s.id]|join(", ") }}
    + {% else %} + OK + {% endif %} +
    +
    + +
    +

    Quellen verwalten

    + + + + + + {% for s in sources %} + {% set source_form_id = 'source-update-' ~ s.id %} + + + + + + + + {% endfor %} + +
    IDNameURLsMetaAktionen
    #{{ s.id }} + + + + + + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +

    Feeds verwalten

    + + + + + + {% for f in feeds %} + {% set feed_form_id = 'feed-update-' ~ f.id %} + + + + + + + + + {% endfor %} + +
    IDNameURLQuelleStatusAktionen
    #{{ f.id }} + + + + + + +
    +
    + +
    +
    + +
    +
    +
    +
    + +
    +

    Artikel (Review)

    +
    + + + + Reset + Export JSON + Export CSV +
    + + + + + + {% for a in articles %} + + + + + + + + + {% endfor %} + +
    IDArtikelStatusDetailsRewriteTransition
    {{ a.id }} + {{ a.title }}
    + Autor: {{ a.author or "-" }}
    + Datum: {{ a.published_at or "-" }} | Alter: {{ a.days_old if a.days_old is not none else "-" }} Tage | Relevanz: {{ a.relevance }}
    + Original öffnen +
    Details anzeigen + {% if a.canonical_url and a.canonical_url != a.source_url %} +
    Canonical öffnen + {% endif %} +
    {{ a.status_ui }} +
    Publish: {{ "bereit" if a.publish_ready else "blockiert" }}
    + {% if not a.publish_ready and a.publish_blockers %} +
    {{ a.publish_blockers|join(", ") }}
    + {% endif %} + {% if a.selected_image_url %} +
    Hauptbild gesetzt
    + Hauptbild + {% endif %} + {% if a.summary %} +
    Summary: {{ a.summary }}
    + {% endif %} + {% if a.generated_tags %} +
    Tags: {{ a.generated_tags|join("; ") }}
    + {% endif %} + {% if a.content_raw %} +
    + Volltext anzeigen +
    {{ a.content_raw }}
    +
    + {% endif %} +
    Bilder: {{ a.extracted_images|length }}
    + {% if a.extracted_images %} +
    + Bild-URLs +
      + {% for img in a.extracted_images %} +
    • {{ img }}
    • + {% endfor %} +
    +
    + {% endif %} + {% if a.press_contact %} +
    + Pressekontakt +
    {{ a.press_contact }}
    +
    + {% endif %} + {% if a.extraction_error %} +
    Extraktionsfehler: {{ a.extraction_error }}
    + {% endif %} +
    + {% if a.status_ui in ["new", "rewrite"] %} +
    + +
    + {% else %} + - + {% endif %} +
    +
    + + {% if allowed_transitions.get(a.status_ui, []) %} + + {% else %} + keine Aktion + {% endif %} +
    + {% if a.status_ui == 'close' %} +
    + +
    + {% endif %} +
    +
    + +
    +

    Runs

    + + + + + + {% for r in runs %} + + + + + + + + {% endfor %} + +
    IDTypStatusStartEnde
    {{ r.id }}{{ r.run_type }}{{ r.status }}{{ r.started_at }}{{ r.finished_at or "-" }}
    +
    + +
    +

    Publish Jobs

    + + + + + + {% for j in publish_jobs %} + + + + + + + + + + {% endfor %} + +
    IDArtikelStatusAttemptsWP PostFehlerHinweis
    {{ j.id }}#{{ j.article_id }} {{ j.article_title or "-" }}{{ j.status }}{{ j.attempts }}/{{ j.max_attempts }} + {% if j.wp_post_url %} + #{{ j.wp_post_id }} + {% elif j.wp_post_id %} + #{{ j.wp_post_id }} + {% else %} + - + {% endif %} + + {% if j.error_message %} + {{ j.error_category }} +
    {{ j.error_message }}
    + {% else %} + - + {% endif %} +
    {{ j.error_hint or "-" }}
    +
    +
    + + diff --git a/backend/templates/admin_login.html b/backend/templates/admin_login.html new file mode 100644 index 0000000..10e55e7 --- /dev/null +++ b/backend/templates/admin_login.html @@ -0,0 +1,27 @@ + + + + + + {{ title }} + + + +
    +

    rss-news Admin

    +

    Bitte anmelden, um das Tool zu verwalten.

    + {% if error %} +
    Login fehlgeschlagen. Bitte pruefen.
    + {% endif %} +
    + + + +
    +
    + + diff --git a/backend/templates/admin_schedule.html b/backend/templates/admin_schedule.html new file mode 100644 index 0000000..4f2513a --- /dev/null +++ b/backend/templates/admin_schedule.html @@ -0,0 +1,143 @@ + + + + + + {{ title }} + + + + +
    +
    +

    rss-news Veröffentlichungsplan

    +

    Angemeldet als {{ user }}

    +
    +
    + Dashboard + Connectivity +
    + +
    +
    +
    + +
    + {% if flash_msg %} +
    + {{ flash_msg }} +
    + {% endif %} + +
    +
    +

    WordPress → DB Synchronisieren

    +

    Liest alle geplanten WP-Beiträge und aktualisiert die Slots in der lokalen DB.
    Nutze dies nach manuellen Änderungen in WordPress.

    +
    +
    + +
    +
    + +
    +

    Slot-Übersicht (nächste 60 Tage)

    +
    + 📅 Belegte Slots gesamt: {{ slots|length }} + 🗄️ Aus Pipeline-DB: {{ slots|selectattr('source', 'eq', 'db')|list|length }} + 🌐 Nur in WordPress: {{ slots|selectattr('source', 'eq', 'wordpress')|list|length }} +
    + + + + + {% for h in hours %} + + {% endfor %} + + + + {% for day in calendar_days %} + {% if day.any_booked %} + + + {% for s in day.slots %} + + {% endfor %} + + {% endif %} + {% endfor %} + +
    Tag{{ "%02d:00 Uhr"|format(h) }}
    {{ day.weekday }} {{ day.date_fmt }} + {% if s.booked %} + {% set info = s.slot %} + {% if info.source == 'db' %} + + DB +
    + {% if info.article_id %} + + {{ (info.article_title or "Artikel")[:50] }}{% if (info.article_title or "")|length > 50 %}…{% endif %} + + {% endif %} +
    Status: {{ info.article_status }} + {% if info.wp_post_url %} +
    WP öffnen + {% endif %} +
    + {% else %} + ⚠️ + WP +
    {{ info.article_title }}
    + {% endif %} + {% else %} + frei + {% endif %} +
    + {% if not slots %} +

    Keine geplanten Beiträge in den nächsten 60 Tagen.

    + {% endif %} +
    + +
    +

    Alle belegten Slots (Liste)

    + + + + + + {% for s in slots %} + + + + + + + + {% endfor %} + +
    Datum/ZeitQuelleArtikelStatusWordPress
    {{ s.formatted }} + {% if s.source == 'db' %}Pipeline-DB + {% else %}WordPress{% endif %} + + {% if s.article_id %} + {{ (s.article_title or "")[:60] }} + {% else %} + {{ s.article_title or "-" }} + {% endif %} + {{ s.article_status or "-" }} + {% if s.wp_post_url %} + Draft öffnen + {% else %}-{% endif %} +
    +
    +
    + + diff --git a/backend/tests/__init__.py b/backend/tests/__init__.py new file mode 100644 index 0000000..46816dd --- /dev/null +++ b/backend/tests/__init__.py @@ -0,0 +1 @@ +"""Tests package.""" diff --git a/backend/tests/test_admin_ui.py b/backend/tests/test_admin_ui.py new file mode 100644 index 0000000..c7b6ebf --- /dev/null +++ b/backend/tests/test_admin_ui.py @@ -0,0 +1,419 @@ +import os +import tempfile +import unittest +from pathlib import Path +from unittest.mock import patch + +from fastapi.testclient import TestClient + +from backend.app import config as config_module +from backend.app.db import init_db +from backend.app.main import app +from backend.app.repositories import ( + ArticleUpsert, + FeedCreate, + SourceCreate, + create_feed, + create_source, + get_article_by_id, + upsert_article, +) + + +class TestAdminUi(unittest.TestCase): + def setUp(self) -> None: + self.tmp_dir = tempfile.TemporaryDirectory() + os.environ["APP_DB_PATH"] = str(Path(self.tmp_dir.name) / "admin_ui.db") + os.environ["APP_ADMIN_USERNAME"] = "admin" + os.environ["APP_ADMIN_PASSWORD"] = "secret" + config_module.get_settings.cache_clear() + init_db() + self.client = TestClient(app) + + def tearDown(self) -> None: + config_module.get_settings.cache_clear() + os.environ.pop("APP_DB_PATH", None) + os.environ.pop("APP_ADMIN_USERNAME", None) + os.environ.pop("APP_ADMIN_PASSWORD", None) + self.tmp_dir.cleanup() + + def test_admin_login_and_dashboard(self) -> None: + login_page = self.client.get("/admin/login") + self.assertEqual(login_page.status_code, 200) + self.assertIn("rss-news Admin", login_page.text) + + login = self.client.post( + "/admin/login", + data={"username": "admin", "password": "secret"}, + follow_redirects=True, + ) + self.assertEqual(login.status_code, 200) + self.assertIn("Admin Dashboard", login.text) + + def test_dashboard_redirects_if_not_logged_in(self) -> None: + res = self.client.get("/admin/dashboard", follow_redirects=False) + self.assertEqual(res.status_code, 303) + self.assertEqual(res.headers.get("location"), "/admin/login") + + def test_create_feed_with_empty_source_id_does_not_error(self) -> None: + self.client.post( + "/admin/login", + data={"username": "admin", "password": "secret"}, + follow_redirects=True, + ) + # empty source_id used to cause validation issues in form parsing + res = self.client.post( + "/admin/feeds/create", + data={"name": "Feed X", "url": "https://example.org/feed.xml", "source_id": ""}, + follow_redirects=False, + ) + self.assertEqual(res.status_code, 303) + self.assertTrue(res.headers.get("location", "").startswith("/admin/dashboard")) + + def test_article_detail_page_renders(self) -> None: + source_id = create_source( + SourceCreate( + name="Test Source", + base_url="https://example.org", + terms_url="https://example.org/terms", + license_name="cc-by", + risk_level="green", + is_enabled=True, + notes=None, + last_reviewed_at="2026-02-18T00:00:00Z", + ) + ) + feed_id = create_feed( + FeedCreate( + name="Test Feed", + url="https://example.org/feed.xml", + source_id=source_id, + is_enabled=True, + ) + ) + article_id = upsert_article( + ArticleUpsert( + feed_id=feed_id, + source_article_id="id-1", + source_hash="hash-1", + title="Titel A", + source_url="https://example.org/a", + canonical_url="https://example.org/a", + published_at=None, + author="Autor A", + summary="Summary A", + content_raw="Volltext A", + content_rewritten=None, + image_urls_json='["https://example.org/img.jpg"]', + press_contact="Kontakt", + source_name_snapshot="Test Source", + source_terms_url_snapshot="https://example.org/terms", + source_license_name_snapshot="cc-by", + legal_checked=False, + legal_checked_at=None, + legal_note=None, + wp_post_id=None, + wp_post_url=None, + publish_attempts=0, + publish_last_error=None, + published_to_wp_at=None, + word_count=2, + status="new", + meta_json='{"extraction":{"images":["https://example.org/img.jpg"],"press_contact":"Kontakt"}}', + ) + ) + + self.client.post( + "/admin/login", + data={"username": "admin", "password": "secret"}, + follow_redirects=True, + ) + res = self.client.get(f"/admin/articles/{article_id}", follow_redirects=True) + self.assertEqual(res.status_code, 200) + self.assertIn("Artikel-Detail", res.text) + self.assertIn("Checkliste", res.text) + + decision = self.client.post( + f"/admin/articles/{article_id}/images/decision", + data={"image_url": "https://example.org/img.jpg", "action": "select"}, + follow_redirects=True, + ) + self.assertEqual(decision.status_code, 200) + self.assertIn("Ausgewähltes Hauptbild", decision.text) + + article = get_article_by_id(article_id) + self.assertIsNotNone(article) + self.assertIn("selected_url", article.get("meta_json", "")) + + def test_manage_source_and_feed(self) -> None: + source_id = create_source( + SourceCreate( + name="Edit Source", + base_url="https://example.org", + terms_url="https://example.org/terms", + license_name="cc-by", + risk_level="yellow", + is_enabled=True, + notes=None, + last_reviewed_at=None, + ) + ) + feed_id = create_feed( + FeedCreate( + name="Edit Feed", + url="https://example.org/feed.xml", + source_id=source_id, + is_enabled=True, + ) + ) + self.client.post("/admin/login", data={"username": "admin", "password": "secret"}, follow_redirects=True) + + update_source_res = self.client.post( + f"/admin/sources/{source_id}/update", + data={ + "name": "Edit Source 2", + "base_url": "https://example.org/new", + "terms_url": "https://example.org/new-terms", + "license_name": "cc0", + "risk_level": "green", + "is_enabled": "1", + "notes": "ok", + "last_reviewed_at": "2026-02-21T12:00:00Z", + }, + follow_redirects=False, + ) + self.assertEqual(update_source_res.status_code, 303) + + update_feed_res = self.client.post( + f"/admin/feeds/{feed_id}/update", + data={ + "name": "Edit Feed 2", + "url": "https://example.org/feed2.xml", + "source_id": str(source_id), + "is_enabled": "0", + }, + follow_redirects=False, + ) + self.assertEqual(update_feed_res.status_code, 303) + + delete_feed_res = self.client.post(f"/admin/feeds/{feed_id}/delete", follow_redirects=False) + self.assertEqual(delete_feed_res.status_code, 303) + delete_source_res = self.client.post(f"/admin/sources/{source_id}/delete", follow_redirects=False) + self.assertEqual(delete_source_res.status_code, 303) + + def test_rewrite_save_and_reopen(self) -> None: + source_id = create_source( + SourceCreate( + name="Test Source", + base_url="https://example.org", + terms_url="https://example.org/terms", + license_name="cc-by", + risk_level="green", + is_enabled=True, + notes=None, + last_reviewed_at="2026-02-18T00:00:00Z", + ) + ) + feed_id = create_feed( + FeedCreate( + name="Test Feed", + url="https://example.org/feed.xml", + source_id=source_id, + is_enabled=True, + ) + ) + article_id = upsert_article( + ArticleUpsert( + feed_id=feed_id, + source_article_id="id-published", + source_hash="hash-published", + title="Titel Published", + source_url="https://example.org/published", + canonical_url="https://example.org/published", + published_at=None, + author="Autor A", + summary="Summary", + content_raw="Raw", + content_rewritten="

    Alt

    ", + image_urls_json=None, + press_contact=None, + source_name_snapshot="Test Source", + source_terms_url_snapshot="https://example.org/terms", + source_license_name_snapshot="cc-by", + legal_checked=True, + legal_checked_at="2026-02-21T10:00:00Z", + legal_note=None, + wp_post_id=123, + wp_post_url="https://example.org/?p=123", + publish_attempts=2, + publish_last_error=None, + published_to_wp_at="2026-02-21T10:10:00Z", + word_count=1, + status="published", + meta_json="{}", + ) + ) + self.client.post("/admin/login", data={"username": "admin", "password": "secret"}, follow_redirects=True) + + save_res = self.client.post( + f"/admin/articles/{article_id}/rewrite-save", + data={"content_rewritten": "

    Neu

    Text

    "}, + follow_redirects=False, + ) + self.assertEqual(save_res.status_code, 303) + + reopen_res = self.client.post(f"/admin/articles/{article_id}/reopen", follow_redirects=False) + self.assertEqual(reopen_res.status_code, 303) + + article = get_article_by_id(article_id) + self.assertIsNotNone(article) + self.assertEqual(article.get("status"), "rewrite") + self.assertIn("Neu", article.get("content_rewritten") or "") + self.assertIsNone(article.get("wp_post_id")) + + @patch("backend.app.admin_ui.generate_article_tags") + @patch("backend.app.admin_ui.rewrite_article_text") + def test_batch_rewrite_run_processes_planned_articles(self, mock_rewrite_text, mock_tags) -> None: + mock_rewrite_text.return_value = "

    Neu

    Text

    " + mock_tags.return_value = ["Rheingas", "Monheim"] + + source_id = create_source( + SourceCreate( + name="Batch Source", + base_url="https://example.org", + terms_url="https://example.org/terms", + license_name="cc-by", + risk_level="green", + is_enabled=True, + notes=None, + last_reviewed_at=None, + ) + ) + feed_id = create_feed( + FeedCreate( + name="Batch Feed", + url="https://example.org/feed.xml", + source_id=source_id, + is_enabled=True, + ) + ) + article_id = upsert_article( + ArticleUpsert( + feed_id=feed_id, + source_article_id="batch-1", + source_hash="batch-hash-1", + title="Batch Titel", + source_url="https://example.org/batch", + canonical_url="https://example.org/batch", + published_at=None, + author="Autor", + summary="Summary", + content_raw="Raw", + content_rewritten=None, + image_urls_json=None, + press_contact=None, + source_name_snapshot="Batch Source", + source_terms_url_snapshot="https://example.org/terms", + source_license_name_snapshot="cc-by", + legal_checked=False, + legal_checked_at=None, + legal_note=None, + wp_post_id=None, + wp_post_url=None, + publish_attempts=0, + publish_last_error=None, + published_to_wp_at=None, + word_count=1, + status="rewrite", + meta_json="{}", + ) + ) + self.client.post("/admin/login", data={"username": "admin", "password": "secret"}, follow_redirects=True) + res = self.client.post("/admin/rewrite/run", data={"max_jobs": "10"}, follow_redirects=False) + self.assertEqual(res.status_code, 303) + article = get_article_by_id(article_id) + self.assertIsNotNone(article) + self.assertEqual(article.get("status"), "approved") + self.assertIn("generated_tags", article.get("meta_json", "")) + + @patch("backend.app.admin_ui.urlopen") + def test_image_proxy_returns_image_data(self, mock_urlopen) -> None: + class _FakeHeaders: + def get(self, key: str, default=None): + if key.lower() == "content-type": + return "image/jpeg" + return default + + class _FakeResponse: + headers = _FakeHeaders() + + def read(self): + return b"\xff\xd8\xff\xd9" + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + return False + + mock_urlopen.return_value = _FakeResponse() + + self.client.post( + "/admin/login", + data={"username": "admin", "password": "secret"}, + follow_redirects=True, + ) + res = self.client.get("/admin/images/proxy?url=https%3A%2F%2Fexample.org%2Fimg.jpg") + self.assertEqual(res.status_code, 200) + self.assertIn("image/jpeg", res.headers.get("content-type", "")) + + @patch("backend.app.admin_ui._run_connectivity_check") + @patch("backend.app.admin_ui._build_connectivity_targets") + def test_connectivity_page_renders(self, mock_targets, mock_check) -> None: + mock_targets.return_value = [ + {"label": "OpenAI API", "kind": "host", "value": "api.openai.com"}, + {"label": "WordPress REST", "kind": "url", "value": "https://example.org/wp-json/wp/v2"}, + ] + mock_check.side_effect = [ + { + "label": "OpenAI API", + "kind": "host", + "target": "api.openai.com", + "dns_ok": True, + "dns_info": "1.2.3.4", + "tcp_ok": True, + "tcp_info": "port 443 erreichbar", + "http_ok": True, + "http_info": "n/a (host-only)", + "duration_ms": 12, + "ok": True, + }, + { + "label": "WordPress REST", + "kind": "url", + "target": "https://example.org/wp-json/wp/v2", + "dns_ok": False, + "dns_info": "Name or service not known", + "tcp_ok": False, + "tcp_info": "-", + "http_ok": False, + "http_info": "-", + "duration_ms": 10, + "ok": False, + }, + ] + + self.client.post( + "/admin/login", + data={"username": "admin", "password": "secret"}, + follow_redirects=True, + ) + res = self.client.get("/admin/connectivity", follow_redirects=True) + self.assertEqual(res.status_code, 200) + self.assertIn("Connectivity Check", res.text) + self.assertIn("OpenAI API", res.text) + self.assertIn("WordPress REST", res.text) + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/tests/test_api_auth.py b/backend/tests/test_api_auth.py new file mode 100644 index 0000000..96fbe85 --- /dev/null +++ b/backend/tests/test_api_auth.py @@ -0,0 +1,144 @@ +import os +import tempfile +import unittest +from pathlib import Path + +from fastapi.testclient import TestClient + +from backend.app import config as config_module +from backend.app.db import init_db +from backend.app.main import app + + +class TestApiAuth(unittest.TestCase): + def setUp(self) -> None: + self.tmp_dir = tempfile.TemporaryDirectory() + os.environ["APP_DB_PATH"] = str(Path(self.tmp_dir.name) / "api.db") + os.environ["APP_ADMIN_USERNAME"] = "admin" + os.environ["APP_ADMIN_PASSWORD"] = "secret" + config_module.get_settings.cache_clear() + init_db() + self.client = TestClient(app) + + def tearDown(self) -> None: + config_module.get_settings.cache_clear() + os.environ.pop("APP_DB_PATH", None) + os.environ.pop("APP_ADMIN_USERNAME", None) + os.environ.pop("APP_ADMIN_PASSWORD", None) + self.tmp_dir.cleanup() + + def test_login_and_protected_endpoint(self) -> None: + r = self.client.post("/auth/login", json={"username": "admin", "password": "secret"}) + self.assertEqual(r.status_code, 200) + + p = self.client.get("/api/protected") + self.assertEqual(p.status_code, 200) + self.assertTrue(p.json().get("ok")) + + def test_protected_requires_auth(self) -> None: + r = self.client.get("/api/protected") + self.assertEqual(r.status_code, 401) + + def test_run_detail_endpoint(self) -> None: + login = self.client.post("/auth/login", json={"username": "admin", "password": "secret"}) + self.assertEqual(login.status_code, 200) + + created = self.client.post("/api/runs", json={"run_type": "ingestion", "status": "running"}) + self.assertEqual(created.status_code, 200) + run_id = created.json()["id"] + + detail = self.client.get(f"/api/runs/{run_id}") + self.assertEqual(detail.status_code, 200) + self.assertEqual(detail.json()["item"]["id"], run_id) + + def test_source_policy_check_endpoint(self) -> None: + login = self.client.post("/auth/login", json={"username": "admin", "password": "secret"}) + self.assertEqual(login.status_code, 200) + + created = self.client.post( + "/api/sources", + json={ + "name": "Policy Source", + "risk_level": "yellow", + "is_enabled": True, + }, + ) + self.assertEqual(created.status_code, 200) + source_id = created.json()["id"] + + check = self.client.get(f"/api/sources/{source_id}/policy-check") + self.assertEqual(check.status_code, 200) + body = check.json() + self.assertFalse(body["allowed"]) + self.assertGreaterEqual(len(body["issues"]), 1) + + def test_articles_export_json_and_csv_contains_relevance(self) -> None: + login = self.client.post("/auth/login", json={"username": "admin", "password": "secret"}) + self.assertEqual(login.status_code, 200) + + source = self.client.post( + "/api/sources", + json={ + "name": "Export Source", + "base_url": "https://example.org", + "terms_url": "https://example.org/terms", + "license_name": "cc-by", + "risk_level": "green", + "is_enabled": True, + "last_reviewed_at": "2026-02-18T00:00:00Z", + }, + ) + self.assertEqual(source.status_code, 200) + source_id = source.json()["id"] + + feed = self.client.post( + "/api/feeds", + json={"name": "Export Feed", "url": "https://example.org/feed.xml", "source_id": source_id, "is_enabled": True}, + ) + self.assertEqual(feed.status_code, 200) + feed_id = feed.json()["id"] + + article = self.client.post( + "/api/articles/upsert", + json={ + "feed_id": feed_id, + "source_article_id": "exp-1", + "source_hash": "exp-hash-1", + "title": "Export Artikel", + "source_url": "https://example.org/article/1", + "canonical_url": "https://example.org/article/1", + "published_at": "2026-02-18T00:00:00Z", + "author": "Autor", + "summary": "Kurz", + "content_raw": "Langtext", + "image_urls_json": "[\"https://example.org/img.jpg\"]", + "press_contact": "Kontakt", + "source_name_snapshot": "Export Source", + "source_terms_url_snapshot": "https://example.org/terms", + "source_license_name_snapshot": "cc-by", + "status": "review", + }, + ) + self.assertEqual(article.status_code, 200) + + export_json = self.client.get("/api/articles/export?format=json") + self.assertEqual(export_json.status_code, 200) + body = export_json.json() + self.assertTrue(body.get("ok")) + self.assertGreaterEqual(body.get("count", 0), 1) + first = body["items"][0] + self.assertIn("published_at", first) + self.assertIn("days_old", first) + self.assertIn("relevance", first) + + export_csv = self.client.get("/api/articles/export?format=csv") + self.assertEqual(export_csv.status_code, 200) + self.assertIn("text/csv", export_csv.headers.get("content-type", "")) + csv_text = export_csv.text + self.assertIn("published_at", csv_text) + self.assertIn("days_old", csv_text) + self.assertIn("relevance", csv_text) + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/tests/test_article_workflow.py b/backend/tests/test_article_workflow.py new file mode 100644 index 0000000..094b595 --- /dev/null +++ b/backend/tests/test_article_workflow.py @@ -0,0 +1,110 @@ +import os +import tempfile +import unittest +from pathlib import Path + +from fastapi.testclient import TestClient +from unittest.mock import patch + +from backend.app import config as config_module +from backend.app.db import init_db +from backend.app.main import app + + +class TestArticleWorkflow(unittest.TestCase): + def setUp(self) -> None: + self.tmp_dir = tempfile.TemporaryDirectory() + os.environ["APP_DB_PATH"] = str(Path(self.tmp_dir.name) / "workflow.db") + os.environ["APP_ADMIN_USERNAME"] = "admin" + os.environ["APP_ADMIN_PASSWORD"] = "secret" + config_module.get_settings.cache_clear() + init_db() + self.client = TestClient(app) + self.client.post("/auth/login", json={"username": "admin", "password": "secret"}) + + def tearDown(self) -> None: + config_module.get_settings.cache_clear() + os.environ.pop("APP_DB_PATH", None) + os.environ.pop("APP_ADMIN_USERNAME", None) + os.environ.pop("APP_ADMIN_PASSWORD", None) + self.tmp_dir.cleanup() + + def _create_article(self) -> int: + source = self.client.post( + "/api/sources", + json={ + "name": "Workflow Source", + "base_url": "https://example.org", + "terms_url": "https://example.org/terms", + "license_name": "cc-by", + "risk_level": "green", + "is_enabled": True, + "last_reviewed_at": "2026-02-18T00:00:00Z", + }, + ) + source_id = source.json()["id"] + + feed = self.client.post( + "/api/feeds", + json={"name": "Workflow Feed", "url": "https://example.org/feed.xml", "source_id": source_id, "is_enabled": True}, + ) + feed_id = feed.json()["id"] + + article = self.client.post( + "/api/articles/upsert", + json={ + "feed_id": feed_id, + "source_article_id": "wf-1", + "source_url": "https://example.org/a1", + "title": "Workflow Artikel", + "summary": "s", + "content_raw": "c", + "status": "new", + }, + ) + return article.json()["id"] + + def test_valid_transition_chain(self) -> None: + article_id = self._create_article() + + t1 = self.client.post(f"/api/articles/{article_id}/transition", json={"target_status": "rewrite"}) + self.assertEqual(t1.status_code, 200) + + t2 = self.client.post(f"/api/articles/{article_id}/transition", json={"target_status": "publish"}) + self.assertEqual(t2.status_code, 200) + + t3 = self.client.post(f"/api/articles/{article_id}/transition", json={"target_status": "published"}) + self.assertEqual(t3.status_code, 200) + + t4 = self.client.post(f"/api/articles/{article_id}/transition", json={"target_status": "rewrite"}) + self.assertEqual(t4.status_code, 200) + + final = self.client.get(f"/api/articles/{article_id}") + self.assertEqual(final.status_code, 200) + self.assertEqual(final.json()["item"]["status"], "rewrite") + self.assertEqual(final.json()["item"]["status_ui"], "rewrite") + + def test_invalid_transition_rejected(self) -> None: + article_id = self._create_article() + bad = self.client.post(f"/api/articles/{article_id}/transition", json={"target_status": "published"}) + self.assertEqual(bad.status_code, 400) + + def test_legacy_review_endpoint_is_gone(self) -> None: + article_id = self._create_article() + bad = self.client.post(f"/api/articles/{article_id}/review", json={"decision": "approve"}) + self.assertEqual(bad.status_code, 410) + + @patch("backend.app.main.rewrite_article_text") + def test_rewrite_run_sets_publish_status(self, mock_rewrite) -> None: + mock_rewrite.return_value = "

    Neu

    Umschreibung

    " + article_id = self._create_article() + self.client.post(f"/api/articles/{article_id}/transition", json={"target_status": "rewrite"}) + r = self.client.post(f"/api/articles/{article_id}/rewrite-run") + self.assertEqual(r.status_code, 200) + self.assertEqual(r.json()["status"], "publish") + final = self.client.get(f"/api/articles/{article_id}") + self.assertEqual(final.json()["item"]["status_ui"], "publish") + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/tests/test_db_repositories.py b/backend/tests/test_db_repositories.py new file mode 100644 index 0000000..91436c6 --- /dev/null +++ b/backend/tests/test_db_repositories.py @@ -0,0 +1,145 @@ +import os +import tempfile +import unittest +from pathlib import Path + +from backend.app import config as config_module +from backend.app.db import init_db +from backend.app.repositories import ( + ArticleUpsert, + FeedCreate, + RunCreate, + SourceCreate, + create_feed, + create_run, + create_source, + finish_run, + list_articles, + list_feeds, + list_runs, + list_sources, + upsert_article, +) + + +class TestSQLiteRepositories(unittest.TestCase): + def setUp(self) -> None: + self.tmp_dir = tempfile.TemporaryDirectory() + self.db_path = str(Path(self.tmp_dir.name) / "test.db") + os.environ["APP_DB_PATH"] = self.db_path + config_module.get_settings.cache_clear() + init_db() + + def tearDown(self) -> None: + config_module.get_settings.cache_clear() + os.environ.pop("APP_DB_PATH", None) + self.tmp_dir.cleanup() + + def test_end_to_end_basic_crud(self) -> None: + source_id = create_source( + SourceCreate( + name="GovData", + base_url="https://data.gov.de", + terms_url="https://www.govdata.de/dl-de/by-2-0", + license_name="dl-de/by-2-0", + risk_level="green", + is_enabled=True, + notes="test source", + last_reviewed_at="2026-02-18T00:00:00Z", + ) + ) + self.assertGreater(source_id, 0) + + feed_id = create_feed( + FeedCreate( + name="GovData RSS", + url="https://example.org/feed.xml", + source_id=source_id, + is_enabled=True, + ) + ) + self.assertGreater(feed_id, 0) + + run_id = create_run(RunCreate(run_type="ingest", status="running", details="start")) + self.assertGreater(run_id, 0) + finish_run(run_id=run_id, status="success", details="ok") + + article_id = upsert_article( + ArticleUpsert( + feed_id=feed_id, + source_article_id="abc-1", + source_hash="hash-abc-1", + title="Beispielartikel", + source_url="https://example.org/articles/1", + canonical_url="https://example.org/articles/1", + published_at="2026-02-18T00:00:00Z", + author="Max Mustermann", + summary="Kurzfassung", + content_raw="Originaltext", + content_rewritten="Umschreibung", + image_urls_json='["https://example.org/img.jpg"]', + press_contact="Pressekontakt X", + source_name_snapshot="GovData", + source_terms_url_snapshot="https://www.govdata.de/dl-de/by-2-0", + source_license_name_snapshot="dl-de/by-2-0", + legal_checked=False, + legal_checked_at=None, + legal_note=None, + wp_post_id=None, + wp_post_url=None, + publish_attempts=0, + publish_last_error=None, + published_to_wp_at=None, + word_count=120, + status="review", + meta_json='{"lang":"de"}', + ) + ) + self.assertGreater(article_id, 0) + + # Upsert with same source_url updates same row + article_id_2 = upsert_article( + ArticleUpsert( + feed_id=feed_id, + source_article_id="abc-1", + source_hash="hash-abc-1", + title="Beispielartikel aktualisiert", + source_url="https://example.org/articles/1", + canonical_url="https://example.org/articles/1", + published_at="2026-02-18T00:00:00Z", + author="Max Mustermann", + summary="Kurzfassung 2", + content_raw="Originaltext 2", + content_rewritten="Umschreibung 2", + image_urls_json='["https://example.org/img2.jpg"]', + press_contact="Pressekontakt Y", + source_name_snapshot="GovData", + source_terms_url_snapshot="https://www.govdata.de/dl-de/by-2-0", + source_license_name_snapshot="dl-de/by-2-0", + legal_checked=True, + legal_checked_at="2026-02-18T00:10:00Z", + legal_note="ok", + wp_post_id=123, + wp_post_url="https://example.org/wp/123", + publish_attempts=1, + publish_last_error=None, + published_to_wp_at="2026-02-18T00:12:00Z", + word_count=140, + status="approved", + meta_json='{"lang":"de","v":2}', + ) + ) + self.assertEqual(article_id, article_id_2) + + self.assertEqual(len(list_sources()), 1) + self.assertEqual(len(list_feeds()), 1) + self.assertEqual(len(list_runs()), 1) + + articles = list_articles() + self.assertEqual(len(articles), 1) + self.assertEqual(articles[0]["title"], "Beispielartikel aktualisiert") + self.assertEqual(articles[0]["status"], "approved") + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/tests/test_ingestion.py b/backend/tests/test_ingestion.py new file mode 100644 index 0000000..82bd2ca --- /dev/null +++ b/backend/tests/test_ingestion.py @@ -0,0 +1,245 @@ +import os +import tempfile +import unittest +from pathlib import Path +from unittest.mock import patch + +from backend.app import config as config_module +from backend.app.db import init_db +from backend.app.ingestion import run_ingestion +from backend.app.repositories import ( + ArticleUpsert, + FeedCreate, + SourceCreate, + create_feed, + create_source, + get_article_by_id, + list_articles, + upsert_article, +) +from backend.app.source_extraction import ExtractedArticle + + +class TestIngestion(unittest.TestCase): + def setUp(self) -> None: + self.tmp_dir = tempfile.TemporaryDirectory() + os.environ["APP_DB_PATH"] = str(Path(self.tmp_dir.name) / "ingestion.db") + config_module.get_settings.cache_clear() + init_db() + + source_id = create_source( + SourceCreate( + name="Test Source", + base_url="https://example.org", + terms_url="https://example.org/terms", + license_name="cc-by", + risk_level="green", + is_enabled=True, + notes=None, + last_reviewed_at="2026-02-18T00:00:00Z", + ) + ) + self.feed_id = create_feed( + FeedCreate( + name="Test Feed", + url="https://example.org/feed.xml", + source_id=source_id, + is_enabled=True, + ) + ) + + def tearDown(self) -> None: + config_module.get_settings.cache_clear() + os.environ.pop("APP_DB_PATH", None) + self.tmp_dir.cleanup() + + @patch("backend.app.ingestion.extract_article") + @patch("backend.app.ingestion.feedparser.parse") + def test_ingestion_deduplicates_by_feed_and_guid(self, mock_parse, mock_extract_article) -> None: + mock_extract_article.return_value = ExtractedArticle( + title="Artikel 1 original", + author="Autorin A", + canonical_url="https://example.org/article/1", + summary="Original Summary", + content_text="Original Volltext", + images=["https://example.org/a.jpg"], + press_contact="Pressekontakt: Team A", + extraction_error=None, + ) + mock_parse.return_value = { + "etag": "etag-1", + "modified": "Tue, 18 Feb 2026 10:00:00 GMT", + "entries": [ + { + "id": "item-1", + "title": "Artikel 1", + "link": "https://example.org/article/1", + "summary": "A", + }, + { + "id": "item-1", + "title": "Artikel 1 aktualisiert", + "link": "https://example.org/article/1-neu", + "summary": "B", + }, + ], + } + + stats = run_ingestion(feed_id=self.feed_id) + self.assertEqual(stats.status, "success") + self.assertEqual(stats.entries_seen, 2) + self.assertEqual(len(list_articles()), 1) + article = list_articles()[0] + self.assertEqual(article["title"], "Artikel 1 original") + self.assertEqual(article["author"], "Autorin A") + self.assertIn("Original Volltext", article["content_raw"] or "") + self.assertIn("Pressekontakt", article["meta_json"] or "") + self.assertIsNotNone(article["image_urls_json"]) + + @patch("backend.app.ingestion.extract_article") + @patch("backend.app.ingestion.feedparser.parse") + def test_ingestion_processes_any_enabled_source(self, mock_parse, mock_extract_article) -> None: + # Ampel/risk-level system removed – all enabled feeds are processed regardless of risk_level + source_id = create_source( + SourceCreate( + name="Any Risk Source", + base_url="https://example.net", + terms_url="https://example.net/terms", + license_name="custom", + risk_level="yellow", + is_enabled=True, + notes=None, + last_reviewed_at="2026-02-18T00:00:00Z", + ) + ) + feed_id = create_feed( + FeedCreate( + name="Any Risk Feed", + url="https://example.net/feed.xml", + source_id=source_id, + is_enabled=True, + ) + ) + + mock_parse.return_value = type("FP", (), {"entries": [], "etag": None, "modified": None})() + mock_extract_article.return_value = type("E", (), { + "title": None, "author": None, "summary": None, "content_text": None, + "canonical_url": None, "images": [], "press_contact": None, + })() + + stats = run_ingestion(feed_id=feed_id) + self.assertEqual(stats.status, "success") + # Feed was processed (feedparser was called), even with yellow risk_level + mock_parse.assert_called_once() + + @patch("backend.app.ingestion.extract_article") + @patch("backend.app.ingestion.feedparser.parse") + def test_ingestion_preserves_existing_work_and_skips_closed(self, mock_parse, mock_extract_article) -> None: + existing_closed_id = upsert_article( + ArticleUpsert( + feed_id=self.feed_id, + source_article_id="closed-1", + source_hash="closed-hash-1", + title="Alt Closed", + source_url="https://example.org/closed-article", + canonical_url="https://example.org/closed-article", + published_at=None, + author="Autor", + summary="Alt", + content_raw="Alt Raw", + content_rewritten="

    Alt Rewrite Closed

    ", + image_urls_json=None, + press_contact="Kontakt Alt", + source_name_snapshot="Test Source", + source_terms_url_snapshot="https://example.org/terms", + source_license_name_snapshot="cc-by", + legal_checked=False, + legal_checked_at=None, + legal_note=None, + wp_post_id=42, + wp_post_url="https://wp.local/?p=42", + publish_attempts=2, + publish_last_error=None, + published_to_wp_at="2026-02-21T12:00:00Z", + word_count=3, + status="error", # UI: close + meta_json='{"generated_tags":["AltTag"]}', + ) + ) + existing_published_id = upsert_article( + ArticleUpsert( + feed_id=self.feed_id, + source_article_id="published-1", + source_hash="published-hash-1", + title="Alt Published", + source_url="https://example.org/published-article", + canonical_url="https://example.org/published-article", + published_at=None, + author="Autor", + summary="Alt", + content_raw="Alt Raw", + content_rewritten="

    Alt Rewrite Published

    ", + image_urls_json=None, + press_contact="Kontakt Alt", + source_name_snapshot="Test Source", + source_terms_url_snapshot="https://example.org/terms", + source_license_name_snapshot="cc-by", + legal_checked=False, + legal_checked_at=None, + legal_note=None, + wp_post_id=77, + wp_post_url="https://wp.local/?p=77", + publish_attempts=3, + publish_last_error=None, + published_to_wp_at="2026-02-21T12:10:00Z", + word_count=3, + status="published", + meta_json='{"generated_tags":["Rheingas"],"image_review":{"selected_url":"https://img.local/1.jpg"}}', + ) + ) + + mock_extract_article.return_value = ExtractedArticle( + title="Neu Titel", + author="Neu Autor", + canonical_url=None, + summary="Neu Summary", + content_text="Neu Volltext", + images=["https://example.org/a.jpg"], + press_contact=None, + extraction_error=None, + ) + mock_parse.return_value = { + "etag": "etag-2", + "modified": "Tue, 18 Feb 2026 11:00:00 GMT", + "entries": [ + { + "id": "closed-1", + "title": "Closed Entry", + "link": "https://example.org/closed-article", + "summary": "X", + }, + { + "id": "published-1", + "title": "Published Entry", + "link": "https://example.org/published-article", + "summary": "Y", + }, + ], + } + + stats = run_ingestion(feed_id=self.feed_id) + self.assertEqual(stats.status, "success") + closed_row = get_article_by_id(existing_closed_id) or {} + self.assertEqual(closed_row["status"], "error") + self.assertIn("Alt Rewrite Closed", closed_row.get("content_rewritten") or "") + self.assertEqual(closed_row.get("wp_post_id"), 42) + + published_row = get_article_by_id(existing_published_id) or {} + self.assertEqual(published_row["status"], "published") + self.assertIn("Alt Rewrite Published", published_row.get("content_rewritten") or "") + self.assertEqual(published_row.get("wp_post_id"), 77) + self.assertIn("generated_tags", published_row.get("meta_json") or "") + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/tests/test_publisher.py b/backend/tests/test_publisher.py new file mode 100644 index 0000000..a32150e --- /dev/null +++ b/backend/tests/test_publisher.py @@ -0,0 +1,112 @@ +import os +import tempfile +import unittest +from pathlib import Path +from unittest.mock import patch + +from fastapi.testclient import TestClient + +from backend.app import config as config_module +from backend.app.db import init_db +from backend.app.main import app + + +class TestPublisher(unittest.TestCase): + def setUp(self) -> None: + self.tmp_dir = tempfile.TemporaryDirectory() + os.environ["APP_DB_PATH"] = str(Path(self.tmp_dir.name) / "publisher.db") + os.environ["APP_ADMIN_USERNAME"] = "admin" + os.environ["APP_ADMIN_PASSWORD"] = "secret" + os.environ["WORDPRESS_BASE_URL"] = "https://example.org" + os.environ["WORDPRESS_USERNAME"] = "wp-user" + os.environ["WORDPRESS_APP_PASSWORD"] = "wp-pass" + config_module.get_settings.cache_clear() + init_db() + self.client = TestClient(app) + self.client.post("/auth/login", json={"username": "admin", "password": "secret"}) + + def tearDown(self) -> None: + config_module.get_settings.cache_clear() + for key in ( + "APP_DB_PATH", + "APP_ADMIN_USERNAME", + "APP_ADMIN_PASSWORD", + "WORDPRESS_BASE_URL", + "WORDPRESS_USERNAME", + "WORDPRESS_APP_PASSWORD", + ): + os.environ.pop(key, None) + self.tmp_dir.cleanup() + + def _create_publishable_article(self) -> int: + source = self.client.post( + "/api/sources", + json={ + "name": "WP Source", + "base_url": "https://example.org", + "terms_url": "https://example.org/terms", + "license_name": "cc-by", + "risk_level": "green", + "is_enabled": True, + "last_reviewed_at": "2026-02-18T00:00:00Z", + }, + ) + source_id = source.json()["id"] + feed = self.client.post( + "/api/feeds", + json={"name": "WP Feed", "url": "https://example.org/feed.xml", "source_id": source_id, "is_enabled": True}, + ) + feed_id = feed.json()["id"] + + article = self.client.post( + "/api/articles/upsert", + json={ + "feed_id": feed_id, + "source_article_id": "pub-1", + "source_hash": "pub-hash-1", + "title": "Publish Artikel", + "source_url": "https://example.org/article/1", + "canonical_url": "https://example.org/article/1", + "published_at": "2026-02-18T00:00:00Z", + "author": "Autor", + "summary": "Kurz", + "content_raw": "Langtext", + "image_urls_json": "[\"https://example.org/img.jpg\"]", + "press_contact": "Kontakt", + "source_name_snapshot": "WP Source", + "source_terms_url_snapshot": "https://example.org/terms", + "source_license_name_snapshot": "cc-by", + "legal_checked": True, + "status": "approved", + "meta_json": "{\"image_review\":{\"selected_url\":\"https://example.org/img.jpg\"}}", + }, + ) + return article.json()["id"] + + @patch("backend.app.publisher.publish_article_draft") + def test_enqueue_and_run_publisher(self, mock_publish) -> None: + mock_publish.return_value = (777, "https://example.org/?p=777") + article_id = self._create_publishable_article() + + enqueue = self.client.post("/api/publisher/enqueue", json={"article_id": article_id, "max_attempts": 3}) + self.assertEqual(enqueue.status_code, 200) + + run = self.client.post("/api/publisher/run", json={"max_jobs": 5}) + self.assertEqual(run.status_code, 200) + stats = run.json()["stats"] + self.assertEqual(stats["success"], 1) + + article = self.client.get(f"/api/articles/{article_id}") + self.assertEqual(article.status_code, 200) + item = article.json()["item"] + self.assertEqual(item["status"], "published") + self.assertEqual(item["wp_post_id"], 777) + self.assertIn("?p=777", item["wp_post_url"] or "") + + jobs = self.client.get("/api/publisher/jobs") + self.assertEqual(jobs.status_code, 200) + self.assertGreaterEqual(len(jobs.json()["items"]), 1) + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/tests/test_relevance.py b/backend/tests/test_relevance.py new file mode 100644 index 0000000..573e312 --- /dev/null +++ b/backend/tests/test_relevance.py @@ -0,0 +1,21 @@ +from datetime import datetime, timezone +import unittest + +from backend.app.relevance import article_age_days, article_relevance + + +class TestRelevance(unittest.TestCase): + def test_article_age_and_relevance(self) -> None: + now = datetime(2026, 2, 18, 12, 0, 0, tzinfo=timezone.utc) + self.assertEqual(article_age_days("2026-02-18T10:00:00Z", now=now), 0) + self.assertEqual(article_relevance("2026-02-18T10:00:00Z", now=now), "hoch") + + self.assertEqual(article_age_days("2026-02-14T12:00:00Z", now=now), 4) + self.assertEqual(article_relevance("2026-02-14T12:00:00Z", now=now), "mittel") + + self.assertEqual(article_relevance("2025-12-01T00:00:00Z", now=now), "alt") + self.assertEqual(article_relevance(None, now=now), "unbekannt") + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/tests/test_source_extraction.py b/backend/tests/test_source_extraction.py new file mode 100644 index 0000000..5cafde7 --- /dev/null +++ b/backend/tests/test_source_extraction.py @@ -0,0 +1,96 @@ +import unittest +from unittest.mock import patch + +from backend.app.source_extraction import extract_article + + +SAMPLE_HTML = """ + + + + + + + + + + + +
    +

    Dies ist der vollstaendige Inhalt des Artikels.

    +

    Weitere relevante Informationen fuer die Meldung.

    +

    Pressekontakt

    +

    Musterfirma GmbH, Kontakt: presse@example.org

    +
    + + +""" + +SAMPLE_HTML_AGENTUR = """ + + + + + + + +
    +

    Inhalt der Meldung.

    +

    Agentur

    +

    Agenturname GmbH

    +

    presse@agentur.example

    +

    Original-Content von Beispiel

    +
    + + +""" + + +class _FakeHeaders: + @staticmethod + def get_content_charset(): + return "utf-8" + + +class _FakeResponse: + headers = _FakeHeaders() + + def __init__(self, body: str): + self._body = body.encode("utf-8") + + def read(self): + return self._body + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + return False + + +class TestSourceExtraction(unittest.TestCase): + @patch("backend.app.source_extraction.urlopen") + def test_extract_article_parses_author_images_and_press_contact(self, mock_urlopen) -> None: + mock_urlopen.return_value = _FakeResponse(SAMPLE_HTML) + + extracted = extract_article("https://www.presseportal.de/pm/118273/6158137") + self.assertEqual(extracted.title, "Demo Meldung von Presseportal") + self.assertEqual(extracted.author, "Max Mustermann") + self.assertEqual(extracted.canonical_url, "https://www.presseportal.de/pm/118273/6158137") + self.assertIn("vollstaendige Inhalt", extracted.content_text or "") + self.assertIn("Kurzbeschreibung", extracted.summary or "") + self.assertIn("https://www.presseportal.de/images/demo.jpg", extracted.images) + self.assertIn("Pressekontakt", extracted.press_contact or "") + self.assertIsNone(extracted.extraction_error) + + @patch("backend.app.source_extraction.urlopen") + def test_extract_article_detects_agentur_block_as_press_contact(self, mock_urlopen) -> None: + mock_urlopen.return_value = _FakeResponse(SAMPLE_HTML_AGENTUR) + extracted = extract_article("https://www.presseportal.de/pm/155103/6210401") + self.assertIn("Agentur", extracted.press_contact or "") + self.assertIn("Agenturname", extracted.press_contact or "") + self.assertIn("presse@agentur.example", extracted.press_contact or "") + + +if __name__ == "__main__": + unittest.main() diff --git a/backend/tests/test_wordpress.py b/backend/tests/test_wordpress.py new file mode 100644 index 0000000..20b0618 --- /dev/null +++ b/backend/tests/test_wordpress.py @@ -0,0 +1,139 @@ +import os +import unittest +from unittest.mock import patch + +from backend.app import config as config_module +from backend.app.wordpress import publish_article_draft + + +class TestWordpressPublish(unittest.TestCase): + def setUp(self) -> None: + os.environ["WORDPRESS_BASE_URL"] = "https://example.org" + os.environ["WORDPRESS_USERNAME"] = "wp-user" + os.environ["WORDPRESS_APP_PASSWORD"] = "wp-pass" + config_module.get_settings.cache_clear() + + def tearDown(self) -> None: + for key in ("WORDPRESS_BASE_URL", "WORDPRESS_USERNAME", "WORDPRESS_APP_PASSWORD"): + os.environ.pop(key, None) + config_module.get_settings.cache_clear() + + @patch("backend.app.wordpress._upload_featured_media") + @patch("backend.app.wordpress._wp_request") + def test_publish_sets_featured_media_when_selected_image_exists(self, mock_wp_request, mock_upload_media) -> None: + mock_upload_media.return_value = 456 + mock_wp_request.return_value = {"id": 321, "link": "https://example.org/?p=321"} + + article = { + "title": "Testartikel", + "content_raw": "Inhalt", + "source_url": "https://example.com/source", + "canonical_url": "https://example.com/source", + "meta_json": '{"image_review":{"selected_url":"https://example.com/image.jpg"}}', + } + post_id, post_url = publish_article_draft(article) + + self.assertEqual(post_id, 321) + self.assertIn("?p=321", post_url or "") + self.assertTrue(mock_upload_media.called) + payload = mock_wp_request.call_args.kwargs["payload"] + self.assertEqual(payload.get("featured_media"), 456) + self.assertIn("", payload.get("content", "")) + self.assertIn("

    Inhalt

    ", payload.get("content", "")) + self.assertNotIn("excerpt", payload) + + @patch("backend.app.wordpress._upload_featured_media") + @patch("backend.app.wordpress._wp_request") + def test_publish_without_selected_image_has_no_featured_media(self, mock_wp_request, mock_upload_media) -> None: + mock_wp_request.return_value = {"id": 654, "link": "https://example.org/?p=654"} + + article = { + "title": "Testartikel", + "content_raw": "Inhalt", + "source_url": "https://example.com/source", + "canonical_url": "https://example.com/source", + "meta_json": "{}", + } + post_id, _ = publish_article_draft(article) + + self.assertEqual(post_id, 654) + self.assertFalse(mock_upload_media.called) + payload = mock_wp_request.call_args.kwargs["payload"] + self.assertNotIn("featured_media", payload) + self.assertIn("

    Inhalt

    ", payload.get("content", "")) + + @patch("backend.app.wordpress._upload_featured_media") + @patch("backend.app.wordpress._wp_request") + def test_publish_strips_feed_header_and_press_contact(self, mock_wp_request, mock_upload_media) -> None: + mock_wp_request.return_value = {"id": 100, "link": "https://example.org/?p=100"} + article = { + "title": "Header Test", + "content_raw": "21.02.2026 10:00\nFirma GmbH\n(ots)\nDas ist der eigentliche Text.\nPressekontakt: Test Person", + "source_url": "https://example.com/source", + "canonical_url": "https://example.com/source", + "meta_json": "{}", + } + publish_article_draft(article) + payload = mock_wp_request.call_args.kwargs["payload"] + content = payload.get("content", "") + self.assertNotIn("Firma GmbH", content) + self.assertNotIn("Pressekontakt", content) + self.assertIn("eigentliche Text", content) + self.assertNotIn("Artikeldetails", content) + + @patch("backend.app.wordpress._upload_featured_media") + @patch("backend.app.wordpress._wp_request") + def test_publish_resolves_and_sets_tags(self, mock_wp_request, mock_upload_media) -> None: + def _fake_wp_request(**kwargs): + endpoint = kwargs.get("endpoint", "") + method = kwargs.get("method", "") + if method == "GET" and endpoint.startswith("tags?search="): + if "Rheingas" in endpoint: + return [{"id": 11, "name": "Rheingas"}] + return [] + if method == "POST" and endpoint == "tags": + name = (kwargs.get("payload") or {}).get("name") + if name == "Gasflasche": + return {"id": 12, "name": "Gasflasche"} + return {"id": 13, "name": str(name)} + if method == "POST" and endpoint == "posts": + return {"id": 900, "link": "https://example.org/?p=900"} + return {} + + mock_wp_request.side_effect = _fake_wp_request + article = { + "title": "Tag Test", + "content_raw": "Inhalt", + "source_url": "https://example.com/source", + "canonical_url": "https://example.com/source", + "meta_json": '{"generated_tags":["Rheingas","Gasflasche"]}', + } + post_id, _ = publish_article_draft(article) + self.assertEqual(post_id, 900) + post_calls = [call for call in mock_wp_request.call_args_list if call.kwargs.get("endpoint") == "posts"] + self.assertEqual(len(post_calls), 1) + payload = post_calls[0].kwargs.get("payload", {}) + self.assertEqual(payload.get("tags"), [11, 12]) + + @patch("backend.app.wordpress._upload_featured_media") + @patch("backend.app.wordpress._wp_request") + def test_publish_converts_html_to_wp_blocks_without_html_block(self, mock_wp_request, mock_upload_media) -> None: + mock_wp_request.return_value = {"id": 111, "link": "https://example.org/?p=111"} + article = { + "title": "Block Test", + "content_rewritten": "

    Überschrift

    Absatz 1

    • A
    • B
    ", + "source_url": "https://example.com/source", + "canonical_url": "https://example.com/source", + "meta_json": "{}", + } + publish_article_draft(article) + payload = mock_wp_request.call_args.kwargs["payload"] + content = payload.get("content", "") + self.assertIn("", content) + self.assertIn("", content) + self.assertNotIn("", content) + + +if __name__ == "__main__": + unittest.main() diff --git a/data/articles.json b/data/articles.json index 325eca3..071aac7 100644 --- a/data/articles.json +++ b/data/articles.json @@ -1,14 +1,14 @@ [ { "id": "Artikel 5924 von camping-news.de", - "title": "Fr\u00fchjahrsaktionen vom Verein WOHNmobil f\u00fcr Klimaschutz", + "title": "Frühjahrsaktionen vom Verein WOHNmobil für Klimaschutz", "date": "Wed, 07 May 2025 00:00:00 +0200", "summary": "In den ersten Wochen des Jahres 2025 schon 6.000 Jungbäume gepflanzt", - "text": "Fr\u00fchjahrsaktionen vom Verein WOHNmobil f\u00fcr Klimaschutz\n\nDer Verein WOHNmobil f\u00fcr Klimaschutz e.V. hat in Teilen Deutschlands insgesamt 6.000 Setzlinge von verschiedenen B\u00e4umen, darunter Hainbuchen, Rotbuchen, Eichen und Wei\u00dftannen, als Teil seiner \"Fr\u00fchjahrs-Tour\" gepflanzt. In Teams von 12 bis 18 Mitgliedern unternahmen sie drei Wochenendtripps im M\u00e4rz und Anfang April nach Jagsthausen, Uchte, Wernigerode und Harkebr\u00fcgger See, um die jungen B\u00e4ume zusammen mit dem \u00f6rtlichen Revierf\u00f6rster zu pflanzen. Zwei der Fl\u00e4chen waren zuvor von Fichten belegt, die Trockenheit, St\u00fcrme und Borkenk\u00e4fer nicht \u00fcberlebt hatten. Bei der anderen Fl\u00e4che wurden die Setzlinge in einen Kiefernbestand gepflanzt, um einen gemischten Wald zu schaffen. Mit diesen neuen Setzlingen hat der Verein nun fast 19.000 B\u00e4ume gespendet und gepflanzt.\n\nDer Verein WOHNmobil f\u00fcr Klimaschutz e.V. f\u00f6rdert auch das umweltfreundliche und -bewusste Camping, indem er \u00f6kologische Wohnmobil-Stellpl\u00e4tze bewertet und auszeichnet. Am 27. M\u00e4rz 2025 hat der Verein das Wohnmobilcamp Sm\u00e5land am Harkebr\u00fcgger See zum \"\u00d6kologischen Wohnmobilstellplatz 2025\" gek\u00fcrt. Der Stellplatz verf\u00fcgt \u00fcber energie- und wassersparende Einrichtungen, eine sorgf\u00e4ltige M\u00fclltrennung und Informationen f\u00fcr die G\u00e4ste \u00fcber umweltschonendes Verhalten. Der Vereinsvorstand, Albert M\u00e4rkl, lobte die Betreiber f\u00fcr ihr Engagement f\u00fcr die Umwelt und das Wohl ihrer G\u00e4ste. Weitere Informationen dazu, wie man Mitglied oder F\u00f6rdermitglied im Verein werden kann, sind auf der Vereins-Website zu finden.", + "text": "Frühjahrsaktionen vom Verein WOHNmobil für Klimaschutz\n\nDer Verein WOHNmobil für Klimaschutz e.V. hat in Teilen Deutschlands insgesamt 6.000 Setzlinge von verschiedenen Bäumen, darunter Hainbuchen, Rotbuchen, Eichen und Weißtannen, als Teil seiner \"Frühjahrs-Tour\" gepflanzt. In Teams von 12 bis 18 Mitgliedern unternahmen sie drei Wochenendtripps im März und Anfang April nach Jagsthausen, Uchte, Wernigerode und Harkebrügger See, um die jungen Bäume zusammen mit dem örtlichen Revierförster zu pflanzen. Zwei der Flächen waren zuvor von Fichten belegt, die Trockenheit, Stürme und Borkenkäfer nicht überlebt hatten. Bei der anderen Fläche wurden die Setzlinge in einen Kiefernbestand gepflanzt, um einen gemischten Wald zu schaffen. Mit diesen neuen Setzlingen hat der Verein nun fast 19.000 Bäume gespendet und gepflanzt.\n\nDer Verein WOHNmobil für Klimaschutz e.V. fördert auch das umweltfreundliche und -bewusste Camping, indem er ökologische Wohnmobil-Stellplätze bewertet und auszeichnet. Am 27. März 2025 hat der Verein das Wohnmobilcamp Småland am Harkebrügger See zum \"Ökologischen Wohnmobilstellplatz 2025\" gekürt. Der Stellplatz verfügt über energie- und wassersparende Einrichtungen, eine sorgfältige Mülltrennung und Informationen für die Gäste über umweltschonendes Verhalten. Der Vereinsvorstand, Albert Märkl, lobte die Betreiber für ihr Engagement für die Umwelt und das Wohl ihrer Gäste. Weitere Informationen dazu, wie man Mitglied oder Fördermitglied im Verein werden kann, sind auf der Vereins-Website zu finden.", "tags": [ "1. Klimaschutz", - "2. B\u00e4ume pflanzen", - "3. \u00d6kologisches Camping" + "2. Bäume pflanzen", + "3. Ökologisches Camping" ], "status": "Online", "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5924", @@ -78,19 +78,20 @@ }, { "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-YimPc01cYtOXjUpCATUqDABw/user-eA31w0vmy3fOrb3G64Ygndsr/img-TNJKFEUCBFmLnSUoZMXBlDdV.png?st=2025-07-08T06%3A32%3A20Z&se=2025-07-08T08%3A32%3A20Z&sp=r&sv=2024-08-04&sr=b&rscd=inline&rsct=image/png&skoid=cc612491-d948-4d2e-9821-2683df3719f5&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-07-07T20%3A25%3A11Z&ske=2025-07-08T20%3A25%3A11Z&sks=b&skv=2024-08-04&sig=62C8D6N0YVYMRpgEhUnTgO9YGITstqAxRa370dT2Aq4%3D", - "alt": "KI-generiertes Titelbild zu: Fr\u00fchjahrsaktionen vom Verein WOHNmobil f\u00fcr Klimaschutz", - "caption": "KI-generiertes Titelbild zu: Fr\u00fchjahrsaktionen vom Verein WOHNmobil f\u00fcr Klimaschutz", - "copyright": "OpenAI DALL\u00b7E", + "alt": "KI-generiertes Titelbild zu: Frühjahrsaktionen vom Verein WOHNmobil für Klimaschutz", + "caption": "KI-generiertes Titelbild zu: Frühjahrsaktionen vom Verein WOHNmobil für Klimaschutz", + "copyright": "OpenAI DALL·E", "copyright_url": "https://openai.com/dall-e" } - ] + ], + "source": "https://www.camping-news.de/rss/" }, { "id": "Artikel 5927 von camping-news.de", "title": "15 Jahre PremiumCamps", "date": "Tue, 24 Jun 2025 00:00:00 +0200", "summary": "Jubiläumstour zum 15-jährigen Bestehen des Qualitätsverbundes", - "text": "Die Kooperation PremiumCamps feiert 2025 ihr 15-j\u00e4hriges Bestehen \u2013 ein Anlass, der geb\u00fchrend gefeiert wurde: mit einer erlebnisreichen Rundreise zu zahlreichen Mitgliedsbetrieben in Deutschland sowie befreundeten Campingpl\u00e4tzen in S\u00fcdtirol, Italien und \u00d6sterreich. Im Mittelpunkt der Jubil\u00e4umstour stand der pers\u00f6nliche Austausch mit Kolleginnen und Kollegen vor Ort. Die Gastgeber empfingen die PremiumCamps-Delegation unter Leitung von Vorstand Dieter L\u00fcbberding herzlich und mit gro\u00dfem Engagement. Eine durchweg harmonische Atmosph\u00e4re pr\u00e4gte die gesamte Reise. Neben Einblicken in den individuellen Charakter der Pl\u00e4tze bot die Tour vielf\u00e4ltige Inspirationen, neue Perspektiven und konkrete Ideen zur Weiterentwicklung. Ziel war es, voneinander zu lernen, gemeinsame Qualit\u00e4tsstandards weiterzuentwickeln und Innovationen aufzugreifen \u2013 ganz im Sinne des PremiumCamps-Mottos: Qualit\u00e4t durch Gemeinschaft. H\u00f6hepunkt der Tour war eine Stippvisite beim Kooperationspartner in S\u00fcdtirol. \u201eWir haben uns auf Messen kennengelernt und tauschen uns seitdem partnerschaftlich \u00fcber die L\u00e4ndergrenzen hinweg aus\u201c, berichtet Dieter L\u00fcbberding, Vorstand der PremiumCamps e.V. PremiumCamps ist eine Kooperation inhabergef\u00fchrter Top-Campingpl\u00e4tze in Deutschland. Seit 15 Jahren steht der Zusammenschluss f\u00fcr h\u00f6chste Qualit\u00e4tsanspr\u00fcche, gelebte Gastfreundschaft und kontinuierliche Weiterentwicklung. Der regelm\u00e4\u00dfige vertrauensvolle Austausch untereinander ist dabei ein zentrales Element. G\u00e4ste d\u00fcrfen sich auf individuell gef\u00fchrte Pl\u00e4tze mit erstklassiger Ausstattung, pers\u00f6nlichem Service und besonderem Ambiente freuen. Die PremiumCamps im \u00dcberblick: \u2022 Ferien-Camp B\u00f6rgerende , Ostsee \u2022 Naturcamping Spitzenort , Holsteinische Schweiz \u2022 Campingplatz \"Zur Perle\" , Nordsee \u2022 Ferienpark Seehof , Schweriner See \u2022 Camping- und Wohnmobilpark Kamerun , Waren/M\u00fcritz \u2022 R\u00f6ders' Park - Premium Camping , L\u00fcneburger Heide \u2022 Ihr k\u00f6niglicher Campingpark Sanssouci , Berlin/Potsdam \u2022 Campingpark Kerstgenshof , Niederrhein \u2022 Camping- und Freizeitpark LuxOase , Dresden/S\u00e4chs. Schweiz \u2022 Campingplatz Auenland , Lahntal \u2022 Camping Holmernhof , Bad F\u00fcssing \u2022 Camping Schwanenplatz , Chiemgau \u2022 Camping Wirthshof , Bodensee \u2022 Kur- und Feriencamping Dreiquellenbad , Bad Griesbach, Niederbayern \u2022 Camping-Resort Allweglehen , Berchtesgaden, Oberbayern \u2022 Insel-Camp , Fehmarn \u2022 Spreewald-Natur-Camping \u201eAm See\u201c , L\u00fcbbenau/Spreewald \u2022 Camping Harfenm\u00fchle , EdelSteinLand / Hunsr\u00fcck \u2022 Ferienparadies Schwarzw\u00e4lder Hof , Seelbach Mehr auf www.premiumcamps.de", + "text": "Die Kooperation PremiumCamps feiert 2025 ihr 15-jähriges Bestehen – ein Anlass, der gebührend gefeiert wurde: mit einer erlebnisreichen Rundreise zu zahlreichen Mitgliedsbetrieben in Deutschland sowie befreundeten Campingplätzen in Südtirol, Italien und Österreich. Im Mittelpunkt der Jubiläumstour stand der persönliche Austausch mit Kolleginnen und Kollegen vor Ort. Die Gastgeber empfingen die PremiumCamps-Delegation unter Leitung von Vorstand Dieter Lübberding herzlich und mit großem Engagement. Eine durchweg harmonische Atmosphäre prägte die gesamte Reise. Neben Einblicken in den individuellen Charakter der Plätze bot die Tour vielfältige Inspirationen, neue Perspektiven und konkrete Ideen zur Weiterentwicklung. Ziel war es, voneinander zu lernen, gemeinsame Qualitätsstandards weiterzuentwickeln und Innovationen aufzugreifen – ganz im Sinne des PremiumCamps-Mottos: Qualität durch Gemeinschaft. Höhepunkt der Tour war eine Stippvisite beim Kooperationspartner in Südtirol. „Wir haben uns auf Messen kennengelernt und tauschen uns seitdem partnerschaftlich über die Ländergrenzen hinweg aus“, berichtet Dieter Lübberding, Vorstand der PremiumCamps e.V. PremiumCamps ist eine Kooperation inhabergeführter Top-Campingplätze in Deutschland. Seit 15 Jahren steht der Zusammenschluss für höchste Qualitätsansprüche, gelebte Gastfreundschaft und kontinuierliche Weiterentwicklung. Der regelmäßige vertrauensvolle Austausch untereinander ist dabei ein zentrales Element. Gäste dürfen sich auf individuell geführte Plätze mit erstklassiger Ausstattung, persönlichem Service und besonderem Ambiente freuen. Die PremiumCamps im Überblick: • Ferien-Camp Börgerende , Ostsee • Naturcamping Spitzenort , Holsteinische Schweiz • Campingplatz \"Zur Perle\" , Nordsee • Ferienpark Seehof , Schweriner See • Camping- und Wohnmobilpark Kamerun , Waren/Müritz • Röders' Park - Premium Camping , Lüneburger Heide • Ihr königlicher Campingpark Sanssouci , Berlin/Potsdam • Campingpark Kerstgenshof , Niederrhein • Camping- und Freizeitpark LuxOase , Dresden/Sächs. Schweiz • Campingplatz Auenland , Lahntal • Camping Holmernhof , Bad Füssing • Camping Schwanenplatz , Chiemgau • Camping Wirthshof , Bodensee • Kur- und Feriencamping Dreiquellenbad , Bad Griesbach, Niederbayern • Camping-Resort Allweglehen , Berchtesgaden, Oberbayern • Insel-Camp , Fehmarn • Spreewald-Natur-Camping „Am See“ , Lübbenau/Spreewald • Camping Harfenmühle , EdelSteinLand / Hunsrück • Ferienparadies Schwarzwälder Hof , Seelbach Mehr auf www.premiumcamps.de", "tags": [], "status": "Online", "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5927", @@ -165,16 +166,17 @@ "copyright": "Unbekannt", "copyright_url": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5927" } - ] + ], + "source": "https://www.camping-news.de/rss/" }, { "id": "Artikel 5928 von camping-news.de", "title": "Der neue Eriba Feeling und Novaline", "date": "Fri, 20 Jun 2025 00:00:00 +0200", "summary": "Zwei starke Charaktere für die Caravaning-Saison", - "text": "Zwei Modelle, zwei Konzepte \u2013 und ein gemeinsamer Anspruch: Mit dem neuen Eriba Feeling und dem Eriba Novaline stellt Eriba zwei Neuheiten vor, die zukunftsf\u00e4higes, flexibles Reisen erm\u00f6glichen. Auf diesem gemeinsamen Weg bieten die beiden Neuheiten Antworten auf unterschiedliche Bed\u00fcrfnisse. \u201eMit dem neuen Eriba Feeling und Eriba Novaline haben wir eine neue Baureihe entwickelt, die in jeder Hinsicht neu durchdacht ist. Neben neuen Grundrissen und dem f\u00fcr Eriba typischen au\u00dfergew\u00f6hnlichen Design haben wir auch im Bereich der Funktionalit\u00e4t neue Ma\u00dfst\u00e4be gesetzt. Selbst in sehr kompakten Grundrissen finden sich Betten mit 2,10 m L\u00e4nge wieder. Hier hat das Entwicklungsteam einen erstklassigen Job gemacht\u201c, sagt Matthias Binder, Markenleitung bei Eriba. Eriba Feeling \u2013 f\u00fcr alle, die mehr mitnehmen wollen Der neue Eriba Feeling ist die perfekte Wahl f\u00fcr alle, die auf Reisen maximale Flexibilit\u00e4t und Raumkomfort suchen. Sein serienm\u00e4\u00dfiges Hubdach erm\u00f6glicht eine geringe Gesamth\u00f6he f\u00fcr bessere Aerodynamik und entspanntes Fahren, sorgt aber gleichzeitig f\u00fcr volle Stehh\u00f6he im Inneren. Wer mehr Platz zum Schlafen ben\u00f6tigt, kann den Feeling mit einem optionalen Schlafdach erweitern. Je nach Grundriss finden bis zu f\u00fcnf Personen Platz. Die intelligente Raumgestaltung kombiniert cleveren Stauraum mit multifunktionalen Sitzgruppen und durchdachten Details: Ein leistungsstarker Kompressork\u00fchlschrank, eine Eingangst\u00fcr mit integrierter Hakenleiste und Multifunktionsschienen sowie eine dimmbare, magnetisch befestigte Multifunktionsleuchte schaffen vielseitige Nutzungsm\u00f6glichkeiten und Komfort auf h\u00f6chstem Niveau. Der Eriba Feeling ist in Deutschland ab einem Grundpreis von 27.990 Euro erh\u00e4ltlich. Eriba Novaline \u2013 gro\u00dfz\u00fcgig, elegant und komfortabel Reisekomfort hat einen neuen Namen: Eriba Novaline. Frische Designs, durchdachte Grundrisse und eine Ausstattung auf h\u00f6chstem Niveau heben das Caravaning-Erlebnis auf die n\u00e4chste Stufe. Die durchg\u00e4ngige Stehh\u00f6he von 198 Zentimetern sorgt f\u00fcr ein offenes Raumgef\u00fchl, das in Kombination mit cleveren Grundrissen, bis zu f\u00fcnf Schlafpl\u00e4tzen und eleganten Sitzgruppen \u00fcberzeugt. Wer sein Reisevergn\u00fcgen noch weiter steigern m\u00f6chte, erg\u00e4nzt sein Modell um optionale Features wie eine Dachklimaanlage, ein hagelresistentes GFK-Dach oder ein voll integriertes Entertainmentsystem mit 22-Zoll-TV. Der Eriba Novaline ist in Deutschland ab einem Grundpreis von 29.490 Euro verf\u00fcgbar. Markentypisches Design au\u00dfen, wohnliches Ambiente innen Beide Modelle folgen der neuen Designsprache von Eriba: Klare Linien, moderne LED-Heckleuchten mit angedeutetem Bridge-Light und Glattblech in Carrara White oder optional Crystal Silver pr\u00e4gen das Exterieur. Im Inneren erwartet Reisende ein wohnliches Ambiente, das Funktion und Design vereint: Vier Stoffwelten \u2013 Seattle Stone, Asmara Cinnamon, Treviso Lake und Lulea Leaf \u2013 sowie das neue M\u00f6beldekor Biarritz in Holzoptik schaffen ein harmonisches Raumgef\u00fchl. Abgerundet wird das Interieur durch Marmor- und Betonoptiken in K\u00fcche und Bad, mattschwarze Armaturen und stoffbezogene Seitenw\u00e4nde. Die indirekt beleuchteten Dachstauschr\u00e4nke unterstreichen den hohen Anspruch an \u00c4sthetik und Wohnlichkeit. Digital und autark: Technik, die mitdenkt Sowohl der Eriba Feeling als auch der Eriba Novaline bieten zahlreiche technologische Highlights, die das Reisen entspannter machen, und lassen sich auf Wunsch mit digitalen und autarken Features ausstatten. Die serienm\u00e4\u00dfig integrierte Eriba Connect App erm\u00f6glicht eine intuitive \u00dcberwachung von Wasserstand und Batteriestatus via Smartphone. Wer unabh\u00e4ngig reisen m\u00f6chte, kann zwischen verschiedenen Autarkiepaketen mit Lithium- oder AGM-Batterie w\u00e4hlen. Serienm\u00e4\u00dfig sorgt die Truma Vario Heat Heizung mit digitalem Bedienpanel f\u00fcr wohlige W\u00e4rme an k\u00fchleren Tagen. Beide Modellreihen sind ab Juli 2025 im Handel verf\u00fcgbar. Mehr Infos auf www.eriba.com .", + "text": "Zwei Modelle, zwei Konzepte – und ein gemeinsamer Anspruch: Mit dem neuen Eriba Feeling und dem Eriba Novaline stellt Eriba zwei Neuheiten vor, die zukunftsfähiges, flexibles Reisen ermöglichen. Auf diesem gemeinsamen Weg bieten die beiden Neuheiten Antworten auf unterschiedliche Bedürfnisse. „Mit dem neuen Eriba Feeling und Eriba Novaline haben wir eine neue Baureihe entwickelt, die in jeder Hinsicht neu durchdacht ist. Neben neuen Grundrissen und dem für Eriba typischen außergewöhnlichen Design haben wir auch im Bereich der Funktionalität neue Maßstäbe gesetzt. Selbst in sehr kompakten Grundrissen finden sich Betten mit 2,10 m Länge wieder. Hier hat das Entwicklungsteam einen erstklassigen Job gemacht“, sagt Matthias Binder, Markenleitung bei Eriba. Eriba Feeling – für alle, die mehr mitnehmen wollen Der neue Eriba Feeling ist die perfekte Wahl für alle, die auf Reisen maximale Flexibilität und Raumkomfort suchen. Sein serienmäßiges Hubdach ermöglicht eine geringe Gesamthöhe für bessere Aerodynamik und entspanntes Fahren, sorgt aber gleichzeitig für volle Stehhöhe im Inneren. Wer mehr Platz zum Schlafen benötigt, kann den Feeling mit einem optionalen Schlafdach erweitern. Je nach Grundriss finden bis zu fünf Personen Platz. Die intelligente Raumgestaltung kombiniert cleveren Stauraum mit multifunktionalen Sitzgruppen und durchdachten Details: Ein leistungsstarker Kompressorkühlschrank, eine Eingangstür mit integrierter Hakenleiste und Multifunktionsschienen sowie eine dimmbare, magnetisch befestigte Multifunktionsleuchte schaffen vielseitige Nutzungsmöglichkeiten und Komfort auf höchstem Niveau. Der Eriba Feeling ist in Deutschland ab einem Grundpreis von 27.990 Euro erhältlich. Eriba Novaline – großzügig, elegant und komfortabel Reisekomfort hat einen neuen Namen: Eriba Novaline. Frische Designs, durchdachte Grundrisse und eine Ausstattung auf höchstem Niveau heben das Caravaning-Erlebnis auf die nächste Stufe. Die durchgängige Stehhöhe von 198 Zentimetern sorgt für ein offenes Raumgefühl, das in Kombination mit cleveren Grundrissen, bis zu fünf Schlafplätzen und eleganten Sitzgruppen überzeugt. Wer sein Reisevergnügen noch weiter steigern möchte, ergänzt sein Modell um optionale Features wie eine Dachklimaanlage, ein hagelresistentes GFK-Dach oder ein voll integriertes Entertainmentsystem mit 22-Zoll-TV. Der Eriba Novaline ist in Deutschland ab einem Grundpreis von 29.490 Euro verfügbar. Markentypisches Design außen, wohnliches Ambiente innen Beide Modelle folgen der neuen Designsprache von Eriba: Klare Linien, moderne LED-Heckleuchten mit angedeutetem Bridge-Light und Glattblech in Carrara White oder optional Crystal Silver prägen das Exterieur. Im Inneren erwartet Reisende ein wohnliches Ambiente, das Funktion und Design vereint: Vier Stoffwelten – Seattle Stone, Asmara Cinnamon, Treviso Lake und Lulea Leaf – sowie das neue Möbeldekor Biarritz in Holzoptik schaffen ein harmonisches Raumgefühl. Abgerundet wird das Interieur durch Marmor- und Betonoptiken in Küche und Bad, mattschwarze Armaturen und stoffbezogene Seitenwände. Die indirekt beleuchteten Dachstauschränke unterstreichen den hohen Anspruch an Ästhetik und Wohnlichkeit. Digital und autark: Technik, die mitdenkt Sowohl der Eriba Feeling als auch der Eriba Novaline bieten zahlreiche technologische Highlights, die das Reisen entspannter machen, und lassen sich auf Wunsch mit digitalen und autarken Features ausstatten. Die serienmäßig integrierte Eriba Connect App ermöglicht eine intuitive Überwachung von Wasserstand und Batteriestatus via Smartphone. Wer unabhängig reisen möchte, kann zwischen verschiedenen Autarkiepaketen mit Lithium- oder AGM-Batterie wählen. Serienmäßig sorgt die Truma Vario Heat Heizung mit digitalem Bedienpanel für wohlige Wärme an kühleren Tagen. Beide Modellreihen sind ab Juli 2025 im Handel verfügbar. Mehr Infos auf www.eriba.com .", "tags": [], - "status": "On Hold", + "status": "Trash", "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5928", "images": [ { @@ -247,18 +249,19 @@ "copyright": "Unbekannt", "copyright_url": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5928" } - ] + ], + "source": "https://www.camping-news.de/rss/" }, { "id": "Artikel 5929 von camping-news.de", "title": "Den eigenen Verbrauchszahlen auf der Spur", "date": "Thu, 05 Jun 2025 00:00:00 +0200", "summary": "Campingplatz Kirchzarten erhält EU Ecolabel", - "text": "Den eigenen Verbrauchszahlen auf der Spur\n\nDer Campingplatz Kirchzarten wird vom Inhaber Jens Ziegler nachhaltig betrieben. Er strebt das Europ\u00e4ische Umweltzeichen EU Ecolabel an und hat daf\u00fcr verschiedene \u00c4nderungen am Campingplatz vorgenommen. \n\nZiegler hat den Wasserdurchfluss auf seinem Platz reduziert, um den Verbrauch zu verringern. Er hat alle Armaturen wie Brausek\u00f6pfe und Wasserh\u00e4hne gegen wassersparende Modelle ausgetauscht. Dar\u00fcber hinaus plant Ziegler, zwei Regenwasserzisternen zu bauen, um die Bew\u00e4sserung nicht mehr mit Trinkwasser durchf\u00fchren zu m\u00fcssen.\n\nDer Einsatz von Pestiziden auf dem Campingplatz Kirchzarten ist nicht erlaubt. Stattdessen konzentriert sich Ziegler auf einheimische Pflanzen und Str\u00e4ucher sowie bienenfreundliche Blumenwiesen. Er plant au\u00dferdem, bestimmte Bereiche des Campingplatzes in lebendige Hummel-Pl\u00e4tze zu verwandeln. \n\nDar\u00fcber hinaus achtet Ziegler darauf, dass die Beleuchtung in den Geb\u00e4uden auf umweltfreundliche LED-Lichter umgestellt ist und dass die Reinigungssets in umweltfreundlichen Papierkartons anstatt in Plastik verpackt sind. Zudem halbierte die digitale Rezeption den Papierverbrauch und verbessert die Effizienz des Personals. \n\nDie Heizanlage auf dem Campingplatz wurde durch zwei W\u00e4rmepumpen ersetzt, die den alten Gaskessel ersetzen. Ziegler betreibt au\u00dferdem eine eigene Photovoltaikanlage, die etwa 12% des Strombedarfs deckt und plant, Speicher f\u00fcr den eigenen Sonnenstrom zu installieren. \n\nCamping Kirchzarten ist seit langem Mitglied der Organisation ECOCAMPING, was Ziegler half, viele der Kriterien f\u00fcr das EU Ecolabel zu erf\u00fcllen. Durch seine nachhaltigen Bem\u00fchungen wurde Camping Kirchzarten zu einem der attraktivsten Campingpl\u00e4tze in Europa.", + "text": "Den eigenen Verbrauchszahlen auf der Spur\n\nDer Campingplatz Kirchzarten wird vom Inhaber Jens Ziegler nachhaltig betrieben. Er strebt das Europäische Umweltzeichen EU Ecolabel an und hat dafür verschiedene Änderungen am Campingplatz vorgenommen. \n\nZiegler hat den Wasserdurchfluss auf seinem Platz reduziert, um den Verbrauch zu verringern. Er hat alle Armaturen wie Brauseköpfe und Wasserhähne gegen wassersparende Modelle ausgetauscht. Darüber hinaus plant Ziegler, zwei Regenwasserzisternen zu bauen, um die Bewässerung nicht mehr mit Trinkwasser durchführen zu müssen.\n\nDer Einsatz von Pestiziden auf dem Campingplatz Kirchzarten ist nicht erlaubt. Stattdessen konzentriert sich Ziegler auf einheimische Pflanzen und Sträucher sowie bienenfreundliche Blumenwiesen. Er plant außerdem, bestimmte Bereiche des Campingplatzes in lebendige Hummel-Plätze zu verwandeln. \n\nDarüber hinaus achtet Ziegler darauf, dass die Beleuchtung in den Gebäuden auf umweltfreundliche LED-Lichter umgestellt ist und dass die Reinigungssets in umweltfreundlichen Papierkartons anstatt in Plastik verpackt sind. Zudem halbierte die digitale Rezeption den Papierverbrauch und verbessert die Effizienz des Personals. \n\nDie Heizanlage auf dem Campingplatz wurde durch zwei Wärmepumpen ersetzt, die den alten Gaskessel ersetzen. Ziegler betreibt außerdem eine eigene Photovoltaikanlage, die etwa 12% des Strombedarfs deckt und plant, Speicher für den eigenen Sonnenstrom zu installieren. \n\nCamping Kirchzarten ist seit langem Mitglied der Organisation ECOCAMPING, was Ziegler half, viele der Kriterien für das EU Ecolabel zu erfüllen. Durch seine nachhaltigen Bemühungen wurde Camping Kirchzarten zu einem der attraktivsten Campingplätze in Europa.", "tags": [ "Nachhaltiges Camping", "EU Ecolabel", - "Umweltfreundliche Ma\u00dfnahmen" + "Umweltfreundliche Maßnahmen" ], "status": "Online", "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5929", @@ -386,17 +389,18 @@ "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-YimPc01cYtOXjUpCATUqDABw/user-eA31w0vmy3fOrb3G64Ygndsr/img-w5yMQWBqUD40hBBdASWHRCGl.png?st=2025-07-08T06%3A51%3A24Z&se=2025-07-08T08%3A51%3A24Z&sp=r&sv=2024-08-04&sr=b&rscd=inline&rsct=image/png&skoid=cc612491-d948-4d2e-9821-2683df3719f5&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-07-07T20%3A13%3A47Z&ske=2025-07-08T20%3A13%3A47Z&sks=b&skv=2024-08-04&sig=8r2oI6by0IXMpsxHTc9VK/2fFJOzdxPwGoXFiiA8Eiw%3D", "alt": "KI-generiertes Titelbild zu: Den eigenen Verbrauchszahlen auf der Spur", "caption": "KI-generiertes Titelbild zu: Den eigenen Verbrauchszahlen auf der Spur", - "copyright": "OpenAI DALL\u00b7E", + "copyright": "OpenAI DALL·E", "copyright_url": "https://openai.com/dall-e" } - ] + ], + "source": "https://www.camping-news.de/rss/" }, { "id": "Artikel 5925 von camping-news.de", - "title": "Abenteuer f\u00fcr die Kleinen, Entspannung f\u00fcr\ndie Gro\u00dfen", + "title": "Abenteuer für die Kleinen, Entspannung für\ndie Großen", "date": "Wed, 14 May 2025 00:00:00 +0200", "summary": "Ferienparadies Schwarzwälder Hof setzt auf Wohlfühlmodus", - "text": "Ein fantasievoller Abenteuerspielplatz, ein stilvoller Loungebereich zum Entspannen sowie ein umfangreiches Technik-Update sorgt f\u00fcr weiteren Komfort und Erlebnisqualit\u00e4t auf der beliebten Campinganlage im Herzen des mittleren Schwarzwaldes. Wo Kinderherzen Purzelb\u00e4ume schlagen Willkommen im Abenteuer. Ein zentrales Highlight der Neuerungen ist der komplett renovierte Abenteuerspielplatz, der mit naturbelassenem Holz und kreativen Kletterelementen zu Abenteuer, Spiel und Action einl\u00e4dt. Kinder k\u00f6nnen hier Seilbr\u00fccken \u00fcberqueren, T\u00fcrme erklimmen und mutig in luftigen H\u00f6hen balancieren. W\u00e4hrend die Kleinen mit leuchtenden Augen ihr eigenes Baumhaus-Abenteuer erleben, genie\u00dfen Eltern entspannte Momente und das Gl\u00fcck ihrer mutigen Kids bei Bewegung, Kreativit\u00e4t und Naturverbundenheit. F\u00fcr\u00a0alle eine unvergessliche Familienzeit inmitten der Natur. Symbiose aus Erholung und Genuss Einladung zum Chillen. Ein Ort zum Ankommen ist der ebenfalls neu und liebevoll gestaltete Loungebereich vor dem Restaurant, der einen mit seinen warmen Holzw\u00e4nden aus massiven Rundh\u00f6lzern, der sanften Beleuchtung und gem\u00fctlichen Sesseln mit einer nat\u00fcrlichen Geborgenheit umringt und somit zum gem\u00fctlichen Verweilen einl\u00e4dt. Die ged\u00e4mpfte Beleuchtung, die aus stilvollen, von der Decke herab schwebenden Gl\u00fchbirnen erzeugt wird, zaubert in seinem sanftgoldenen Licht eine behagliche Atmosph\u00e4re. Ob bei einer Tasse Kaffee am Nachmittag oder einem belebenden Aperitif am Abend, der stilvolle R\u00fcckzugsort bietet Raum f\u00fcr Ruhe, Gespr\u00e4che oder entspanntes Chillen. Dies ganz besonders in den Abendstunden zum Ausklang eines erlebnisreichen Tages und zum gem\u00fctlichen Beisammensein mit Freunden oder Familie. Die bequemen Sessel und urspr\u00fcnglichen kleinen Holztische untermalen die rustikal, moderne Nat\u00fcrlichkeit. Technik auf dem neuesten Stand Gut versorgt die Freiheit in der Natur genie\u00dfen. Auch auf technischer Seite wurde ein weiterer Meilenstein auf dem beliebten Ferien-Resort gesetzt. Alle Stellpl\u00e4tze haben nun neue eigene Stroms\u00e4ulen bekommen, die einen integriertem \u00dcberspannungsschutz, eine direkt selbst einschaltbare Sicherung sowie eine moderne LED-Platzbeleuchtung bieten. So kann sich ab sofort jeder einer zuverl\u00e4ssigen Stromversorgung sicher sein. Ein besonderes Plus: Wasser- und Abwasseranschl\u00fcsse direkt an jeder S\u00e4ule machen das Camperleben auf dem Stellplatz noch komfortabler. Ebenso die jetzt fl\u00e4chendeckende Erreichbarkeit des W-LAN Netzes auf dem gesamten Areal. Zudem wurde in Sachen Platzbeleuchtung mit der neuesten Technik Energieeffizienz und Nachhaltigkeit miteinander vereint, um dem Gedanken der \u201cgr\u00fcnsten\u201d Urlaubsform auch in diesem Bereich gerecht zu werden. Natur erleben \u2013 mit Stil, Abenteuer und Komfort. Das will das Team des Ferienparadies Schwarzw\u00e4lder Hof seinen G\u00e4sten bieten und damit ein nachhaltiges Naturerlebnis mit h\u00f6chstem Komfort verbinden \u2013 f\u00fcr Familien, Paare und Alleinreisende gleicherma\u00dfen, f\u00fcr einen Urlaub mit Erholung, Erlebnis und Qualit\u00e4t.", + "text": "Ein fantasievoller Abenteuerspielplatz, ein stilvoller Loungebereich zum Entspannen sowie ein umfangreiches Technik-Update sorgt für weiteren Komfort und Erlebnisqualität auf der beliebten Campinganlage im Herzen des mittleren Schwarzwaldes. Wo Kinderherzen Purzelbäume schlagen Willkommen im Abenteuer. Ein zentrales Highlight der Neuerungen ist der komplett renovierte Abenteuerspielplatz, der mit naturbelassenem Holz und kreativen Kletterelementen zu Abenteuer, Spiel und Action einlädt. Kinder können hier Seilbrücken überqueren, Türme erklimmen und mutig in luftigen Höhen balancieren. Während die Kleinen mit leuchtenden Augen ihr eigenes Baumhaus-Abenteuer erleben, genießen Eltern entspannte Momente und das Glück ihrer mutigen Kids bei Bewegung, Kreativität und Naturverbundenheit. Für alle eine unvergessliche Familienzeit inmitten der Natur. Symbiose aus Erholung und Genuss Einladung zum Chillen. Ein Ort zum Ankommen ist der ebenfalls neu und liebevoll gestaltete Loungebereich vor dem Restaurant, der einen mit seinen warmen Holzwänden aus massiven Rundhölzern, der sanften Beleuchtung und gemütlichen Sesseln mit einer natürlichen Geborgenheit umringt und somit zum gemütlichen Verweilen einlädt. Die gedämpfte Beleuchtung, die aus stilvollen, von der Decke herab schwebenden Glühbirnen erzeugt wird, zaubert in seinem sanftgoldenen Licht eine behagliche Atmosphäre. Ob bei einer Tasse Kaffee am Nachmittag oder einem belebenden Aperitif am Abend, der stilvolle Rückzugsort bietet Raum für Ruhe, Gespräche oder entspanntes Chillen. Dies ganz besonders in den Abendstunden zum Ausklang eines erlebnisreichen Tages und zum gemütlichen Beisammensein mit Freunden oder Familie. Die bequemen Sessel und ursprünglichen kleinen Holztische untermalen die rustikal, moderne Natürlichkeit. Technik auf dem neuesten Stand Gut versorgt die Freiheit in der Natur genießen. Auch auf technischer Seite wurde ein weiterer Meilenstein auf dem beliebten Ferien-Resort gesetzt. Alle Stellplätze haben nun neue eigene Stromsäulen bekommen, die einen integriertem Überspannungsschutz, eine direkt selbst einschaltbare Sicherung sowie eine moderne LED-Platzbeleuchtung bieten. So kann sich ab sofort jeder einer zuverlässigen Stromversorgung sicher sein. Ein besonderes Plus: Wasser- und Abwasseranschlüsse direkt an jeder Säule machen das Camperleben auf dem Stellplatz noch komfortabler. Ebenso die jetzt flächendeckende Erreichbarkeit des W-LAN Netzes auf dem gesamten Areal. Zudem wurde in Sachen Platzbeleuchtung mit der neuesten Technik Energieeffizienz und Nachhaltigkeit miteinander vereint, um dem Gedanken der “grünsten” Urlaubsform auch in diesem Bereich gerecht zu werden. Natur erleben – mit Stil, Abenteuer und Komfort. Das will das Team des Ferienparadies Schwarzwälder Hof seinen Gästen bieten und damit ein nachhaltiges Naturerlebnis mit höchstem Komfort verbinden – für Familien, Paare und Alleinreisende gleichermaßen, für einen Urlaub mit Erholung, Erlebnis und Qualität.", "tags": [], "status": "Trash", "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5925", @@ -513,20 +517,21 @@ "copyright": "Unbekannt", "copyright_url": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5925" } - ] + ], + "source": "https://www.camping-news.de/rss/" }, { "id": "Artikel 5926 von camping-news.de", - "title": "Das weltweit gr\u00f6\u00dfte Caravaning-Erlebnis", + "title": "Das weltweit größte Caravaning-Erlebnis", "date": "Tue, 13 May 2025 00:00:00 +0200", "summary": "Vom 29. August (Preview Day) bis zum 7. September 2025 wird Düsseldorf erneut zum Treffpunkt der Caravaning-Welt", - "text": "Das weltweit gr\u00f6\u00dfte Caravaning-Erlebnis\n\nDer CARAVAN SALON ist die weltweit gr\u00f6\u00dfte Messe, die sich speziell auf Caravaning konzentriert, und bietet eine eindrucksvolle Ausstellung von Reisemobilen, Caravans und Campervans. Zu dem breiten Angebot geh\u00f6ren aber auch Zubeh\u00f6r, technisches Equipment, Ausbauteile, Dachzelte, Mobilheime und Campingzubeh\u00f6r. Der Salon ist auch ein Ort, an dem Besucher Reiseziele, Campingpl\u00e4tze und Wohnmobilstellpl\u00e4tze entdecken k\u00f6nnen. Besucher haben die M\u00f6glichkeit, die Fahrzeuge vor dem Kauf intensiv zu begutachten, zu testen und zu vergleichen, um das f\u00fcr ihren Lebensstil passende Modell zu finden. Als weltweit f\u00fchrendes Event in diesem Bereich versammelt der CARAVAN SALON sowohl nationale als auch internationale Hersteller, und pr\u00e4sentiert die neuesten Produkte, Innovationen und Weltneuheiten. Mit einer neuen und \u00fcbersichtlichen Hallenstruktur sind die Ausstellungsst\u00fccke leicht zu finden und zu vergleichen. Der CARAVAN SALON zeichnet sich dadurch aus, dass er allen Besuchern, ob Neueinsteiger oder Luxus-Liebhaber, ein spannendes Messeerlebnis bietet. Laut dem Gesch\u00e4ftsf\u00fchrer des Caravaning Industrie Verbandes, Daniel Onggowinarso, spiegelt der Salon auch die steigende Beliebtheit und das Wachstum der Caravaningbranche wider. Der Preview Day bietet eine ruhige Atmosph\u00e4re f\u00fcr diejenigen, die die Neuheiten der Branche in Ruhe entdecken wollen. Der Ticketverkauf beginnt am 11. Juni und weitere Informationen sind auf der Website www.caravan-salon.de zu finden.", + "text": "Das weltweit größte Caravaning-Erlebnis\n\nDer CARAVAN SALON ist die weltweit größte Messe, die sich speziell auf Caravaning konzentriert, und bietet eine eindrucksvolle Ausstellung von Reisemobilen, Caravans und Campervans. Zu dem breiten Angebot gehören aber auch Zubehör, technisches Equipment, Ausbauteile, Dachzelte, Mobilheime und Campingzubehör. Der Salon ist auch ein Ort, an dem Besucher Reiseziele, Campingplätze und Wohnmobilstellplätze entdecken können. Besucher haben die Möglichkeit, die Fahrzeuge vor dem Kauf intensiv zu begutachten, zu testen und zu vergleichen, um das für ihren Lebensstil passende Modell zu finden. Als weltweit führendes Event in diesem Bereich versammelt der CARAVAN SALON sowohl nationale als auch internationale Hersteller, und präsentiert die neuesten Produkte, Innovationen und Weltneuheiten. Mit einer neuen und übersichtlichen Hallenstruktur sind die Ausstellungsstücke leicht zu finden und zu vergleichen. Der CARAVAN SALON zeichnet sich dadurch aus, dass er allen Besuchern, ob Neueinsteiger oder Luxus-Liebhaber, ein spannendes Messeerlebnis bietet. Laut dem Geschäftsführer des Caravaning Industrie Verbandes, Daniel Onggowinarso, spiegelt der Salon auch die steigende Beliebtheit und das Wachstum der Caravaningbranche wider. Der Preview Day bietet eine ruhige Atmosphäre für diejenigen, die die Neuheiten der Branche in Ruhe entdecken wollen. Der Ticketverkauf beginnt am 11. Juni und weitere Informationen sind auf der Website www.caravan-salon.de zu finden.", "tags": [ "Caravaning", "CARAVAN SALON", "Reisemobile" ], - "status": "Process", + "status": "Trash", "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5926", "images": [ { @@ -601,19 +606,20 @@ }, { "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-YimPc01cYtOXjUpCATUqDABw/user-eA31w0vmy3fOrb3G64Ygndsr/img-6d1irbwhkDKGNvLJG50pYaZK.png?st=2025-07-08T07%3A39%3A16Z&se=2025-07-08T09%3A39%3A16Z&sp=r&sv=2024-08-04&sr=b&rscd=inline&rsct=image/png&skoid=cc612491-d948-4d2e-9821-2683df3719f5&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-07-07T20%3A35%3A26Z&ske=2025-07-08T20%3A35%3A26Z&sks=b&skv=2024-08-04&sig=DVMzSGr162NqN8830eX0tAH5Wtm5NAnTPxk2C7NQgTs%3D", - "alt": "KI-generiertes Titelbild zu: Das weltweit gr\u00f6\u00dfte Caravaning-Erlebnis", - "caption": "KI-generiertes Titelbild zu: Das weltweit gr\u00f6\u00dfte Caravaning-Erlebnis", - "copyright": "OpenAI DALL\u00b7E", + "alt": "KI-generiertes Titelbild zu: Das weltweit größte Caravaning-Erlebnis", + "caption": "KI-generiertes Titelbild zu: Das weltweit größte Caravaning-Erlebnis", + "copyright": "OpenAI DALL·E", "copyright_url": "https://openai.com/dall-e" } - ] + ], + "source": "https://www.camping-news.de/rss/" }, { "id": "Artikel 5923 von camping-news.de", - "title": "Komfort und Flexibilit\u00e4t f\u00fcr moderne Camper", + "title": "Komfort und Flexibilität für moderne Camper", "date": "Wed, 07 May 2025 00:00:00 +0200", "summary": "dwt-Zelte präsentiert das Luftzelt Scala Air", - "text": "Mit dem neuen Luftzelt Scala Air stellt dwt-Zelte nei neues Modell in zwei Varianten vor: Scala Air 250 und Scala Air 280, jeweils mit einer Zelttiefe von 250 bzw. 280 cm, und richtet sich an Camper, die Wert auf gro\u00dfz\u00fcgigen Raum und durchdachte Bel\u00fcftung legen. Schneller Aufbau dank moderner Air-In-Technologie Das Scala Air ist mit dem bew\u00e4hrten Air-In-System ausgestattet. Die robusten 13 cm starken Luftschl\u00e4uche sorgen f\u00fcr eine stabile Zeltstruktur \u2013 ganz ohne Gest\u00e4nge. Der Aufbau gelingt in wenigen Minuten, was das Zelt besonders attraktiv f\u00fcr spontane Kurzurlaube oder wechselnde Standorte macht. Zus\u00e4tzliche Luftschl\u00e4uche im Dachbereich und in der Vorderwand erh\u00f6hen die Windsicherheit erheblich. Besonders hervorzuheben ist der Verzicht auf einen Dach\u00fcberstand, was das Zelt besonders f\u00fcr windige Regionen, wie beispielsweise am Meer, optimal macht. Gute Bel\u00fcftung f\u00fcr jedes Wetter Dank clever platzierter Bel\u00fcftungs\u00f6ffnungen und gro\u00dffl\u00e4chiger Fenster mit Moskitonetzen bleibt das Raumklima im Zelt stets angenehm \u2013 auch bei hohen Temperaturen. Die Seitenfenster lassen sich aufrollen oder als L\u00fcftungshaube ausstellen, sodass auch bei Regen eine gute Luftzirkulation gew\u00e4hrleistet ist. Flexible Raumgestaltung durch modulares Design Das Scala Air punktet mit einem variabel nutzbaren Innenraum: \u2022 Die Vorderwand ist herausnehmbar und besitzt eine hochrollbare T\u00fcr. \u2022 Die rechte Vorderwandh\u00e4lfte l\u00e4sst sich zur Veranda abklappen. \u2022 Seitenw\u00e4nde k\u00f6nnen ebenfalls entfernt oder individuell angepasst werden. \u2022 Die doppelte Windecke in der rechten Seitenwand gleicht die Bugschr\u00e4ge optimal aus. H\u00f6hen-Ausgleichs-Blocks inklusive Das Zelt soll eben stehen und auch in der H\u00f6he exakt an den Wohnwagen anschlie\u00dfen: Daf\u00fcr ist beim Scala Air 250/280 durch serienm\u00e4\u00dfige H\u00f6hen-Ausgleichs-Blocks gesorgt. Sie erlauben es, ung\u00fcnstige Bodenunebenheiten oder abfallendes Terrain unter dem Zelt auszugleichen. Gleichzeitig gew\u00e4hrleisten sie den stimmigen \u00dcbergang zwischen Caravan und Zeltdach. Langlebige Materialien f\u00fcr den Outdoor-Einsatz Gefertigt aus Texolan 150 HQ Ripstop-Polyester mit PU-Beschichtung, ist das Scala Air nicht nur strapazierf\u00e4hig, sondern auch pflegeleicht und wetterfest. Die Luftschl\u00e4uche aus TPU sowie der hochgezogene Spritzschutz aus kunststoffbeschichtetem Polyester sorgen f\u00fcr zus\u00e4tzliche Robustheit und Langlebigkeit. Verf\u00fcgbarkeit und Preise Das Scala Air ist in mehreren Gr\u00f6\u00dfen f\u00fcr Umlaufma\u00dfe zwischen 906 cm und 1030 cm erh\u00e4ltlich. Die unverbindliche Preisempfehlung liegt \u2013 je nach Gr\u00f6\u00dfe \u2013 zwischen 1.995 \u20ac und 2.215 \u20ac. Damit bietet dwt-Zelte eine flexible L\u00f6sung f\u00fcr unterschiedlich gro\u00dfe Wohnwagenmodelle und verschiedenste Campinganspr\u00fcche. Besondere Sicherheitsmerkmale F\u00fcr den Einsatz an windigen Standorten \u2013 wie beispielsweise an der See \u2013 sind Sicherheitsgurte serienm\u00e4\u00dfig enthalten. Diese erh\u00f6hen die Sicherheit des Zeltes erheblich und tragen dazu bei, das Zelt bei widrigen Witterungsbedingungen stabil zu halten. Weitere Informationen zu dwt Luftzelten f\u00fcr Wohnwagen gibt's auf https://dwt-zelte.de/wohnwagenvorzelte/wohnwagen-luftzelte.html", + "text": "Mit dem neuen Luftzelt Scala Air stellt dwt-Zelte nei neues Modell in zwei Varianten vor: Scala Air 250 und Scala Air 280, jeweils mit einer Zelttiefe von 250 bzw. 280 cm, und richtet sich an Camper, die Wert auf großzügigen Raum und durchdachte Belüftung legen. Schneller Aufbau dank moderner Air-In-Technologie Das Scala Air ist mit dem bewährten Air-In-System ausgestattet. Die robusten 13 cm starken Luftschläuche sorgen für eine stabile Zeltstruktur – ganz ohne Gestänge. Der Aufbau gelingt in wenigen Minuten, was das Zelt besonders attraktiv für spontane Kurzurlaube oder wechselnde Standorte macht. Zusätzliche Luftschläuche im Dachbereich und in der Vorderwand erhöhen die Windsicherheit erheblich. Besonders hervorzuheben ist der Verzicht auf einen Dachüberstand, was das Zelt besonders für windige Regionen, wie beispielsweise am Meer, optimal macht. Gute Belüftung für jedes Wetter Dank clever platzierter Belüftungsöffnungen und großflächiger Fenster mit Moskitonetzen bleibt das Raumklima im Zelt stets angenehm – auch bei hohen Temperaturen. Die Seitenfenster lassen sich aufrollen oder als Lüftungshaube ausstellen, sodass auch bei Regen eine gute Luftzirkulation gewährleistet ist. Flexible Raumgestaltung durch modulares Design Das Scala Air punktet mit einem variabel nutzbaren Innenraum: • Die Vorderwand ist herausnehmbar und besitzt eine hochrollbare Tür. • Die rechte Vorderwandhälfte lässt sich zur Veranda abklappen. • Seitenwände können ebenfalls entfernt oder individuell angepasst werden. • Die doppelte Windecke in der rechten Seitenwand gleicht die Bugschräge optimal aus. Höhen-Ausgleichs-Blocks inklusive Das Zelt soll eben stehen und auch in der Höhe exakt an den Wohnwagen anschließen: Dafür ist beim Scala Air 250/280 durch serienmäßige Höhen-Ausgleichs-Blocks gesorgt. Sie erlauben es, ungünstige Bodenunebenheiten oder abfallendes Terrain unter dem Zelt auszugleichen. Gleichzeitig gewährleisten sie den stimmigen Übergang zwischen Caravan und Zeltdach. Langlebige Materialien für den Outdoor-Einsatz Gefertigt aus Texolan 150 HQ Ripstop-Polyester mit PU-Beschichtung, ist das Scala Air nicht nur strapazierfähig, sondern auch pflegeleicht und wetterfest. Die Luftschläuche aus TPU sowie der hochgezogene Spritzschutz aus kunststoffbeschichtetem Polyester sorgen für zusätzliche Robustheit und Langlebigkeit. Verfügbarkeit und Preise Das Scala Air ist in mehreren Größen für Umlaufmaße zwischen 906 cm und 1030 cm erhältlich. Die unverbindliche Preisempfehlung liegt – je nach Größe – zwischen 1.995 € und 2.215 €. Damit bietet dwt-Zelte eine flexible Lösung für unterschiedlich große Wohnwagenmodelle und verschiedenste Campingansprüche. Besondere Sicherheitsmerkmale Für den Einsatz an windigen Standorten – wie beispielsweise an der See – sind Sicherheitsgurte serienmäßig enthalten. Diese erhöhen die Sicherheit des Zeltes erheblich und tragen dazu bei, das Zelt bei widrigen Witterungsbedingungen stabil zu halten. Weitere Informationen zu dwt Luftzelten für Wohnwagen gibt's auf https://dwt-zelte.de/wohnwagenvorzelte/wohnwagen-luftzelte.html", "tags": [], "status": "Trash", "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5923", @@ -688,16 +694,17 @@ "copyright": "Unbekannt", "copyright_url": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5923" } - ] + ], + "source": "https://www.camping-news.de/rss/" }, { "id": "Artikel 5922 von camping-news.de", "title": "Viel los auf dem Klaukenhof", "date": "Fri, 25 Apr 2025 00:00:00 +0200", "summary": "Auch 2025 gibt es viel Spannendes auf dem Campingplatz", - "text": "Der Klaukenhof bietet die ganze Saison \u00fcber ein umfangreiches Angebot. Hier nun einige Highlights: 01. Mai 2025 - Maifest Das Maifest findet auf dem Vorplatz und im Biergarten statt. Das Fest ist die perfekte Gelegenheit, um den Fr\u00fchling zu begr\u00fc\u00dfen und um unter Campern ausgiebig zu fachsimpeln. Tauschen Sie mit anderen Campern die besten \u201eCamping-Hacks\u201d aus, um das Leben im Wohnwagen noch angenehmer zu machen und genie\u00dfen Sie nebenbei k\u00fchle Getr\u00e4nke unter der alten Eiche! Keine Anmeldung n\u00f6tig! 02. Mai 2025 - Clevere Camper nutzen Br\u00fcckentage Der 02.05.2025 ist ein Br\u00fcckentag! Geschickt genutzt wird daraus ein langes Wochenende in der Natur. Entspannen, Grillen mit Freunden und die frische Luft genie\u00dfen. Einfach online buchen \u00fcber https://campbuchung.de/anfrage/10180/ 29. Mai 2025 - Vatertag Am Vatertag gilt das Motto \u201ePapa, mach mal Pause!\u201d. Der Vorplatz und der Biergarten sind f\u00fcr alle V\u00e4ter reserviert, die ausgelassen feiern m\u00f6chten. Auf jeden Vater wartet ein k\u00fchles Bier und auf den Bollerwagen wartet ein schattiger Parkplatz. Lassen Sie es also krachen und feiern Sie gemeinsam mit anderen V\u00e4tern diesen besonderen Tag. Keine Anmeldung n\u00f6tig! 07. Dezember 2025 \u2013 Gef\u00fchrte Wanderung am Klaukenhof \u2013 Gemeinsam f\u00fcr den guten Zweck! Am 7. Dezember 2025 l\u00e4dt der Klaukenhof ab 10:00 Uhr zu einer gef\u00fchrten Wanderung ein. Alle Interessierten sind herzlich willkommen, die Natur zu genie\u00dfen und dabei Gutes zu tun. Die Veranstaltung dient dazu, Spenden f\u00fcr \u201eLichtblicke\u201c zu sammeln. Ein weiteres Highlight: Radio Vest wird die Wanderung begleiten und f\u00fcr spannende Einblicke sorgen. Seien Sie dabei und erleben Sie einen Tag voller Bewegung, Gemeinschaft und Unterst\u00fctzung f\u00fcr einen wertvollen Zweck. Anmeldung: info@freizeitpark-klaukenhof.de 31. Dezember 2025 - Silvester Wir verabschieden das Jahr mit einer gro\u00dfen Silvesterparty! Freuen Sie sich auf eine fr\u00f6hliche Veranstaltung mit tollem Essen und Sekt im Biergarten. Bitte beachten Sie, dass eine rechtzeitige Anmeldung erforderlich ist, um an der Feier teilzunehmen. Anmeldungen bei Jutta Hahn unter 02363-365037.", + "text": "Der Klaukenhof bietet die ganze Saison über ein umfangreiches Angebot. Hier nun einige Highlights: 01. Mai 2025 - Maifest Das Maifest findet auf dem Vorplatz und im Biergarten statt. Das Fest ist die perfekte Gelegenheit, um den Frühling zu begrüßen und um unter Campern ausgiebig zu fachsimpeln. Tauschen Sie mit anderen Campern die besten „Camping-Hacks” aus, um das Leben im Wohnwagen noch angenehmer zu machen und genießen Sie nebenbei kühle Getränke unter der alten Eiche! Keine Anmeldung nötig! 02. Mai 2025 - Clevere Camper nutzen Brückentage Der 02.05.2025 ist ein Brückentag! Geschickt genutzt wird daraus ein langes Wochenende in der Natur. Entspannen, Grillen mit Freunden und die frische Luft genießen. Einfach online buchen über https://campbuchung.de/anfrage/10180/ 29. Mai 2025 - Vatertag Am Vatertag gilt das Motto „Papa, mach mal Pause!”. Der Vorplatz und der Biergarten sind für alle Väter reserviert, die ausgelassen feiern möchten. Auf jeden Vater wartet ein kühles Bier und auf den Bollerwagen wartet ein schattiger Parkplatz. Lassen Sie es also krachen und feiern Sie gemeinsam mit anderen Vätern diesen besonderen Tag. Keine Anmeldung nötig! 07. Dezember 2025 – Geführte Wanderung am Klaukenhof – Gemeinsam für den guten Zweck! Am 7. Dezember 2025 lädt der Klaukenhof ab 10:00 Uhr zu einer geführten Wanderung ein. Alle Interessierten sind herzlich willkommen, die Natur zu genießen und dabei Gutes zu tun. Die Veranstaltung dient dazu, Spenden für „Lichtblicke“ zu sammeln. Ein weiteres Highlight: Radio Vest wird die Wanderung begleiten und für spannende Einblicke sorgen. Seien Sie dabei und erleben Sie einen Tag voller Bewegung, Gemeinschaft und Unterstützung für einen wertvollen Zweck. Anmeldung: info@freizeitpark-klaukenhof.de 31. Dezember 2025 - Silvester Wir verabschieden das Jahr mit einer großen Silvesterparty! Freuen Sie sich auf eine fröhliche Veranstaltung mit tollem Essen und Sekt im Biergarten. Bitte beachten Sie, dass eine rechtzeitige Anmeldung erforderlich ist, um an der Feier teilzunehmen. Anmeldungen bei Jutta Hahn unter 02363-365037.", "tags": [], - "status": "On Hold", + "status": "Trash", "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5922", "images": [ { @@ -819,14 +826,15 @@ "copyright": "Unbekannt", "copyright_url": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5922" } - ] + ], + "source": "https://www.camping-news.de/rss/" }, { "id": "Artikel 5921 von camping-news.de", "title": "Camping Resort Allweglehen bietet \"Wellness plus\"", "date": "Fri, 04 Apr 2025 00:00:00 +0200", "summary": "Biken, Yoga und Allweglehen Adventures", - "text": "Fr\u00fchlingserwachen in der Erlebnisregion Berchtesgaden Genug vom Winter? Auf dem Camping Resort Allweglehen dr\u00e4ngt die Jahreszeit f\u00fcr schneefreie Sportaktivit\u00e4ten ins Land. Mit den \u201eAllweglehen Adventures\u201c steht ein neues Aktiv-Konzept. F\u00fcr die mentale und k\u00f6rperliche Fitness wurde das Angebot von Yoga und Aquagym als Erg\u00e4nzung der Wellnesserholung ins Programm genommen. Eingebettet in die beeindruckende Natur des Nationalparks bieten das \u201e5-Sterne S\u201c Resort zusammen mit seinen Aktivpartnern einzigartige Abenteuer f\u00fcr jedes Niveau, vom gem\u00fctlichen Naturgenuss bis hin zum Adrenalinkick \u2013 beim Wandern, auf Klettersteigen, Canyoning, Wildwasser Rafting bis zum Tandemflug am Familien- und Aktivberg Jenner. Letzteres ein atemberaubendes Abenteuer mit Blick aus der Vogelperspektive auf die spektakul\u00e4re Berchtesgadener Bergwelt. Bei allen gef\u00fchrten Touren bewegt man sich dabei immer in der sicheren Obhut erfahrener und speziell daf\u00fcr ausgebildeter Guides. \u201eRadeln f\u00fcr die Wadeln\u201c Vor allem aber laden grandiose Biketouren im Alpennationalpark Berchtesgaden ein, Zeit in der Natur zu verbringen. Von leicht bis anspruchsvoll, und das auch auf eigene Faust. Die muskelschonende Variante macht der E-Bike-Verleih am Camping Resort m\u00f6glich. Sechs R\u00e4der stehen aus dem eigenen Verleih zur Verf\u00fcgung, um die Region im eigenen Tempo zu entdecken und auf abwechslungsreichen Routen zu den umliegenden Almen zu gelangen. Die Litzl- oder Reiter Alm bieten sich besonders an, um dort bei einer gem\u00fctlichen Brotzeit die Aussicht auf die beeindruckende umliegende Bergwelt zu genie\u00dfen. F\u00fcr ausdauernde Radler empfiehlt sich der Tourenklassiker \u201eRund um den Untersberg\u201c mit knapp 46 Kilometer L\u00e4nge, jedoch mei\u00dft relativ flach verlaufend, oder die Ro\u00dffeldrunde, die ideal vom Allweglehen gestartet werden kann. Eine knackige Runde mit 1145 Metern H\u00f6henunterschied bis auf eine Passh\u00f6he von 1545 Meter. Oben mit Traumaussicht bis ins Salzburger Land laden bewirtschaftete Almh\u00fctten zum Verweilen ein. Wellness plus: Resorteigenes Yoga & Aqua Gym Angebot In Erg\u00e4nzung zu allen Aktivprogrammen steht das Wellnessangebot mit Saunalandschaft, Saunagarten, Ruhezonen und Zugang zum Infinitypool f\u00fcr eine erholsame Regeneration. Auch eine Rundum Verw\u00f6hnung mit erholsamen Massageangeboten und Kosmetik k\u00f6nnen dazu beitragen, das eigene Zeitgef\u00fchl einmal komplett auszublenden. Neu im Programm sind zudem die Angebote von Aqua Gym und Yoga, die in Zusammenarbeit mit Barbara Steube von der \u00f6rtlichen Bewegungsschule Du\u00e0nsh\u00f9 durchgef\u00fchrt werden. Beides tr\u00e4gt sowohl zur Muskelst\u00e4rkung, einer verbesserten k\u00f6rperlichen Haltung sowie zum Aufbau mentaler St\u00e4rke und Konzentration bei - gut zur Bew\u00e4ltigung intensiver Aktivit\u00e4ten, Touren oder Trails. Zum 30 min\u00fctigen Aquagym am Allweglehen geht es immer dienstags um 9:00 Uhr in den Infinity-Pool, zum Yoga immer donnerstags um 9:00 Uhr f\u00fcr 45 Minuten in den Ruheraum. Beide Angebote finden bei jeder Witterung statt. Voranmeldung erforderlich. Infos zu den genannten und weiteren Radtouren und Aktivit\u00e4ten gibt es unter https://www.allweglehen.de/aktiv/sommer/biken & https://www.allweglehen.de/aktiv/sommer", + "text": "Frühlingserwachen in der Erlebnisregion Berchtesgaden Genug vom Winter? Auf dem Camping Resort Allweglehen drängt die Jahreszeit für schneefreie Sportaktivitäten ins Land. Mit den „Allweglehen Adventures“ steht ein neues Aktiv-Konzept. Für die mentale und körperliche Fitness wurde das Angebot von Yoga und Aquagym als Ergänzung der Wellnesserholung ins Programm genommen. Eingebettet in die beeindruckende Natur des Nationalparks bieten das „5-Sterne S“ Resort zusammen mit seinen Aktivpartnern einzigartige Abenteuer für jedes Niveau, vom gemütlichen Naturgenuss bis hin zum Adrenalinkick – beim Wandern, auf Klettersteigen, Canyoning, Wildwasser Rafting bis zum Tandemflug am Familien- und Aktivberg Jenner. Letzteres ein atemberaubendes Abenteuer mit Blick aus der Vogelperspektive auf die spektakuläre Berchtesgadener Bergwelt. Bei allen geführten Touren bewegt man sich dabei immer in der sicheren Obhut erfahrener und speziell dafür ausgebildeter Guides. „Radeln für die Wadeln“ Vor allem aber laden grandiose Biketouren im Alpennationalpark Berchtesgaden ein, Zeit in der Natur zu verbringen. Von leicht bis anspruchsvoll, und das auch auf eigene Faust. Die muskelschonende Variante macht der E-Bike-Verleih am Camping Resort möglich. Sechs Räder stehen aus dem eigenen Verleih zur Verfügung, um die Region im eigenen Tempo zu entdecken und auf abwechslungsreichen Routen zu den umliegenden Almen zu gelangen. Die Litzl- oder Reiter Alm bieten sich besonders an, um dort bei einer gemütlichen Brotzeit die Aussicht auf die beeindruckende umliegende Bergwelt zu genießen. Für ausdauernde Radler empfiehlt sich der Tourenklassiker „Rund um den Untersberg“ mit knapp 46 Kilometer Länge, jedoch meißt relativ flach verlaufend, oder die Roßfeldrunde, die ideal vom Allweglehen gestartet werden kann. Eine knackige Runde mit 1145 Metern Höhenunterschied bis auf eine Passhöhe von 1545 Meter. Oben mit Traumaussicht bis ins Salzburger Land laden bewirtschaftete Almhütten zum Verweilen ein. Wellness plus: Resorteigenes Yoga & Aqua Gym Angebot In Ergänzung zu allen Aktivprogrammen steht das Wellnessangebot mit Saunalandschaft, Saunagarten, Ruhezonen und Zugang zum Infinitypool für eine erholsame Regeneration. Auch eine Rundum Verwöhnung mit erholsamen Massageangeboten und Kosmetik können dazu beitragen, das eigene Zeitgefühl einmal komplett auszublenden. Neu im Programm sind zudem die Angebote von Aqua Gym und Yoga, die in Zusammenarbeit mit Barbara Steube von der örtlichen Bewegungsschule Duànshù durchgeführt werden. Beides trägt sowohl zur Muskelstärkung, einer verbesserten körperlichen Haltung sowie zum Aufbau mentaler Stärke und Konzentration bei - gut zur Bewältigung intensiver Aktivitäten, Touren oder Trails. Zum 30 minütigen Aquagym am Allweglehen geht es immer dienstags um 9:00 Uhr in den Infinity-Pool, zum Yoga immer donnerstags um 9:00 Uhr für 45 Minuten in den Ruheraum. Beide Angebote finden bei jeder Witterung statt. Voranmeldung erforderlich. Infos zu den genannten und weiteren Radtouren und Aktivitäten gibt es unter https://www.allweglehen.de/aktiv/sommer/biken & https://www.allweglehen.de/aktiv/sommer", "tags": [], "status": "Online", "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5921", @@ -950,14 +958,15 @@ "copyright": "Unbekannt", "copyright_url": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5921" } - ] + ], + "source": "https://www.camping-news.de/rss/" }, { "id": "Artikel 5920 von camping-news.de", - "title": "EU-F\u00fchrerscheinreform kommt", + "title": "EU-Führerscheinreform kommt", "date": "Tue, 01 Apr 2025 00:00:00 +0200", "summary": "Reisemobile bis 4,25 Tonnen mit B-Führerschein", - "text": "Das Europ\u00e4ische Parlament und die Mitgliedstaaten haben sich auf eine Novellierung der EU-F\u00fchrerscheinrichtlinie verst\u00e4ndigt, die eine Sonderregelung f\u00fcr Reisemobile umfasst: Demnach soll das zul\u00e4ssige Gesamtgewicht f\u00fcr Inhaber eines B-F\u00fchrerscheins auf 4,25 Tonnen bei Reisemobilen erh\u00f6ht werden. Die \u00fcberarbeitete F\u00fchrerscheinrichtlinie bietet die Chance, nachhaltiges und familienfreundliches Reisen mit dem Reisemobil f\u00fcr noch mehr Menschen zug\u00e4nglich zu machen. Mit der Einf\u00fchrung des B-F\u00fchrerscheins im Jahr 1999 teilte sich in Deutschland die stetig wachsende Zahl der Reisemobilisten immer mehr in zwei Klassen auf. W\u00e4hrend mit dem alten F\u00fchrerschein der Klasse 3 noch Reisemobile mit einem zul\u00e4ssigen Gesamtgewicht von bis zu 7,5 Tonnen bewegt werden d\u00fcrfen, ist es Besitzern des B-F\u00fchrerscheins nur erlaubt, Reisemobile bis zu 3,5 Tonnen zu lenken. Die Grenze von 3,5 Tonnen wird aus vielen Gr\u00fcnden schnell erreicht: Moderne Reisemobile sind sicherer und umweltfreundlicher als je zuvor. Allerdings sind sie - nicht zuletzt aufgrund der weitgehend durch EU-Recht vorgeschriebenen Sicherheits- und Umweltanforderungen - auch schwerer geworden. Mit dem langfristig angestrebten Umstieg auf alternative Antriebe wird das Fahrzeuggewicht in Zukunft voraussichtlich weiter ansteigen. Daher setzt sich der Caravaning Industrie Verband (CIVD) bereits seit vielen Jahren \u00fcber den europ\u00e4ischen Dachverband \"European Caravan Federation\" (ECF) f\u00fcr eine Erweiterung der Gewichtsgrenze des B-F\u00fchrerschein auf EU-Ebene ein. In Zukunft k\u00f6nnen Inhaber eines B-F\u00fchrerscheins Reisemobile mit einem Gesamtgewicht von bis zu 4,25 Tonnen f\u00fchren, sofern sie ein spezielles Training oder eine Pr\u00fcfung absolvieren. Ob ein Training, eine Pr\u00fcfung oder beides erforderlich ist, liegt im Ermessen der einzelnen Mitgliedstaaten.\u00a0Bei allen Fahrzeugen mit alternativen Antrieben entf\u00e4llt eine Zusatzpr\u00fcfung, wenn der Fahrer seit mindestens zwei Jahren im Besitz der Fahrerlaubnis ist. Die Novellierung der EU-F\u00fchrerscheinrichtlinie bietet die Chance, den naturnahen, nachhaltigen und familienfreundlichen Urlaub mit dem Reisemobil f\u00fcr Millionen von Menschen - insbesondere f\u00fcr junge und kommende Generationen - noch leichter zug\u00e4nglich zu machen und tr\u00e4gt so positiv zur Entwicklung des Tourismus in Deutschland und Europa bei.", + "text": "Das Europäische Parlament und die Mitgliedstaaten haben sich auf eine Novellierung der EU-Führerscheinrichtlinie verständigt, die eine Sonderregelung für Reisemobile umfasst: Demnach soll das zulässige Gesamtgewicht für Inhaber eines B-Führerscheins auf 4,25 Tonnen bei Reisemobilen erhöht werden. Die überarbeitete Führerscheinrichtlinie bietet die Chance, nachhaltiges und familienfreundliches Reisen mit dem Reisemobil für noch mehr Menschen zugänglich zu machen. Mit der Einführung des B-Führerscheins im Jahr 1999 teilte sich in Deutschland die stetig wachsende Zahl der Reisemobilisten immer mehr in zwei Klassen auf. Während mit dem alten Führerschein der Klasse 3 noch Reisemobile mit einem zulässigen Gesamtgewicht von bis zu 7,5 Tonnen bewegt werden dürfen, ist es Besitzern des B-Führerscheins nur erlaubt, Reisemobile bis zu 3,5 Tonnen zu lenken. Die Grenze von 3,5 Tonnen wird aus vielen Gründen schnell erreicht: Moderne Reisemobile sind sicherer und umweltfreundlicher als je zuvor. Allerdings sind sie - nicht zuletzt aufgrund der weitgehend durch EU-Recht vorgeschriebenen Sicherheits- und Umweltanforderungen - auch schwerer geworden. Mit dem langfristig angestrebten Umstieg auf alternative Antriebe wird das Fahrzeuggewicht in Zukunft voraussichtlich weiter ansteigen. Daher setzt sich der Caravaning Industrie Verband (CIVD) bereits seit vielen Jahren über den europäischen Dachverband \"European Caravan Federation\" (ECF) für eine Erweiterung der Gewichtsgrenze des B-Führerschein auf EU-Ebene ein. In Zukunft können Inhaber eines B-Führerscheins Reisemobile mit einem Gesamtgewicht von bis zu 4,25 Tonnen führen, sofern sie ein spezielles Training oder eine Prüfung absolvieren. Ob ein Training, eine Prüfung oder beides erforderlich ist, liegt im Ermessen der einzelnen Mitgliedstaaten. Bei allen Fahrzeugen mit alternativen Antrieben entfällt eine Zusatzprüfung, wenn der Fahrer seit mindestens zwei Jahren im Besitz der Fahrerlaubnis ist. Die Novellierung der EU-Führerscheinrichtlinie bietet die Chance, den naturnahen, nachhaltigen und familienfreundlichen Urlaub mit dem Reisemobil für Millionen von Menschen - insbesondere für junge und kommende Generationen - noch leichter zugänglich zu machen und trägt so positiv zur Entwicklung des Tourismus in Deutschland und Europa bei.", "tags": [], "status": "Online", "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5920", @@ -1025,6 +1034,8111 @@ "copyright": "Unbekannt", "copyright_url": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5920" } - ] + ], + "source": "https://www.camping-news.de/rss/" + }, + { + "id": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/", + "title": "Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper", + "date": "Mon, 24 Mar 2025 11:48:00 +0100", + "summary": "

    Corigon ist der Name der neuesten Marke der Erwin-Hymer-Group (EHG). Mit dem Chef der EHG hat promobil bereits darüber gesprochen.

    ", + "text": "Corigon ist der Name der neuesten Marke der Erwin-Hymer-Group (EHG). Mit dem Chef der EHG hat promobil bereits darüber gesprochen.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2216820.jpg", + "alt": "Corigon CV 60 D, von vorne", + "caption": "Corigon CV 60 D, von vorne", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2216824.jpg", + "alt": "Corigon Advanced Modell, Corigon T 700 S", + "caption": "Corigon Advanced Modell, Corigon T 700 S", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2216823.jpg", + "alt": "Corigon TS 70 LS, Sitzgruppe", + "caption": "Corigon TS 70 LS, Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2216821.jpg", + "alt": "Corigon, Camper Van, Tisch, Sitzgruppe", + "caption": "Corigon, Camper Van, Tisch, Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2219705.jpg", + "alt": "Weinsberg, Carsuite, Wohnmobil", + "caption": "Weinsberg, Carsuite, Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2030929.jpg", + "alt": "Xcabin", + "caption": "Xcabin", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2030129.jpg", + "alt": "Caravan Salon 2024", + "caption": "Caravan Salon 2024", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2216768.jpg", + "alt": "Bürster Papillon Rendering", + "caption": "Bürster Papillon Rendering", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2215467.jpg", + "alt": "Giottiline Siena 396 Wohnmobil für Familien mit Kinderzimmer", + "caption": "Giottiline Siena 396 Wohnmobil für Familien mit Kinderzimmer", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2215384.jpg", + "alt": "Giottiline, Wohnmobil, Siena 485, Alkoven, fünf Personen, Familien", + "caption": "Giottiline, Wohnmobil, Siena 485, Alkoven, fünf Personen, Familien", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2213606.jpg", + "alt": "Fendt, Diamant, Innenraum, Mann, Sitzgruppe", + "caption": "Fendt, Diamant, Innenraum, Mann, Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/", + "title": "Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör", + "date": "Tue, 18 Mar 2025 06:00:00 +0100", + "summary": "

    Das sind die besten Neuerfindungen auf dem Gebiet Camping-Zubehör 2025: Tolle Produkte für Ihr nächstes Camping-Abenteuer.

    ", + "text": "Das sind die besten Neuerfindungen auf dem Gebiet Camping-Zubehör 2025: Tolle Produkte für Ihr nächstes Camping-Abenteuer.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://www.promobil.de/_next/static/img/logos/car.svg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2176673.jpg", + "alt": "Erfinder, Campfire", + "caption": "Erfinder, Campfire", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2131731.jpg", + "alt": "VW California Ocean Campervan Aufstelldach", + "caption": "VW California Ocean Campervan Aufstelldach", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2070795.jpg", + "alt": "CMT, Holiday, Spacetourer, Campervan", + "caption": "CMT, Holiday, Spacetourer, Campervan", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2212856.jpg", + "alt": "Skizze, Aufstelldach zugeklappt, stromlinien", + "caption": "Skizze, Aufstelldach zugeklappt, stromlinien", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2180355.jpg", + "alt": "Vickywood", + "caption": "Vickywood", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2180142.jpg", + "alt": "LMC e:dero 470 K (2025) Sofa im Bug", + "caption": "LMC e:dero 470 K (2025) Sofa im Bug", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2178582.jpg", + "alt": "Front, Sprinter", + "caption": "Front, Sprinter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2178156.jpg", + "alt": "Re:van MAN TGE Modulsystem", + "caption": "Re:van MAN TGE Modulsystem", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/", + "title": "CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv", + "date": "Wed, 15 Jan 2025 08:34:00 +0100", + "summary": "

    Artikel für Artikel jetzt ganz einfach durchforsten: Mit den Jahrgangs-PDF-Archiven ist das möglich. In den Archiven befinden sich alle zwölf CARAVANING-Ausgaben des jeweiligen Jahres.

    ", + "text": "Artikel für Artikel jetzt ganz einfach durchforsten: Mit den Jahrgangs-PDF-Archiven ist das möglich. In den Archiven befinden sich alle zwölf CARAVANING-Ausgaben des jeweiligen Jahres.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/" + }, + { + "url": "https://www.promobil.de/_next/static/img/logos/car.svg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/1665061.jpg", + "alt": "CARAVANING fürs Archiv", + "caption": "CARAVANING fürs Archiv", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/top-10-clever-campen-videos-2024/", + "title": "Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos", + "date": "Sat, 04 Jan 2025 06:00:00 +0100", + "summary": "

    Die Redaktionen von promobil und CARAVANING betreiben gemeinsam den CLEVER CAMPEN Youtube-Channel. Hier zeigen wir die Top-Videos 2024.

    ", + "text": "Die Redaktionen von promobil und CARAVANING betreiben gemeinsam den CLEVER CAMPEN Youtube-Channel. Hier zeigen wir die Top-Videos 2024.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/top-10-clever-campen-videos-2024/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/top-10-clever-campen-videos-2024/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2093924.jpg", + "alt": "Morelo Palace 88 DL (2024) f", + "caption": "Morelo Palace 88 DL (2024) f", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/top-10-clever-campen-videos-2024/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/top-10-clever-campen-videos-2024/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/top-10-clever-campen-videos-2024/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/top-10-clever-campen-videos-2024/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/top-10-clever-campen-videos-2024/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/top-10-clever-campen-videos-2024/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/top-10-clever-campen-videos-2024/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/top-10-clever-campen-videos-2024/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/top-10-clever-campen-videos-2024/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/top-10-clever-campen-videos-2024/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/top-10-clever-campen-videos-2024/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/top-10-clever-campen-videos-2024/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/top-10-clever-campen-videos-2024/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/", + "title": "Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004", + "date": "Tue, 31 Dec 2024 06:00:00 +0100", + "summary": "

    Vom Carthago M-Liner bis zum Esterel Integrierten – der promobil-Rückblick auf die Highlights des Jahres 2004.

    ", + "text": "Vom Carthago M-Liner bis zum Esterel Integrierten – der promobil-Rückblick auf die Highlights des Jahres 2004.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2167835.jpg", + "alt": "Außenansicht, Carthago", + "caption": "Außenansicht, Carthago", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2167835.jpg", + "alt": "Außenansicht, Carthago", + "caption": "Außenansicht, Carthago", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2167837.jpg", + "alt": "Außenansicht, Esterel", + "caption": "Außenansicht, Esterel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2167838.jpg", + "alt": "Außenansicht, Dethleffs Esprit I 7410", + "caption": "Außenansicht, Dethleffs Esprit I 7410", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2167840.jpg", + "alt": "Außenansicht, Carthago", + "caption": "Außenansicht, Carthago", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2167842.jpg", + "alt": "Außenansicht, Flair", + "caption": "Außenansicht, Flair", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2167844.jpg", + "alt": "Außenansicht, Dethleffs Advantage A 6771", + "caption": "Außenansicht, Dethleffs Advantage A 6771", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2167846.jpg", + "alt": "Außenansicht, TEC Rotec", + "caption": "Außenansicht, TEC Rotec", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2167848.jpg", + "alt": "Außenansicht, Cariva-Alkoven E35.22", + "caption": "Außenansicht, Cariva-Alkoven E35.22", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2167850.jpg", + "alt": "Außenansicht, Hymertramp 655", + "caption": "Außenansicht, Hymertramp 655", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2167852.jpg", + "alt": "Außenansicht, I-TEC 6300 G", + "caption": "Außenansicht, I-TEC 6300 G", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2167854.jpg", + "alt": "Außenraum, Bürstner Delfin Performance", + "caption": "Außenraum, Bürstner Delfin Performance", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2167856.jpg", + "alt": "Außenansicht, Silverdream", + "caption": "Außenansicht, Silverdream", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/", + "title": "Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen", + "date": "Tue, 26 Nov 2024 12:00:00 +0100", + "summary": "

    Im Falle eines Falles können sie Leben retten: Gaswarner. Gefährlich werden können mehrere ganz unterschiedliche Gasarten im Reisemobil. Promobil erklärt, welche das sind und wie Sie sich vor ihnen schützen.

    ", + "text": "Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen\n\nGaswarner sind lebensrettende Geräte, insbesondere bei der Verwendung in Reisemobilen, da sie verschiedene gefährliche Gasarten erkennen können. Promobil bietet wertvolle Informationen darüber, welche Gasarten gefährlich sein können und wie man sich vor diesen schützen kann.", + "tags": [ + "Gaswarner", + "Reisemobilsicherheit", + "Gassicherheit" + ], + "status": "Trash", + "link": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/1765700.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1765709.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1765710.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1765711.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1765712.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1765713.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1765714.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1765715.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1765716.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1765717.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1765718.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1765719.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1765720.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1765705.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2211040.jpg", + "alt": "Gasplakette", + "caption": "Gasplakette", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2178259.jpg", + "alt": "Absorberkühlschrank, Carado T 471", + "caption": "Absorberkühlschrank, Carado T 471", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1840128.jpg", + "alt": "Sicherheitszubehör - Einbruchs und Diebstahlschutz", + "caption": "Sicherheitszubehör - Einbruchs und Diebstahlschutz", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1798546.jpg", + "alt": "Gastank-Einbau", + "caption": "Gastank-Einbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2195898.jpg", + "alt": "Sat-Anlagen, Dom-Antenne, Flach-Antenne, mobile Sat-Anlage, feste Sat-Anlage", + "caption": "Sat-Anlagen, Dom-Antenne, Flach-Antenne, mobile Sat-Anlage, feste Sat-Anlage", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1934330.jpg", + "alt": "Vergleich Chausson vs. Hobby", + "caption": "Vergleich Chausson vs. Hobby", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2135374.jpg", + "alt": "Alexander Wottrich Interview", + "caption": "Alexander Wottrich Interview", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/", + "title": "Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo", + "date": "Tue, 15 Oct 2024 16:00:00 +0200", + "summary": "

    Der nur 4,40 Meter lange kompakte Minicamper von Freizeitmobile Kliem auf Basis des Fiat Doblo bietet eine flexible Lösung für Alltag und Reisen.

    ", + "text": "Der nur 4,40 Meter lange kompakte Minicamper von Freizeitmobile Kliem auf Basis des Fiat Doblo bietet eine flexible Lösung für Alltag und Reisen.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2148456.jpg", + "alt": "Dailycamper Trekkin Fiat Doblo", + "caption": "Dailycamper Trekkin Fiat Doblo", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2148460.jpg", + "alt": "Dailycamper Trekkin Fiat Doblo", + "caption": "Dailycamper Trekkin Fiat Doblo", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2148458.jpg", + "alt": "Dailycamper Trekkin Fiat Doblo", + "caption": "Dailycamper Trekkin Fiat Doblo", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/", + "title": "Campingbus Rocket Camper Ryzon beim Weltrekord: Jonas Deichmanns Camper für Ironman-Rekord", + "date": "Wed, 04 Sep 2024 13:55:57 +0200", + "summary": "

    Am 5. September war es so weit: 120 Langdistanz-Triathlons nacheinander. Extrem-Triathlet Jonas Deichmann macht sein Versprechen wahr und pulverisiert den bisherigen Weltrekord. Vom ersten Tag an half ihm ein Wohnmobil von Rocket Camper, diese tägliche Leistung zu meistern. Wir schauen mal rein und klären, für was er das überhaupt braucht. 

    ", + "text": "Am 5. September war es so weit: 120 Langdistanz-Triathlons nacheinander. Extrem-Triathlet Jonas Deichmann macht sein Versprechen wahr und pulverisiert den bisherigen Weltrekord. Vom ersten Tag an half ihm ein Wohnmobil von Rocket Camper, diese tägliche Leistung zu meistern. Wir schauen mal rein und klären, für was er das überhaupt braucht.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2138103.jpg", + "alt": "Rocket Camper, Jonas Deichmann", + "caption": "Rocket Camper, Jonas Deichmann", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2138096.jpg", + "alt": "Rocket Camper, Außenansicht", + "caption": "Rocket Camper, Außenansicht", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2138091.jpg", + "alt": "Rocket Camper, Triathlon-Experten, Ryzon", + "caption": "Rocket Camper, Triathlon-Experten, Ryzon", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2138083.jpg", + "alt": "Rocket Camper, Bodenbelag Ryzon", + "caption": "Rocket Camper, Bodenbelag Ryzon", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2138102.jpg", + "alt": "Rocket Camper, Rennradhalterung, Ryzon", + "caption": "Rocket Camper, Rennradhalterung, Ryzon", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2219557.jpg", + "alt": "Dreamer D 43 Up, Außenaufnahme", + "caption": "Dreamer D 43 Up, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2219246.jpg", + "alt": "Livingstone Go, Innen, Frau, Kühlschrank", + "caption": "Livingstone Go, Innen, Frau, Kühlschrank", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2218304.jpg", + "alt": "Forster Livin' Up Pro 599 (2026), Außenaufnahme, Frau, Campingbus, Halle", + "caption": "Forster Livin' Up Pro 599 (2026), Außenaufnahme, Frau, Campingbus, Halle", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2131731.jpg", + "alt": "VW California Ocean Campervan Aufstelldach", + "caption": "VW California Ocean Campervan Aufstelldach", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2206866.jpg", + "alt": "Sunlight Cliff 4x4, Dauertest, Berg", + "caption": "Sunlight Cliff 4x4, Dauertest, Berg", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/", + "title": "E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome", + "date": "Sat, 06 Jul 2024 12:00:00 +0200", + "summary": "

    Wer sein Kontrollboard modernisieren möchte, hat mit dem E-Trailer-System die Möglichkeit, Schritt für Schritt ins digitale Zeitalter zu wechseln.

    ", + "text": "Wer sein Kontrollboard modernisieren möchte, hat mit dem E-Trailer-System die Möglichkeit, Schritt für Schritt ins digitale Zeitalter zu wechseln.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2105842.jpg", + "alt": "E-Trailer System, APP", + "caption": "E-Trailer System, APP", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2105846.jpg", + "alt": "E-Trailer System, GPS-Tracker", + "caption": "E-Trailer System, GPS-Tracker", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2105843.jpg", + "alt": "E-Trailer System, Wassertanksensor", + "caption": "E-Trailer System, Wassertanksensor", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2105848.jpg", + "alt": "E-Trailer System, Temperaturfühler", + "caption": "E-Trailer System, Temperaturfühler", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/", + "title": "Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM", + "date": "Sun, 14 Apr 2024 18:00:00 +0200", + "summary": "

    Neben Berlin ist Leipzig der einzige ostdeutsche EM-Gastgeber. Mit der Hauptstadt mithalten kann Sachsens bevölkerungsreichste Stadt durchaus. Und das liegt nicht nur am Fußball-Verein.

    ", + "text": "Neben Berlin ist Leipzig der einzige ostdeutsche EM-Gastgeber. Mit der Hauptstadt mithalten kann Sachsens bevölkerungsreichste Stadt durchaus. Und das liegt nicht nur am Fußball-Verein.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2091833.jpg", + "alt": "EM-Spiel in Leipzig - Skyline", + "caption": "EM-Spiel in Leipzig - Skyline", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2091837.jpg", + "alt": "EM-Spiel in Leipzig - Baumwollspinnerei", + "caption": "EM-Spiel in Leipzig - Baumwollspinnerei", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2091835.jpg", + "alt": "EM-Spiel in Leipzig - Wasser", + "caption": "EM-Spiel in Leipzig - Wasser", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://imgsdb1.promobil.de/image/5c910df446c956ef07732fa7-websiteListThumb.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://imgsdb1.promobil.de/image/588f2d56721d54a528170778-websiteListThumb.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://imgsdb1.promobil.de/image/64c90aa9cbdf3a00089ec3cc-websiteListThumb.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2091838.jpg", + "alt": "EM-Spiel in Leipzig - Stadion", + "caption": "EM-Spiel in Leipzig - Stadion", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/", + "title": "Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft?", + "date": "Sun, 17 Dec 2023 17:50:00 +0100", + "summary": "

    Westfalia produziert an zwei deutschen Standorten Campingbusse: am Stammsitz in Rheda-Wiedenbrück Modelle für Automarken wie Mercedes und Ford, in Gotha eigene Fahrzeuge der Marke Westfalia.

    ", + "text": "Westfalia produziert an zwei deutschen Standorten Campingbusse: am Stammsitz in Rheda-Wiedenbrück Modelle für Automarken wie Mercedes und Ford, in Gotha eigene Fahrzeuge der Marke Westfalia.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2058017.jpg", + "alt": "Can-Kasim Dogan", + "caption": "Can-Kasim Dogan", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/can-kasim-dogan-interview-westfalia/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/", + "title": "Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil?", + "date": "Sun, 26 Nov 2023 16:00:00 +0100", + "summary": "

    Bevorzugtes Fortbewegungsmittel der promobil-Lesenden ist das Fahrrad – mit oder ohne elektrischen Antrieb. Ist das bei Ihnen auch so?

    ", + "text": "Bevorzugtes Fortbewegungsmittel der promobil-Lesenden ist das Fahrrad – mit oder ohne elektrischen Antrieb. Ist das bei Ihnen auch so?", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2053714.jpg", + "alt": "Lesermeinung Thema Mobilität", + "caption": "Lesermeinung Thema Mobilität", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2053716.jpg", + "alt": "Lesermeinung Thema Mobilität - Elke", + "caption": "Lesermeinung Thema Mobilität - Elke", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2053715.jpg", + "alt": "Lesermeinung Thema Mobilität - Jürgen", + "caption": "Lesermeinung Thema Mobilität - Jürgen", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1835793.jpg", + "alt": "Gebraucht-Kauf Ratgeber", + "caption": "Gebraucht-Kauf Ratgeber", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1836156.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2149628.jpg", + "alt": "Gefuehrte Wohnmobilreisen i", + "caption": "Gefuehrte Wohnmobilreisen i", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1555475.jpg", + "alt": "Hagelschäden am Wohnmobil", + "caption": "Hagelschäden am Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2153790.jpg", + "alt": "Sanitär-Autarkie - Frischwasser", + "caption": "Sanitär-Autarkie - Frischwasser", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2078412.jpg", + "alt": "CMT 2024 Wohnmobil-Messekauf", + "caption": "CMT 2024 Wohnmobil-Messekauf", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2147777.jpg", + "alt": "Adria Super Twin etnhüllung auf der Messe", + "caption": "Adria Super Twin etnhüllung auf der Messe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/spielorte-em-2024-frankfurt/", + "title": "Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil", + "date": "Mon, 06 Nov 2023 09:00:00 +0100", + "summary": "

    Im kommenden Sommer ist die Mainmetropole Frankfurt einer von zehn Gastgebern bei der Fußball-EM der Männer. Dort findet am 23. Juni 2024 das dritte Vorrundenspiel der DFB-Elf statt.

    ", + "text": "Im kommenden Sommer ist die Mainmetropole Frankfurt einer von zehn Gastgebern bei der Fußball-EM der Männer. Dort findet am 23. Juni 2024 das dritte Vorrundenspiel der DFB-Elf statt.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/spielorte-em-2024-frankfurt/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2050071.jpg", + "alt": "Mainufer, Stadt, Sonnenuntergang, Sachsenhausen", + "caption": "Mainufer, Stadt, Sonnenuntergang, Sachsenhausen", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2050074.jpg", + "alt": "Altstadt, Straßencafe, Friedrich Stoltze Brunnen", + "caption": "Altstadt, Straßencafe, Friedrich Stoltze Brunnen", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2050076.jpg", + "alt": "Brot, Käse, Zwiebeln, Bembel, Hessen, Apfelwein", + "caption": "Brot, Käse, Zwiebeln, Bembel, Hessen, Apfelwein", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://imgsdb1.promobil.de/image/643abf81241b800008039999-websiteListThumb.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://imgsdb1.promobil.de/image/6488346058042f00086df924-websiteListThumb.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2050073.jpg", + "alt": "Deutsche Bank Park, Frankfurt Main, Stadion", + "caption": "Deutsche Bank Park, Frankfurt Main, Stadion", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/spielorte-em-2024-frankfurt/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/", + "title": "Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart", + "date": "Fri, 13 Oct 2023 09:00:00 +0200", + "summary": "

    Wegen seiner topographischen Lage wird Stuttgart gerne als \"Kessel\" bezeichnet. Wer zur Fußball-EM in die Stadt reist, darf sich auf ein vielfältiges Kultur- und Freizeitangebot freuen.

    ", + "text": "Wegen seiner topographischen Lage wird Stuttgart gerne als \"Kessel\" bezeichnet. Wer zur Fußball-EM in die Stadt reist, darf sich auf ein vielfältiges Kultur- und Freizeitangebot freuen.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2037929.jpg", + "alt": "Wasen, Camping, Caravans, Stellplatz", + "caption": "Wasen, Camping, Caravans, Stellplatz", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2037932.jpg", + "alt": "Schlossplatz, Stuttgart, Innenstadt, Wiese", + "caption": "Schlossplatz, Stuttgart, Innenstadt, Wiese", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2037927.jpg", + "alt": "Stuttgart, Süd, Kessel,Fernsehturm, Panorama", + "caption": "Stuttgart, Süd, Kessel,Fernsehturm, Panorama", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://imgsdb1.promobil.de/image/60955efd94da1206001a7a09-websiteListThumb.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://imgsdb1.promobil.de/image/5e64a6cdcf50f309006f9b3c-websiteListThumb.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2037928.jpg", + "alt": "Fußßball, Fans, Vfb Stuttgart, MHP Arena", + "caption": "Fußßball, Fans, Vfb Stuttgart, MHP Arena", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/", + "title": "Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen", + "date": "Mon, 18 Sep 2023 09:00:00 +0200", + "summary": "

    Armin Brysch, Professor für Tourismus-Management an der Hochschule Kempten, spricht mit promobil über das Reisen der Zukunft. Werden virtuelle Reisen die echten ersetzen?

    ", + "text": "Armin Brysch, Professor für Tourismus-Management an der Hochschule Kempten, spricht mit promobil über das Reisen der Zukunft. Werden virtuelle Reisen die echten ersetzen?", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2032100.jpg", + "alt": "Armin Brysch im Interview.", + "caption": "Armin Brysch im Interview.", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/termine-veranstaltungen-juni-juli/", + "title": "Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans", + "date": "Fri, 06 Jun 2025 12:00:00 +0200", + "summary": "

    Endlich wieder Zeit für Bulli-Treffen & Co! Entdecken Sie die besten Festivals und Events für Camper, Vanlife-Fans und Outdoor-Abenteurer in 2025.

    ", + "text": "Vanlife- und Bus-Treffen 2025: Events für Bulli-Lover und Campervan-Fans + Messen Abo Hefte Produkte Marken Anmelden Abo Menü Alle pro+ Artikel Finanzierung Wohnmobile Wohnwagen Zubehör Platzfinder Reiseplanung Ratgeber Fahrzeugmarkt Vanlife- und Bus-Treffen 2025: Events für Bulli-Lover und Campervan-Fans + Messen Vanlife-Events im Juni bis November 2025 : Events für Bulli-Lover und Campervan-Fans Endlich wieder Zeit für Bulli-Treffen & Co! Entdecken Sie die besten Festivals und Events für Camper, Vanlife-Fans und Outdoor-Abenteurer in 2025. Timo Großhans Veröffentlicht am 06.06.2025 Foto: Heiko p. Wacker 5 Bilder Nach einem langen Winter kommen nun endlich wieder die großen Treffen und Festivals – und wer das Abenteuer auf vier Rädern liebt, sollte sich die folgenden Events keinesfalls entgehen lassen. Ob Bulli-Festival, Offroad-Messe oder Vanlife-Treffen: In den kommenden Monaten stehen zahlreiche spannende Veranstaltungen für Camper, Vanlife-Enthusiasten und Outdoor-Fans auf dem Programm. Hier sind die wichtigsten Termine, die das Jahr 2025 zu einem unvergesslichen Erlebnis machen werden. Juni 2025 Midsummer Bulli Festival Datum: 19.–22. Juni 2025 Ort: Fehmarn Beschreibung: Deutschlands größtes Bullifestival direkt am Meer mit Show & Shine, Beachcamp und Live-Musik. Website: https://www.midsummerfestival.de Abenteuer & Allrad Datum: 19.–22. Juni 2025 Ort: Bad Kissingen Beschreibung: Europas größte Offroad- und Overlanding-Messe mit über 350 Ausstellern. Website: https://www.abenteuer-allrad.de Queer Summer Camp Datum: 19.–22. Juni 2025 Ort: Simmerath, Eifel Beschreibung: Ein queeres Campingerlebnis mit Community-Feeling am Rursee. Website: https://www.queer-summer-camp.de Juli 2025 California Festival Mimizan Datum: 4.–6. Juli 2025 Ort: Mimizan, Frankreich Beschreibung: Ein entspanntes Treffen für Bulli- und Vanlife-Enthusiasten an der französischen Atlantikküste mit Musik und Strandaktivitäten. Website: Infos pratiques californiafestival.fr Kastenwagentreffen Datum: 4.–6. Juli 2025 Ort: Bad Dürrheim Beschreibung: Ein Treffen für alle Kastenwagen-Fans mit Fokus auf Gemeinschaft und Erfahrungsaustausch. Website: https://www.kastenwagentreffen.de Caravan & Vanlife Meetup Datum: 11.–13. Juli 2025 Ort: Stuttgart, Böblingen Beschreibung: Ein Event für alle Camper mit Vorträgen, Offroad-Parcours und Live-Musik. Website: https://www.overlandvanlifefestival.com/ovfstuttgart Adventure Southside Datum: 18.–20. Juli 2025 Ort: Friedrichshafen Beschreibung: Outdoor- und Offroad-Messe mit Workshops, Kinderprogramm und Camping-Areal. Website: https://adventuresouthside.com/ Swiss Vanlife Festival Datum: 25.–27. Juli 2025 Ort: Yverdon-les-Bains, Schweiz Beschreibung: Vanlife & Outdoor Festival mit Fokus auf Nachhaltigkeit, Camping und Abenteuer. Website: https://www.vanlife.ch Busfestival Göppingen Datum: 25.–27. Juli 2025 Ort: Göppingen Beschreibung: Ein Festival für Busliebhaber mit Musik und Vanlife-Atmosphäre. Website: https://www.bus-festival.de August 2025 VW Bus Festival Berlin Datum: 14.–17. August 2025 Ort: Zossen, Deutschland Beschreibung: Treffen für VW Bus Begeisterte mit vielfältigem Programm und Community-Austausch. Website: www.vwbus-festival.de Vanlife Ferropolis Datum: 21.–24. August 2025 Ort: Ferropolis, Gräfenhainichen Beschreibung: Ein Festival auf einer Halbinsel mit Workshops, Live-Acts und Strandaktivitäten. Website: https://www.vanlife-ferropolis.de September 2025 VW Bus Treffen Hannover Datum: 5.–7. September 2025 Ort: Altwarmbüchener See, Hannover Beschreibung: Traditionelles Bulli-Treffen mit Flohmarkt, Lagerfeuer und Camping. Bullis auf Rügen Datum: 11. – 14. September 2025 Ort: Altenkirchen. Beschreibung: Das Familien-Bustreffen auf Deutschlands größter Insel. Bullis auf Rügen – Das Familienbustreffen auf Deutschlands größter Insel – Das Familien-Bustreffen auf Deutschlands größter Insel bullisaufruegen.de Bulli Summer Festival Datum: 4.–7. September 2025 Ort: Wesel Beschreibung: Ein großes Treffen für Bulli-Fans mit Musik, Foodtrucks und Gemeinschaftsgefühl. Website: Bulli Summer Festival – Dein Bulli, Dein Sommer. Busfest Datum: 12.–14. September 2025 Ort: Malvern, England Beschreibung: Das weltweit größte Treffen der VW-Bus-Freunde mit Show & Shine, Offroad-Wettbewerben und mehr. Website: https://www.busfest.org Adventure Northside Datum: 12.–15. September 2025 Ort: Gut Basthorst bei Hamburg Beschreibung: Messe für Offroad- und Vanlife-Enthusiasten mit Ausstellern und Vorträgen. Website: adventurenorthside.de Vanlife Treffen Allgäu Datum: 18.–21. September 2025 Ort: Lechbruck am See Beschreibung: Ein Treffen für Vanlife-Fans in malerischer Umgebung mit Workshops und Gemeinschaftsaktivitäten. Website: http://www.allgaeu-vans-treffen.de Oktober 2025 Caravan Live Datum: 2.–5. Oktober 2025 Ort: Freiburg Beschreibung: Messe für Caravaning und Vanlife mit Ausstellern und Vorträgen. Website: https://www.caravanlive.de Caravan Salon Austria Datum: 15.–19. Oktober 2025 Ort: Wels, Österreich Beschreibung: Internationale Messe für Caravaning und Camping. Website: https://www.caravan-wels.al Suisse Caravan Salon Datum: 23.–27. Oktober 2025 Ort: Bern, Schweiz Beschreibung: Schweizer Messe für Caravaning und Vanlife. Website: https://www.suissecaravansalon.ch November 2025 Caravan Bremen Datum: 7.–10. November 2025 Ort: Bremen Beschreibung: Messe für Caravaning, Camping und Vanlife in Norddeutschland. Website: https://www.caravan-bremen.de TC Touristik & Caravaning Datum: 19.–23. November 2025 Ort: Leipzig Beschreibung: Große Messe für Touristik, Caravaning und Vanlife mit vielen Ausstellern und Live-Vorträgen. Website: https://www.tc-messe.de Meist gelesen 1 Carado CV 541 PRO (2026) Spannender Campingbus mit separatem Wohnraum 2 Crosscamp ADVTR und Crosscamp EXPLR (2026) Campingbusse im Hymer-Style ab 50.000 Euro 3 Erste Fahrt im neuen Renault Master Alles neu bei Ahorn – Erster Test im T690 4 Fleurette Wellness-Wohnmobile(2026) Wellness auf Rädern oder nur ein schönes Wort? 5 Amazon Prime Day 2025 für Camper Camping-Zubehör stark reduziert bei Amazon Newsletter Jede Woche per E-Mail erfahren, was in der Wohnmobil-Welt neu ist: Fahrzeuge, Stellplätze, Zubehör und Technik. Plus: Ratgeber, Tests, Kauftipps und vieles mehr. Hier anmelden Angebote Caravaning Newsletter Shop Stellplatz-App Stellplatz-Atlas Themen A-Z Kreditrechner Wohnmobil finanzieren Information Kontakt AGB Nutzungsbedingungen Datenschutz Privacy Manager Datenschutzanfrage Barrierefreiheitserklärung Impressum Pur-Abo hier kündigen Redaktion Heftarchiv Abo & Hefte Heftarchiv Promobil Heftarchiv Caravaning Jahresinhalt Media Mediadaten Online Mediadaten Print © 2025 promobil ist ein Teil der Motor Presse Stuttgart GmbH & Co.KG Weitere Angebote der Motor Presse Stuttgart GmbH & Co. KG & Motor Presse Hamburg GmbH & Co. KG und deren Mehrheitsbeteiligungen Aerokurier Auto Motor und Sport Caravaning Cavallo Flugrevue Klettern mehr-tanken Men's Health Motorradonline Outdoor Promobil Runner's World Women's Health BikeX", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/termine-veranstaltungen-juni-juli/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/termine-veranstaltungen-juni-juli/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/1024791.jpg", + "alt": "Bulli-Treffen", + "caption": "Bulli-Treffen", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/termine-veranstaltungen-juni-juli/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/termine-veranstaltungen-juni-juli/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/termine-veranstaltungen-juni-juli/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/termine-veranstaltungen-juni-juli/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/termine-veranstaltungen-juni-juli/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/termine-veranstaltungen-juni-juli/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/termine-veranstaltungen-juni-juli/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/termine-veranstaltungen-juni-juli/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/termine-veranstaltungen-juni-juli/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/termine-veranstaltungen-juni-juli/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/termine-veranstaltungen-juni-juli/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/termine-veranstaltungen-juni-juli/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/", + "title": "Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl?", + "date": "Wed, 21 May 2025 11:00:00 +0200", + "summary": "

    Einen Kriminalfall beim Camping? Braucht man nur in der Urlaubslektüre. Wir zeigen nachrüstbare Ausrüstung, die Einbruch und Diebstahl erschwert.

    ", + "text": "Wie schütze ich mein Wohnmobil vor Diebstahl? Abo Hefte Produkte Marken Anmelden Abo Menü Alle pro+ Artikel Finanzierung Wohnmobile Wohnwagen Zubehör Platzfinder Reiseplanung Ratgeber Fahrzeugmarkt News Zubehör Wie schütze ich mein Wohnmobil vor Diebstahl? Alles über Gasfüllstände und Co Gas im Wohnmobil Schutz vor Einbruch und Diebstahl fürs Wohnmobil : Wie schütze ich mein Wohnmobil vor Diebstahl? Einen Kriminalfall beim Camping? Braucht man nur in der Urlaubslektüre. Wir zeigen nachrüstbare Ausrüstung, die Einbruch und Diebstahl erschwert. Sophia Pfisterer , Ingo Köcher Veröffentlicht am 21.05.2025 Foto: Fiamma 27 Bilder Der größte Albtraum ist, wenn man von einem Ausflug auf den Parkplatz oder Stellplatz zurückkommt und das Wohnmobil verschwunden ist oder Diebe das Campingfahrzeug aufgebrochen haben, alles durchwühlt ist und Wertgegenstände gestohlen sind. Neben dem unguten Gefühl, dass Fremde in den privaten Bereich eingedrungen sind, dem Ärger über die Schäden und Verluste, bleibt die Sorge, dass sich dies jederzeit wiederholen könnte. 5 Verhaltens-Tipps zum Schutz vor Diebstahl und Einbruch Eine einfache, technische Lösung des Problems sind verschiedene Zubehörkomponenten wie Zusatz-Sicherungen, Schlösser, Parkkrallen, Verriegelungen, GPS-Trackern und Alarmanlagen. Diese stellen wir weiter unten ausführlich vor. Gleichzeitig können einfache Verhaltensregeln das Risiko minimieren, dass im Wohnmobil eingebrochen wird bzw. dass es geklaut wird. Denn: Gelegenheit macht Diebe. Immer abschließen – auch bei kurzer Abwesenheit: Selbst beim schnellen Brötchenholen: Türen, Fenster und Dachluken verriegeln. Wertgegenstände außer Sicht verstauen: Keine Handys, Laptops oder Kameras sichtbar liegen lassen – Vorhänge oder Sichtschutz nutzen. Stellplatz mit Bedacht wählen: Bevorzugt auf offiziellen Campingplätzen oder gut beleuchteten, belebten Stellflächen übernachten. Nachbarschaftliche Aufmerksamkeit : Kontakt zu Nachbarn am Stellplatz halten – gegenseitiges Beobachten erhöht die Sicherheit. Fahrzeugpapiere separat und sicher aufbewahren : Niemals die Zulassungsbescheinigung Teil I (Fahrzeugschein) im Wohnmobil lassen – sonst wird Diebstahl für Profis noch einfacher. Besser: Im Geldbeutel oder an einem sicheren Ort außerhalb des Fahrzeugs aufbewahren. Zusätzliche Schlösser für Türen und Klappen Um das Aufbrechen des Fahrzeugs von außen zu verhindern, lassen sich Fahrerhaus-, Aufbau- und Garagentür sowie Serviceklappen von außen durch zusätzliche Schlösser sichern. Entsprechende Systeme bieten unter anderem Fiamma und Thule mit den sogenannten Security-Handgriffen. Die außen neben der Tür montierten Bügel sind über das Türblatt schwenk- und verschließbar. Auf diese Weise wird das Aufbrechen der Tür deutlich erschwert. Praktisch: Im offenen Zustand fungieren die Bügel als Handlauf und erleichtern das Ein- und Aussteigen. Zusätzliche Riegelschlösser zur Außenmontage haben unter anderem Heosolution mit dem Heosafe Riegelschloss und Thule mit Universal Lock und Door Frame Lock im Programm. Thule Security-Handgriffe sichern die Aufbautür zusätzlich. Auch innen im Fahrzeug lassen sich Türen und Klappen zusätzlich sichern. Für die Fahrerhaustüren bietet Fiamma mit Duo-Safe Pro eine Alustange , deren Enden unterhalb des Fensters in den Türrahmen gesteckt werden. Die teleskopierbare Stange lässt sich von 119 auf 190 Zentimeter verlängern und verhindert das Öffnen der beiden Türen. Die gleiche Wirkung erzielt man mit einer Kette, die in am Türrahmen montierte Metallösen eingehängt wird. Wiederum von Fiamma ist das Sicherheitsschloss Safe Door Guardian. Der Riegel des komplett aus Aluminium gefertigten Schlosses verriegelt bzw. öffnet per Drehbewegung Fahrerhaus-, Aufbau-, Garagentüren und Serviceklappen von innen. Türen und Klappen sichern Fiamma Safe Door Magnum , ab 87 Euro [Link auf https://www.awin1.com/cread.php?awinmid=70949&awinaffid=893807&clickref=pro-22102643-sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase&ued=https%3A%2F%2Fwww.fritz-berger.de%2Fartikel%2Ffiamma-einstiegshilfe-buegel-security-und-tuersicherung-1971] Fiamma Einstiegshilfe- und Sicherungsbügel Security , Preis ab 123 Euro Fiamma Duo Safe Pro Sicherheitsleiste , Preis ab 69 Euro [Link auf https://www.awin1.com/cread.php?awinmid=70949&awinaffid=893807&clickref=pro-22102643-sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase&ued=https%3A%2F%2Fwww.fritz-berger.de%2Fartikel%2Ffiamma-safe-door-guardian-innerer-sicherheitsblock-266765] Fiamma Safe Door Guardian Sicherheitsblock , Preis ab 77 Euro Heosolution Heosafe Riegelschloss , Preis ab 135 Euro Thule Universal Lock , Preis ab 101 Euro Fenster und Dachhauben verriegeln Spezielle Lösungen zur Sicherung vorgehängter Fenster als auch Rahmen- und Schiebefenster bietet Womo-Sicherheit. Das System für Ausstellfenster besteht aus einem Metall-U-Profil, das die Unterkante der Scheibe verstärkt. Im Innenraum werden am Fensterrahmen zwei verschließbare Gegenstücke montiert, die das Fenster rechts und links mit jeweils einer Rändelschraube halten. Für die Sicherung von Schiebefenstern im Fahrerhaus und Aufbau sowie für Dachluken sind zudem teleskopierbare Stangen im Programm. Benjamin Köbler-Linsner Fenster und Dachhauben sichern Womo-Sicherheit Ausstell- u. Rahmenfenstersicherung , Preis ab 99 Euro Womo-Sicherheit Dachhaubensicherung , Preis ab 83 Euro Wolfshund Schiebefenstersicherung , Preis ab 159 Euro Safe fürs Wohnmobil Wertsachen im Fahrzeug sichert man am besten in einem Tresor . Ein Safe lässt sich in Schränken und Stauräumen, im Doppelboden, als Türtresor oder in den Fahrerhaussitzkonsolen einbauen. Tresore in unterschiedlichen Größen liefern unter anderem Alko, Mobile-Safe, Milenco und Mobil. Wertsachen, Dokumente sicher lagern Alko Tresor , Preis ab 187 Euro Mobile-Safe Sitzkonsolensafe für Mercedes Sprinter , Preis ab 249Euro Mobile-Safe Türsafe für Fiat Ducato , Preis 249 Euro Milenco Sitzsockelsafe für Iveco Daily , Preis ab 199 Euro Mobil-Safe Standard Safe mit Doppelbartschloss , Preis ab 125 Euro Wegfahrschutz fürs Wohnmobil Automatische Wegfahrsperren verhindern unbefugtes Starten des Motors, indem sie die Zündung oder Kraftstoffzufuhr elektronisch unterbrechen. Sie funktionieren meist über einen Transponder-Schlüssel oder eine codierte Verbindung zwischen Schlüssel und Steuergerät, die nur bei korrekter Erkennung den Motorstart ermöglicht. Damit schützen sie vor Diebstahl, indem sie den Startvorgang ohne autorisierten Schlüssel blockieren. Für Camper bedeutet das mehr Sicherheit, besonders bei längeren Standzeiten oder an unbekannten Orten. Ist eine Wegfahrsperre nicht automatisch im Fahrzeug eingebaut, lässt sich der Camper mechanisch nachrüsten. Um das unbefugte Wegfahren des Wohnmobils zu verhindern, leisten Lenkrad-, Pedal- und Radkrallen sowie Pedal- und Ganghebelsperren gute Dienste. Wegfahrschutz Alca AutoSafe Pedal-Sperre , Preis ab 20 Euro Berger Radkralle , Preis ab 30 Euro Milenco BD Loc Pedalsperre für Fiat Ducato und Peugeot Boxer , Preis ab 150 Euro MEM Lenkradkralle für Lkw und Transporter , Preis ab 284 Euro Alarmanlagen und Bewegungsmelder Einbruchschutz bieten auch Alarmanlagen , die, an Fenstern, Dachhauben und Türen angebracht, bei gewaltsamem Aufhebeln ordentlich Lärm machen und je nach Modell eine Nachricht an eine angeschlossene Sicherheitszentrale oder das Smartphone senden. Die Geräte sind zum Teil mit Bewegungsmelder und Trackingsystem ausgestattet. Solche Systeme bekommt man ab 55 Euro. Anbieter sind unter anderem Bosch, Carbest, Dometic, Milenco und Thitronik. Tipp: Eine abschreckende Wirkung für Gelegenheitsdiebe haben oft auch schon entsprechende Warnaufkleber an den Scheiben. Alarmanlagen und Bewegungsmelder Bosch Spexor , Preis ab 230 Euro Carbest Protect-On Camper 849 für Fiat Ducato , Preis ab 259 Euro Dometic Magic Safe MS 660 , Preis ab 63 Euro Milenco Autoalarm , Preis ab 147 Euro Thitronik Funk-Alarmanlage WiPro III safe.lock , Preis ab 399 Euro Trackingsysteme fürs Fahrzeug Zudem lassen sich gestohlene Wohnmobile mit GPS-Trackingsystemen orten. Hierzu wird ein Sender versteckt im Fahrzeug eingebaut, der dann über das Mobilfunknetz und GPS die Auffindung des Fahrzeugs ermöglicht. Anbieter sind unter anderem Blaupunkt mit BPT 1500+, Dethleffs mit Vehicle Defence, Mc Ortung mit SP2+Z und PAJ GPS mit Power Finder. Die Systeme laufen mit eigener Batterie oder Starterbatteriestrom. Wichtig zu wissen: Für die Ortung des Fahrzeugs können weitere Kosten durch die Nutzung der integrierten SIM-Karte entstehen. Trackingsysteme CaraSave Alarmsystem mit GPS-Version , Preis ab 599 Euro Blaupunkt: BT 1500+ , Preis ab 179 Euro Dethleffs Vehicle Defence , Preis ab 269 Euro Mc Ortung SP 2+Z, Preis ab 236 Euro PAJ-GPS Power Finder, Preis ab 140 Euro YUKAtrack Ortungssystem easyWire GPS , ab 115 Euro Meist gelesen 1 Carado CV 541 PRO (2026) Spannender Campingbus mit separatem Wohnraum 2 Crosscamp ADVTR und Crosscamp EXPLR (2026) Campingbusse im Hymer-Style ab 50.000 Euro 3 Erste Fahrt im neuen Renault Master Alles neu bei Ahorn – Erster Test im T690 4 Fleurette Wellness-Wohnmobile(2026) Wellness auf Rädern oder nur ein schönes Wort? 5 Amazon Prime Day 2025 für Camper Camping-Zubehör stark reduziert bei Amazon Mehr zum Thema Gas Gasprüfung für Campingfahrzeuge Pflicht ab 2025 Ohne Gasplakette droht Campern eine Strafe Tipps & Tricks Gasbetrieb im Wohnmobil und Wohnwagen Kühlschrank während der Fahrt laufen lassen? Tipps & Tricks Vorteile von Gastanks im Wohnmobil Gastank oder Gasflasche - Was ist besser? Zubehör Mobile Satelliten-Antennen fürs Camping Tragbare Sat-Anlagen für fast unbegrenzten Empfang Zubehör Gas im Wohnmobil und Wohnwagen Gasflaschen, Filter, Füllstandsanzeige und Co Themen Gaswarner im Wohnmobil So schütze Sie sich vor unsichtbaren Gasen Zubehör Truma-Chef Wottrich im Interview Wird Gas beim Campen von Alternativen abgelöst? Zubehör Mehr anzeigen Newsletter Jede Woche per E-Mail erfahren, was in der Wohnmobil-Welt neu ist: Fahrzeuge, Stellplätze, Zubehör und Technik. Plus: Ratgeber, Tests, Kauftipps und vieles mehr. Hier anmelden Angebote Caravaning Newsletter Shop Stellplatz-App Stellplatz-Atlas Themen A-Z Kreditrechner Wohnmobil finanzieren Information Kontakt AGB Nutzungsbedingungen Datenschutz Privacy Manager Datenschutzanfrage Barrierefreiheitserklärung Impressum Pur-Abo hier kündigen Redaktion Heftarchiv Abo & Hefte Heftarchiv Promobil Heftarchiv Caravaning Jahresinhalt Media Mediadaten Online Mediadaten Print © 2025 promobil ist ein Teil der Motor Presse Stuttgart GmbH & Co.KG Weitere Angebote der Motor Presse Stuttgart GmbH & Co. KG & Motor Presse Hamburg GmbH & Co. KG und deren Mehrheitsbeteiligungen Aerokurier Auto Motor und Sport Caravaning Cavallo Flugrevue Klettern mehr-tanken Men's Health Motorradonline Outdoor Promobil Runner's World Women's Health BikeX", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/1840128.jpg", + "alt": "Sicherheitszubehör - Einbruchs und Diebstahlschutz", + "caption": "Sicherheitszubehör - Einbruchs und Diebstahlschutz", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1840180.jpg", + "alt": "Sicherheitszubehör fürs Wohnmobil", + "caption": "Sicherheitszubehör fürs Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1840185.jpg", + "alt": "Sicherheitszubehör fürs Wohnmobil", + "caption": "Sicherheitszubehör fürs Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2211040.jpg", + "alt": "Gasplakette", + "caption": "Gasplakette", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2178259.jpg", + "alt": "Absorberkühlschrank, Carado T 471", + "caption": "Absorberkühlschrank, Carado T 471", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1798546.jpg", + "alt": "Gastank-Einbau", + "caption": "Gastank-Einbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2195898.jpg", + "alt": "Sat-Anlagen, Dom-Antenne, Flach-Antenne, mobile Sat-Anlage, feste Sat-Anlage", + "caption": "Sat-Anlagen, Dom-Antenne, Flach-Antenne, mobile Sat-Anlage, feste Sat-Anlage", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1934330.jpg", + "alt": "Vergleich Chausson vs. Hobby", + "caption": "Vergleich Chausson vs. Hobby", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1765700.jpg", + "alt": "Gaswarner im Wohnmobil", + "caption": "Gaswarner im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2135374.jpg", + "alt": "Alexander Wottrich Interview", + "caption": "Alexander Wottrich Interview", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/", + "title": "Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8?", + "date": "Thu, 20 Feb 2025 06:00:00 +0100", + "summary": "

    Fiat verspricht, mit einem Software-Update die Probleme mit der Ducato 9-Gang-Automatik zu lösen. Doch hält die Maßnahme, was sie verspricht? Wir wollen es wissen und haben nach Ihren Erfahrungen gefragt.

    ", + "text": "Sie sind gefragt! Was bringt das Softwareupdate für den Fiat Ducato? Abo Hefte Produkte Marken Anmelden Abo Menü Alle pro+ Artikel Finanzierung Wohnmobile Wohnwagen Zubehör Platzfinder Reiseplanung Ratgeber Fahrzeugmarkt News Wohnmobile Sie sind gefragt! Was bringt das Softwareupdate für den Fiat Ducato? Leserstimmen zum Update der 9-Gang-Automatik : Was bringt das Softwareupdate für den Ducato 8? Fiat verspricht, mit einem Software-Update die Probleme mit der Ducato 9-Gang-Automatik zu lösen. Doch hält die Maßnahme, was sie verspricht? Wir wollen es wissen und haben nach Ihren Erfahrungen gefragt. Samira Matschinsky Veröffentlicht am 20.02.2025 Foto: Kohstall 3 Bilder Im vergangenen Jahr häuften sich Probleme mit der 2019 von Fiat neu eingeführten 9-Gang-Automatik, vor allem bei Wohnmobilen, die die 3,5 Tonnen überschritten. Es erreichten uns zahlreiche Berichte von Leserinnen und Lesern, die im Urlaub mit ihrem Wohnmobil von gelb und rot aufleuchtenden Getriebelämpchen und der Motorkontrollleuchte überrascht wurden. Nach einem Softwareupdate oder einem Ölwechsel wurden viele Besitzerinnen und Besitzer mit ihren Wohnmobilen wieder nach Hause geschickt, bis sie, teilweise nur wenige Tage später, wieder vor den Toren der Werkstatt standen. Die finale Diagnose in vielen Fällen: Getriebeschaden . Hier geht es zu den Erfahrungen unserer Leserinnen und Leser. Sie sind gefragt! Was bringt das Software-Update? Die aktuellste Entwicklung ist nun ein Update der Steuerungssoftware von Motor und Getriebe, das künftig Probleme bzw. Defekte verhindern soll. Vorgesehen ist das Update für mit der 9-Gang-Wandlerautomatik ausgestattete Ducato-Modelle der Generation 8, die mit den 2,2-Liter-Motoren mit 160 und 180 PS bestückt sind. Die Fiat-Professional-Werkstätten wurden Anfang November des letzten Jahres über das Update informiert und haben entsprechende Instruktionen erhalten. promobil möchte dieser Lösung nun auf den Zahn fühlen und hat Sie, liebe Leserinnen und Leser, nach ihren Erfahrungen gefragt. Die Erfahrungen unserer Leserinnen und Leser! Das neue Software-Update für die 9-Gang-Wandlerautomatik des Fiat Ducato soll künftig Getriebeschäden verhindern und das Zusammenspiel von Motor und Getriebe verbessern – doch wie sieht es in der Praxis aus? Noch Wochen nach unserem ersten Aufruf melden sich immer noch Leserinnen und Leser per Mail bei uns und berichten von ihren Erfahrungen mit der 9-Gang-Automatik. Nicht wenige dieser Zuschriften erzählen noch immer von Getriebeschäden und Werkstatt-Odyssee. Hier kam das Update zu spät. Doch die ersten Wohnmobile haben nun auch das Software-Update erhalten, welches künftig Probleme mit dem Getriebe der 9-Gangautomatik verhindern soll. Keine langen Wartezeiten für den Termin Bei etwas über 50 Zuschriften zum Software-Update berichtet der überwiegende Teil von positiven Erfahrungen. \"Nach einer Wartezeit von 2 Wochen konnten wir den Wagen abgeben und haben ihn innerhalb einer Woche wieder bekommen\", schreibt beispielsweise Andreas Neubert am 10.01.2025. Das Schaltverhalten sei seither \"definitiv besser, aber nicht optimal\". Martin Döller bekam innerhalb einer Woche einen Termin. Die Aktion habe dann genau 45 Minuten gedauert. Seither merke er \"keinen Unterschied beim Fahren\". Auch Gerry Schönewolf bekam innerhalb weniger Tage einen Termin für das Update. Was genau gemacht wurde, habe man ihm nicht gesagt. Insgesamt fühle sich das Update aber \"nicht schlecht an\". Er habe aber das Gefühl, dass das Wohnmobil im unteren Drehzahlbereich mehr Drehmoment habe und früher schalte. \"Allerdings habe ich auch den Eindruck, dass beim Beschleunigen oberhalb von 80–90 km/h etwas Leistung fehlt und das Fahrzeug dort träger wirkt\" schildert Schönewolf. Peter Neye bekam für seinen Roller Team innerhalb einer Woche einen Termin. Der sei auf 2 Stunden angesetzt gewesen. \"Da aber noch ein paar Kleinigkeiten geprüft werden sollten, blieb das Fahrzeug über Nacht\", schreibt er. \"Bei der Abholung wurde mir erklärt, was alles gemacht wurde. Das Personal war kompetent und freundlich. Ich werde mein Fahrzeug also wieder dort zum Service hinbringen\". Zum Fahrverhalten nach dem Update schreibt er: \"Das Fahr- und Schaltverhalten hat mich vor dem Update schon begeistert und ich muss zugeben, dass ich keine Veränderung nach dem Update feststellen konnte\". Dauer: 45 Minuten bis 2 Stunden So oder so ähnlich ergeht es auch zahlreichen anderen Lesern und Leserinnen. Meist verläuft der Termin zwischen 45 Minuten und zwei Stunden. Wenn das Update im Rahmen anderer Maßnahmen durchgeführt wird, bleibt das Fahrzeug auch mal über Nacht oder sogar die ganze Woche. Nicht jede Werkstatt klärt dabei den Kunden über Sinn und Zweck des Updates auf. Einige wenige LeserInnen berichten auch davon, dass ihre Werkstatt von dem Update nichts gewusst hat oder sie sogar aufgefordert wurden, eine Gebühr für das eigentlich kostenlose Update zu zahlen. Über das Update informierte die Werkstatt bei Vorstellung Von ihrer Werkstatt oder ihrem Händler informiert worden sind ebenfalls die wenigsten. Häufiger kam das Update im Rahmen einer Überprüfung oder eines Servicetermins zur Sprache. Einige sprachen die Werkstatt auch auf das Update an, nachdem sie bei uns oder in einem Forum davon gelesen hatten. Die meisten bekamen dann jedoch schnell einen Termin. Fahrverhalten nach dem Update unauffällig Mit der Getriebe-Problematik im Hinterkopf horchen Wohnmobil-Besitzer nach einem solchen Termin natürlich ganz genau in ihr Fahrzeug hinein. Dabei stellen die meisten nach dem Update jedoch keine bis eher geringe Unterschiede fest. Vereinzelte Kunden glauben eher eine Verbesserung im Fahrverhalten erspüren zu können, insbesondere bei höheren Geschwindigkeiten. In Einzelfällen wird allerdings von verminderter Leistung, einem höheren Verbrauch oder – in einem Fall – sogar von einem Getriebeschaden kurz nach dem Update berichtet. Dieser könnte aber natürlich auch bereits in den Grundzügen bestanden haben, bevor das Update aufgespielt wurde. Zudem erwähnen einzelne LeserInnen, dass sie bereits mehrere tausend Kilometer mit dem Update gefahren sind, ohne dass sich Probleme bemerkbar gemacht hätten. Diese Berichte sind ermutigend, liefern jedoch noch keinen endgültigen Beweis dafür, dass das Update flächendeckend wirkt und das Risiko von Getriebeschäden signifikant reduziert. Weitere Leserstimmen zum Software-Update Schreitter Jürgen , am 10.01.2025, per Mail : \"Wir haben einen gebrauchten Malibu T 430 LE mit 180PS Automatik gekauft (20.500 km). Auch ich hatte im Vorfeld von der Problematik gehört, allerdings erst, als ich den Kaufvertrag bereits unterschrieben hatte. Als ich die FIN mitgeteilt bekam, habe ich mich bei Fiat registriert und mich dort vorab informiert. Dann hab ich mir einen sehr guten Fiat Händler in der Gegend gesucht und über ihn meine FIN zur Überprüfung geschickt. Fahrverhalten vor dem Update : Sehr unruhig und viel zu hohe Drehzahlen im 1.-2. Gang zu spüren, selbst bei sanftem Gasfuß. Ebenfalls kam ich auf der Autobahn selbst bei 120+ km/h nicht in den 9. Gang. Fahrverhalten nach dem Update : Ein absoluter Traum, Schaltvorgänge sind nicht zu spüren, selbst mein DSG 7 von VW Tiguan schaltet ruppiger. Verbrauch ca. 1,5-2 Liter geringer, 9. Gang bereits ab Tempo 95 km/h in Gebrauch und das nicht nur auf der Autobahn, sondern auch auf Landstraßen. Gefühlt zieht er kultivierter und angenehmer die Steigungen hoch.\" Oliver Öhlenberg , am 24.01.2025, per Mail : \"Wir wurden leider nicht von Fiat bzw. Bürstner kontaktiert, sondern haben über verschiedene Camper Foren bzw. der Presse von dem Update erfahren. Wir haben unseren FIAT Händler darauf angesprochen und dieser hat gesagt, das liege daran, dass Bürstner einen Kaufvertrag mit FIAT eingegangen ist und daher FIAT den eigentlichen Endkunden nicht kennt. Er hat auch gesagt, dass bei größeren Problemen mit dem Fahrzeug es eigentlich so sein sollte, dass der Endkunde eigentlich zum Bürstner Händler gehen muss, damit dieser dann das Fahrzeug an eine FIAT-Werkstatt bringen muss. Er hatte gerade mit dem Getriebe immer wieder den Fall, dass FIAT bei einem Getriebeaustausch ihm nur die Stunden bezahlt, welche man benötigt, um das Getriebe bei einem normalen Ducato zu tauschen. Der Zeitaufwand, gerade bei einem Vollintegrierten, ist aber wesentlich höher. Die Differenz muss entweder der Endkunde zahlen, oder der Aufbauhersteller. Da es in Köln nur noch einen FIAT Professional Händler gibt, welcher große Wohnmobile (über 6m) bearbeiten kann, mussten wir ca. 2 Monate auf einen Termin warten. 2 Tage dauerte dann das Update, da am eigentlichen Tag es ein Problem bei FIAT am Server gab und kein Update heruntergeladen werden konnte. Bis jetzt fährt das Fahrzeug wie vorher.\" Claus Bergmann , am 11.01.2025, per Mail : \"Wir fahren einen Malibu T460 Baujahr 03/2024. Wir haben 180PS mit der 9-Gang-Automatik (bislang 7.000 km ohne Probleme). Aufmerksam geworden sind wir zum einen über die Carthago Gruppe in Facebook, zum anderen über den Artikel in ihrer Zeitung. Ich bin im Oktober dann zu Fiat bezüglich eines Termines wegen des Updates und konnte 4 Wochen danach hinfahren. Den Termin hatte ich um 7.30 Uhr und rollte um 8.10 Uhr wieder vom Platz. Das lief alles sehr problemlos. Was ich schade fand, dass man mir nicht sagen konnte, was das Update macht. Der Inhaber sagte, sie hätten eine Update-Nummer, mehr auch nicht. Das fand ich schon verwunderlich, dass diese Informationen nicht vorlagen. Sprich, ich weiß bis heute nicht, was genau gemacht wurde. Ich bin bislang nicht viel gefahren, jedoch merkte ich, dass es früher schaltet und der 9. Gang schneller erreicht wird als früher. Bei ca. 100 km/h schaltet er in den neunten Gang, das war früher definitiv nicht der Fall.\" Jens Birkenkötter , per Mail: \"Die Abwicklung war sehr gut. Termin vereinbart, zwei Wochen später das neue Software Update bekommen.\" So haben wir gefragt: Haben Sie das Update schon gemacht? Wurden Sie aktiv von Fiat kontaktiert oder haben Sie auf anderen Wegen von dem Update erfahren? Wie schnell haben Sie einen Termin für das Update erhalten? Wie lange dauerte der Werkstattbesuch? Haben Sie Veränderungen im Fahrverhalten Ihres Ducato festgestellt – vor und nach dem Update? Haben Sie vorher Probleme mit dem Getriebe erlebt, und wenn ja, welche? Wurden Sie über den Update-Vorgang und dessen Ziele ausreichend informiert? Wie bewerten Sie den Service von Fiat Professional und den Ablauf der Aktion insgesamt? Meist gelesen 1 Carado CV 541 PRO (2026) Spannender Campingbus mit separatem Wohnraum 2 Crosscamp ADVTR und Crosscamp EXPLR (2026) Campingbusse im Hymer-Style ab 50.000 Euro 3 Erste Fahrt im neuen Renault Master Alles neu bei Ahorn – Erster Test im T690 4 Fleurette Wellness-Wohnmobile(2026) Wellness auf Rädern oder nur ein schönes Wort? 5 Amazon Prime Day 2025 für Camper Camping-Zubehör stark reduziert bei Amazon Newsletter Jede Woche per E-Mail erfahren, was in der Wohnmobil-Welt neu ist: Fahrzeuge, Stellplätze, Zubehör und Technik. Plus: Ratgeber, Tests, Kauftipps und vieles mehr. Hier anmelden Angebote Caravaning Newsletter Shop Stellplatz-App Stellplatz-Atlas Themen A-Z Kreditrechner Wohnmobil finanzieren Information Kontakt AGB Nutzungsbedingungen Datenschutz Privacy Manager Datenschutzanfrage Barrierefreiheitserklärung Impressum Pur-Abo hier kündigen Redaktion Heftarchiv Abo & Hefte Heftarchiv Promobil Heftarchiv Caravaning Jahresinhalt Media Mediadaten Online Mediadaten Print © 2025 promobil ist ein Teil der Motor Presse Stuttgart GmbH & Co.KG Weitere Angebote der Motor Presse Stuttgart GmbH & Co. KG & Motor Presse Hamburg GmbH & Co. KG und deren Mehrheitsbeteiligungen Aerokurier Auto Motor und Sport Caravaning Cavallo Flugrevue Klettern mehr-tanken Men's Health Motorradonline Outdoor Promobil Runner's World Women's Health BikeX", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/1605269.jpg", + "alt": "Fiat Ducato 9 Speed Automatik", + "caption": "Fiat Ducato 9 Speed Automatik", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/", + "title": "Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun!", + "date": "Sat, 23 Nov 2024 12:00:00 +0100", + "summary": "

    Die Versicherungspolicen für Wohnmobile werden 2025 deutlich teurer. Warum die Kosten steigen und wie Sie dennoch sparen können.

    ", + "text": "Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun!\n\nWohnmobilbesitzer erleben 2025 einen Preisschock: Versicherungspolicen für Wohnmobile werden deutlich teurer. Im Allgemeinen berichten Camper von Preiserhöhungen um bis zu 60 % für ihre Versicherungsprämien. Auslöser sind gestiegene Reparatur- und Ersatzteilkosten, hohe Schadensquoten aus den letzten Jahren und Inflation.\n\nVersicherungsunternehmen führen diese Preiserhöhungen durch, um Verluste auszugleichen und ihre Risiken anzupassen. So werten Regional- und Typenklassen das Risiko des Wohnortes des Halters sowie das Schaden-und Reparaturrisiko eines bestimmten Fahrzeugtyps. Weiterhin tragen datenbasierte Tarifmodelle, die u.a. das Fahrverhalten oder die Nutzungshäufigkeit des Wohnmobils berücksichtigen, zur Erhöhung bei. \n\nTrotzdem gibt es Möglichkeiten, die erhöhten Kosten zu kompensieren, z. B. durch den Vergleich verschiedener Anbieter, die Erhöhung der Selbstbeteiligung, die Prüfung des Leistungsumfangs, die Minimierung von Risikofaktoren, die Betreuung durch Makler, eine Neueinstufung oder den Wechsel während der Wechselsaison. \n\nJe nachdem könnte es sich lohnen, einen Versicherer anzurufen oder zu einem Maklerbüro zu wechseln, der bessere Möglichkeiten zur Verhandlung mit den Versicherern hat.", + "tags": [ + "1. \"Versicherungserhöhung 2025\"", + "2. \"Wohnmobilversicherung\"", + "3. \"Kosten sparen bei Versicherungen\"" + ], + "status": "Online", + "link": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2160053.jpg", + "alt": "Wohnmobil, Liegenbleiben, Motorschaden, Panne", + "caption": "Wohnmobil, Liegenbleiben, Motorschaden, Panne", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/" + }, + { + "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-YimPc01cYtOXjUpCATUqDABw/user-eA31w0vmy3fOrb3G64Ygndsr/img-yKWdGDCQJZBOCQ4V4HoD40A0.png?st=2025-07-28T06%3A27%3A26Z&se=2025-07-28T08%3A27%3A26Z&sp=r&sv=2024-08-04&sr=b&rscd=inline&rsct=image/png&skoid=cc612491-d948-4d2e-9821-2683df3719f5&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-07-27T22%3A07%3A39Z&ske=2025-07-28T22%3A07%3A39Z&sks=b&skv=2024-08-04&sig=HUMRhg2FbaKnLil%2BMbyvNemVeBcrvTODpctkfQyFHPc%3D", + "alt": "KI-generiertes Titelbild zu: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun!", + "caption": "KI-generiertes Titelbild zu: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun!", + "copyright": "OpenAI DALL·E", + "copyright_url": "https://openai.com/dall-e" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/", + "title": "Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans", + "date": "Mon, 02 Oct 2023 16:00:00 +0200", + "summary": "

    Welcher Radiosender läuft bei Ihnen im Reisemobil oder Campingbus? Seit Juli 2023 gibt es einen Radiosender speziell für Camperinnen und Camper.

    ", + "text": "Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans\n\nCaravan.fm ist ein neuer Radiosender exklusiv für Camping-Fans. Dieser Sender, der im Juli 2023 startete, sendet rund um die Uhr ein programm, das auf die Bedürfnisse von Campern abgestimmt ist. Neben Mainstream-Musik bietet der Sender Kurznachrichten und europaweites Reisewetter. Zudem behandelt das Programm verschiedene Themen rund um das Camping. Caravan.fm, initiiert von Radio Hamburg, kann weltweit per Stream über die Webadresse www.caravan.fm und über die dazugehörige App empfangen werden. Zukünftig soll der Sender auch über DAB+ empfangbar sein. \n\nDas tägliche Programm umfasst die \"CARAVAN.fm-Brötchenshow\" am Morgen, die \"CARAVAN.fm-Mittagspause\" und die \"CARAVAN.fm-Happy Hours\" am Abend. Nachts gibt es ununterbrochen Musik. Zudem bietet der Sender freitags und samstags eine Sendung mit dem Namen \"CARAVAN.fm-Lagerfeuer\", bei der stimmungsvolle Indie- und Akustiksongs passend zur Lagerfeuer-Romantik gespielt werden. \n\nDie Redaktionsleiterin des Senders, Linn MacKenzie, sieht in ihrem Job die Möglichkeit, das Gefühl von Ruhe und Leidenschaft, das sie beim Campen empfindet, an die Zuhörer weiterzugeben und somit das perfekte musikalische Begleitprogramm für ihre Campingabenteuer zu bieten.", + "tags": [ + "1. Camping-Radio", + "2. Caravan.fm", + "3. Outdoor-Unterhaltung" + ], + "status": "Online", + "link": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2035069.jpg", + "alt": "Camper-Radio​", + "caption": "Camper-Radio​", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220349.jpg", + "alt": "Carado CV 541, 2026, Außenaufnahme", + "caption": "Carado CV 541, 2026, Außenaufnahme", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220724.jpg", + "alt": "Crosscamp ADVTR 5.4", + "caption": "Crosscamp ADVTR 5.4", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219725.jpg", + "alt": "Ahorn", + "caption": "Ahorn", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2220327.jpg", + "alt": "Fleurette Wellness Sonderedition 2030", + "caption": "Fleurette Wellness Sonderedition 2030", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2219414.jpg", + "alt": "Teaser Amazon Prime Day 2025", + "caption": "Teaser Amazon Prime Day 2025", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/camper-radio-radiosender-caravan-fm/" + } + ], + "source": "https://www.promobil.de/rss/news" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/", + "title": "Film-Stunt mit Caravan – wie realistisch ist das?: Sexsymbol Jensen Ackles wagt Stunt auf Wohnwagen", + "date": "Thu, 24 Jul 2025 18:00:00 +0200", + "summary": "

    Für die Serie \"Countdown\" risikiert Schauspieler Jensen Ackles einen waghalsigen Stunt. Warum Sie das nicht nachmachen sollten.

    ", + "text": "Jensen Ackles dürfte spätestens seit seiner Rolle als Soldier Boy in der Amazon-Prime-Serie \"The Boys\" ein Begriff sein. Zum Staffelstart haben sein blanker Hintern und die enormen Views am ersten Tag mal kurz den Streamingdienst zum Erliegen gebracht. Hartgesottene Fans kennen ihn noch aus seiner Rolle als Dean Winchester in der Serie Supernatural. Stunt mit Wohnwagen Momentan läuft er mit seiner neuen Serie \"Countdown\" auf Amazon Prime, in der unter anderem Schauspieler Eric Dane mitspielt (bekannt aus Grey's Anatomy). In dieser Serie wagt er in Folge sechs einen verrückten Stunt auf einem Wohnwagen. Die Verfolgung eines Verdächtigen führt die Taskforce, der Jensen Ackles Charakter Mark Meachum angehört, zu einem Trailerpark in der Wüste Kaliforniens. Bei der Überprüfung eines Wohnwagens setzt sich dieser plötzlich in Bewegung. Jensen Ackles, im Inneren des Caravans gefangen, wagt während der Fahrt ein riskantes Manöver, um vom Wohnwagen auf das Zugfahrzeug zu gelangen. Natürlich erhält der Schauspieler dabei Unterstützung von einem Stuntdouble. Die Szenen zeigen dabei auf, wie gefährlich es wäre, wenn jemand sich während der Fahrt im Inneren eines Wohnwagens aufhalten würde. Natürlich ist die rasante Verfolgung mit dem Wohnwagen-Gespann in der Serie ein übertriebenes Beispiel. Im wahren Leben würden leichte Kurven ausreichen, um Insassen und lose Gegenstände durch den Innenraum fliegen zu lassen. Vor allem, da vom Wohnwagen aus nicht ersichtlich ist, in welche Richtung das Zugfahrzeug fährt, anders als im Wohnmobil. Riskante Fahrmanöver mit Wohnwagen Dass nicht nur der Stunt riskant ist, sondern auch die wilde Fahrt mit dem Gespann, kann wohl jeder Wohnwagen-Fahrende verstehen. Wohnwagen angehängt am Pkw können ähnlich einem Pendel schnell unkontrolliert von einer zur anderen Seite schwenken. Schnell schaukelt sich das Gespann so auf, bis der Wohnwagen kippt. Solche Unfälle passieren regelmäßig auf der Autobahn. Drei einfache Tipps helfen gegen Pendeln Gewichte richtig verteilen : Möglichst tief und unter Einhaltung der Stützlast nahe der Achse packen. Gewicht reduzieren : Schwere Gegenstände besser in den Zugwagen packen. Fahrgeschwindigkeit anpassen . In der Serie Countdown ist natürlich alles nur Show. In der Realität sollten Sie Ihre Fahrweise stets an die Umgebung anpassen. Außerdem sind auf deutschen Autobahnen ohnehin maximal 100 km/h mit dem Gespann erlaubt. Wohnwagen als Nebenrollen in weiteren Serien Jensen Ackles liefert übrigens eine weitere Verbindung zu Wohnwagen in Serien. In seiner Rolle als Beau Arlen spielte er den Sheriff in der Serie \"Big Skys\", der in einem Airstream wohnte. Einen solchen bewohnt auch sein Serien-Bruder Colter Shaw (Justin Hartley) in der Serie Tracker (Disney+).", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://www.promobil.de/_next/static/img/logos/car.svg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2224948.jpg", + "alt": "Jensen Ackles Wohnwagen Stunt", + "caption": "Jensen Ackles Wohnwagen Stunt", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/", + "title": "CLEVER CAMPEN Podcast Folge 40: Gravelbikes und Camping – die beste Kombi?", + "date": "Tue, 22 Jul 2025 14:10:00 +0200", + "summary": "

    Gravelbikes und Camping: die perfekte Symbiose aus Freizeitsport, Abenteuergeist und Komfortbedürfnis. Warum diese beiden so gut zusammenpassen und welche Hindernisse es zu überkommen gilt, lesen und hören Sie hier.

    ", + "text": "Wer bei uns auf promobil.de unterwegs ist, wird bereits verstanden haben, dass Camping für uns die ultimative Urlaubsform ist. Vielleicht teilen Sie dieses Hobby sogar und können ebenso leidenschaftliche Plädoyers für oder gegen private Bäder auf Campingplätzen halten, wie unsere Redakteurinnen und Redakteure. Oder Sie schnuppern gerade frisch die erste Campingluft. Dann garantieren wir Ihnen: Camping wird Sie nie wieder loslassen . Doch wie steht es eigentlich um die sportlichen Hobbys der CamperInnen? Jeder kennt das Klischee des Campers , der in Flipflops und Badehose vor seinem Wohnmobil oder Wohnwagen im Liegestuhl liegt. Meist mit einer ordentlichen Plauze und einem beginnenden Sonnenbrand. Doch ist dieses Bild nicht vielleicht genau das: ein Klischee? Schauen wir uns auf den Straßen um, hat inzwischen jeder dritte Camper die Fahrräder dabei: am Heck, im Heck, auf der Deichsel oder dem Dach des Zugwagens. Sie sind das zweitliebste Fortbewegungsmittel der CamperInnen. Um hier gleich ein weiteres Klischee vorzubeugen: Nicht jeder Campende ist dabei mit Tiefeinsteiger-Rahmen und E-Motor am Zweirad unterwegs – auch wenn daran natürlich nichts Falsches zu finden ist. Im Jahr 2024 verkaufte der Fachhandel in Deutschland insgesamt 3,85 Millionen Fahrräder , davon 53 Prozent Elektrofahrräder (Quelle: ADFC). Elektrische Mountainbikes sind dabei immer noch der absolute Spitzenreiter, doch der Trend (vor allem in den Städten) geht zum Gravelbike oder sogar Rennrad . Wer etwas auf sich und sein Image hält, hat so ein sportliches, schlankes Fahrrad mit gebogenem Lenker zumindest im Keller stehen. Und so stellen wir uns die Frage: Gehört ein Gravelbike bald in jede Heckgarage? Da wir Camping-ExpertInnen sind, die sich eher mit den Klischees über Camping auseinandersetzen, haben wir uns für ein paar Antworten Felix und Moritz vom Podcast \"Faszination Rennrad\" eingeladen. Die beiden sollten uns erklären, was es mit dem Trendsport bzw. dem Trend-Rad auf sich hat und warum wir unbedingt Teil des Trends sein sollten. Im Gegenzug beantworten wir den beiden ihre Fragen zum Thema Camping. Hier geht es zur Podcastfolge auf Spotify und hier können Sie direkt reinhören: Unsere Erkenntnisse: 7 Fragen, 7 Antworten Wir haben in diesem Podcast einige sehr grundlegende Fragen gestellt, die uns beschäftigt haben. Hier haben wir sieben Fragen und deren Antworten kurz zusammengefasst: Warum sehen Rennradsättel so unbequem aus – und was bringen die \"Windelhosen\" wirklich? Rennradsättel sind so geformt, dass sie die Sitzposition des Fahrers unterstützen und die Belastung optimieren. Die speziellen Radhosen verhindern Druckstellen und erhöhen den Komfort bei langen Fahrten. Was kostet der Einstieg ins Gravelbiken – und ab wann macht’s wirklich Spaß? Ein gutes Gravelbike startet bei etwa 1.000 Euro, für den optimalen Fahrspaß empfiehlt sich ein Budget von 3.000 bis 5.000 Euro. Hier bekommst du ein leichteres Rad mit besserer Ausstattung und Komfort. Wie viele Kilometer fährt man am Anfang – und gehören Höhenmeter gleich dazu? Einsteiger können mit 20-30 km beginnen und die Strecke langsam steigern. Wenn man sich fit fühlt, können ein paar Höhenmeter hinzukommen, aber es geht zuerst um die Distanz. Was mache ich eigentlich drei Stunden lang im Sattel – außer treten? Neben dem Treten kann man Musik hören, Podcasts genießen oder sich einfach in der Umgebung verlieren. Der Fokus liegt auf der Bewegung und dem Naturerlebnis, obwohl es manchmal anstrengend wird. Gibt es Gravelbike-Strecken abseits von Straßen und Verkehr? Ja, viele Gravelbike-Strecken führen über unbefestigte Wege wie Waldautobahnen, Wirtschaftswege und Feldwege, die einen großartigen Mix aus Abenteuer und Natur bieten. Was soll dieser gebogene Lenker am Rennrad – und wo greift man da überhaupt hin? Der gebogene Lenker ermöglicht verschiedene Griffpositionen: flacher für Geschwindigkeit, mittig für mehr Komfort und oben für eine entspannte Haltung – ideal für längere Fahrten. Wo zeigt sich die Verbindung von Rennrad und Camper am besten? Für Felix und Moritz zeigt sich die Synergie zwischen Camping und dem Radsport besonders während der Tour de France, wo Fans in ihren Campern schon Tage vorher anreisen, um die Radrenn-Action hautnah direkt an der Strecke zu erleben – ein großes Event, das Menschen aus aller Welt zusammenbringt. Unsere Tipps für Gravelbike-Camping-Touren Wenn Sie den perfekten Camping-Ausflug mit dem Gravelbike planen, gibt es ein paar Dinge zu beachten: Die richtige Region wählen: Gravelbiken und Campen passen perfekt zusammen, vor allem in Regionen wie Südtirol, die nicht nur fantastische Fahrradstrecken bieten, sondern auch eine ausgezeichnete Campinginfrastruktur. Diese Regionen sind bestens auf Radreisende vorbereitet, mit speziellen Unterstellmöglichkeiten und Fahrradwaschstationen. In Frankreich gibt es Regionen, die bekannt dafür sind, Radsportler anzuziehen und eine angenehme Mischung aus sanften Steigungen und atemberaubenden Ausblicken zu bieten. Den richtigen Campingplatz ansteuern Neben der Region ist auch die Wahl des Campingplatzes entscheidend. Vom Stellplatz mit minimaler Infrastruktur bis hin zu speziell auf Mountainbiker und Outdoor-Freaks vorbereiteten Plätzen, die Fahrradwaschstationen und SUP-Verleih anbieten, gibt es viele Optionen. Für die Entspannung nach der anstrengenden Tour können a Wellness-Campingplätze eine Überlegung wert sein. Überlegen Sie sich im Vorfeld, was Sie benötigen, was Sie mitbringen können und wollen, und welche zusätzlichen Bedürfnisse Ihre Mitreisenden haben. Wer mit Kindern reist, sollte vielleicht auf ein gutes Freizeitangebot achten. Und wer gerne schwimmt, sollte einen Campingplatz mit Seezugang in Betracht ziehen. Wahl des richtigen Fahrzeugs Für Gravelbikende, die flexibel unterwegs sein wollen, ist die Wahl des richtigen Fahrzeugs entscheidend. Wer minimalistisch reist und viel draußen unterwegs ist, wird mit einem Campervan in VW-Bus-Größe gut zurechtkommen. Wenn mehr Komfort gewünscht wird und man mit guten Straßen erschlossenen Regionen reist oder größere Ausrüstung dabei hat, kann ein kompakter Selim-Teilintegrierter eine gute Wahl sein. Für diejenigen, die ein Zwischending suchen, ist ein Campingbus in Transportergröße ideal – hier gibt es oft ein kleines Bad und genügend Platz, um Fahrräder (bis zu vier Stück) zu transportieren. Ein Camperbad eignet sich auch gut für das Aufhängen von schmutziger Ausrüstung nach einer langen Tour – selbst wenn man lieber in den Sanitäreinrichtungen des Campingplatzes duscht.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2220083.jpg", + "alt": "Salsa Cutthroat,Gravelbike,Test,Gesamtansicht", + "caption": "Salsa Cutthroat,Gravelbike,Test,Gesamtansicht", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/", + "title": "Stellplatz-Radar Sommeraktion 2025: 30 Tage Stellplatz-Radar PLUS gratis testen", + "date": "Mon, 21 Jul 2025 09:55:00 +0200", + "summary": "

    Jetzt Gutscheincode einlösen und die App Stellplatz-Radar 30 Tage lang kostenfrei mit allen Funktionen nutzen. Und so geht’s!

    ", + "text": "Pünktlich zum Sommer startet die Stellplatz-Radar-App eine exklusive Sonderaktion: Neue Nutzerinnen und Nutzer haben jetzt die Möglichkeit, 30 Tage lang alle Plus-Funktionen der App komplett kostenlos zu nutzen! Löse hierzu einfach den Gutscheincode SOMMER25 in der Stellplatz-Radar App ein. Die Stellplatz-Radar PLUS Features Spare mit dem Code SOMMER25 * und profitiere 30 Tage lang von den erweiterten Funktionen wie: Erweiterte Suche & Filter Suche gezielt nach Ausstattung (z. Strom, WLAN, Ver- & Entsorgung) Filtere beispielsweise nach Preis, Entfernung oder Bewertung Routenplanung für Camper Plane individuelle Routen für Wohnmobile & Campervans Integration von Stellplätzen direkt entlang der Route Favoriten & Merklisten Speichere Stellplätze in eigenen Listen für spätere Reisen Werbefreie Nutzung Keine Banner oder Popups – volle Konzentration auf die Stellplatzsuche Schnellere Ladezeiten & bessere Performance Optimiertes Nutzererlebnis ohne Wartezeiten Ideal für alle, die unterwegs komfortabel und entspannt reisen möchten. So löst du den Gutscheincode SOMMER25* direkt in deiner App ein App über den QR-Code downloaden App öffnen Melde dich über das Menü an oder registriere dich neu und kostenlos Öffne den Menüpunkt \"Plus-Upgrade\" Löse den Code SOMMER25* über die Schaltfläche \"Gutscheincode einlösen\" ein", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2222499.jpg", + "alt": "30 Tage Stellplatz-Radar PLUS gratis testen", + "caption": "30 Tage Stellplatz-Radar PLUS gratis testen", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2222501.jpg", + "alt": "Stellplatz-Radar-App QR Code", + "caption": "Stellplatz-Radar-App QR Code", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2222500.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/", + "title": "Digitaler Fahrzeugschein für Camper: promobil testet den digitalen Fahrzeugschein", + "date": "Tue, 15 Jul 2025 16:20:00 +0200", + "summary": "

    Der digitale Fahrzeugschein soll endlich Realität werden. Die Pilotphase läuft seit April, im zweiten Halbjahr 2025 soll die App für alle Kfz-Inhaber nutzbar sein.

    ", + "text": "Seit Ende April läuft die offizielle Pilotphase des digitalen Fahrzeugscheins in der i-Kfz-App des Bundesministeriums für Verkehr und des Kraftfahrt-Bundesamts. 2.500 Nutzer testen auf ihren Smartphones die Anwendung und ihre Kernfunktionen, geben Feedback und helfen, die Prozesse zu optimieren. promobil gehört zum exklusiven Kreis der Pilotnutzer. Der in der App hinterlegte digitale Fahrzeugschein bietet viele Vorteile: vereinfachte, übersichtliche Darstellung der hinterlegten Werte automatische Erinnerung an fällige HU-Termine Möglichkeit, den Fahrzeugschein digital und ortsunabhängig zu teilen. Halter mehrerer Fahrzeuge können immer alle Fahrzeugscheine mitführen Fahrzeugschein kann über weite Distanzen in der App geteilt werden, falls er in geliehenen Fahrzeugen fehlt So gut ist die i-Kfz-App abgesichert Die Sicherheitsvorkehrungen der i-Kfz-App ähneln denen moderner Banking-Apps. Um einen digitalen Fahrzeugschein in die App zu laden, ist die sichere Identifikation als Halter mittels E-ID über den neuen Personalausweis notwendig. Erst wenn man sich als Halter ausgewiesen hat, werden die Fahrzeugdaten des jeweiligen Fahrzeuges vom Kraftfahrt-Bundesamt abgefragt und als digitaler Fahrzeugschein in der i-Kfz-App hinterlegt. Es wird den digitalen Fahrzeugschein für alle Fahrzeuge und Anhänger geben. Das schließt Wohnmobile, Campingbusse, Wohnwagen, Motorräder, Roller oder Autos mit ein. Halter können sich alle Fahrzeugscheine für ihren Fuhrpark in die App laden und sie dort mit anderen Nutzern teilen. Das funktioniert in näherem Umfeld per QR-Code oder über größere Distanzen mithilfe eines Links, der sich verschicken lässt. Der Halter kann dabei festlegen, wie lange er den Fahrzeugschein teilen will, oder ihn unbegrenzt freigeben. Digitaler Fahrzeugschein für Campende Sein Funktionsumfang macht den digitalen Fahrzeugschein zum perfekten Werkzeug für Camperinnen und Camper. Wer die digitalen Dokumente für alle Fahrzeuge auf dem Smartphone dabei hat, kann beruhigt ins Wohnmobil steigen, auf dessen Heckträger der Roller steht. Vorn im Zugfahrzeug müssen sich Reisende nicht mehr fragen, wo hinten die Papiere für den Wohnwagen deponiert sind. Privates Verleihen von Campingfahrzeugen wird durch den digitalen Fahrzeugschein sorgenfreier. Noch befindet sich der digitale Fahrzeugschein in der Pilotphase. Doch laut dem Bundesministerium für Verkehr soll die i-Kfz-App nach Abschluss der Pilotphase voraussichtlich im Verlauf des zweiten Halbjahrs 2025 für die öffentliche Nutzung angeboten werden. Dann soll diese für IOS und Android-Geräte in den jeweiligen App-Stores erhältlich sein. Gültig ist der digitale Fahrzeugschein vorerst nur in Deutschland. Wer die Bundesrepublik verlässt, sollte die Fahrzeugpapiere weiterhin mitführen. Integration des digitalen Führerscheins geplant In der ersten Phase lässt sich in der i-Kfz-App nur der digitale Fahrzeugschein hinterlegen. Das Bundesministerium für Verkehr möchte zukünftig auch den digitalen Führerschein in die Anwendung integrieren. Er befindet sich in der Vorbereitungsphase für die nationale Einführung. Wann es den EU-weit gültigen digitalen Führerschein geben wird, hängt von der Verabschiedung und Umsetzung der vierten EU-Führerscheinrichtlinie ab. Die Abstimmungsarbeiten zwischen Europäischem Rat und EU-Parlament sind mittlerweile abgeschlossen. Die neuen EU-Führerscheinregeln werden derzeit rechtskonform in die Sprachen der 27 Mitgliedsländer übersetzt, bevor Rat und Parlament darüber offiziell abstimmen können. Inhalt der neuen Richtlinie ist auch die Erweiterung des B-Führerscheins für Wohnmobile bis 4,25 Tonnen.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2216772.jpg", + "alt": "Happy older man traveler sitting in camper van using mobile in camping.", + "caption": "Happy older man traveler sitting in camper van using mobile in camping.", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1834994.jpg", + "alt": "Digitaler Führerschein", + "caption": "Digitaler Führerschein", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/", + "title": "Badezimmer beim Camping - Umfrage: Welches Bad brauchen Sie im Wohnmobil?", + "date": "Sun, 13 Jul 2025 14:00:00 +0200", + "summary": "

    Wie viel Bad benötigen Sie im Wohnmobil und wie intensiv nutzen Sie Waschbecken, Dusche und WC? Sind Sie mit Ihrem Bad zufrieden?

    ", + "text": "Für viele Reisemobilisten ist das gut ausgestattete Bad ein wichtiges Kaufkriterium. Denn: Eine vollständige Nasszelle mit Waschbecken, Dusche und Toilette macht Wohnmobilreisende autark. Der Luxus, eine Toilette und ein Waschbecken dabeizuhaben, gehört für die meisten zum Wohnmobilurlaub dazu. Doch schon bei der Dusche scheiden sich die Geister. Die einen sehen sie als Platzverschwendung, andere dagegen genießen die Freiheit, die sich durch ein vollständiges Bad im Wohnmobil bietet. Welches Bad hat Ihr Wohnmobil und wie nutzen Sie es? Wirklich bequem duschen lässt sich nicht in jedem Wohnmobil. Oft ist die Nasszelle in einem Raum auf der Fahrerseite zwischen Sitzgruppe und Bett positioniert. Darin ist die Duschtasse gleichzeitig der Boden. Häufig wird so der ganze Raum zur Dusche, mit einer Faltwand oder einem Duschvorhang als Spritzschutz. Eine clevere Lösung für mehr Platz beim Duschen bietet das Schwenkbad: Darin wird meist das an einer Wand montierte Waschbecken zum Duschen seitlich über die Toilette geschoben. An der Rückseite der Wand befindet sich die Duscharmatur, und sie dient gleichzeitig als Duschabtrennung. Ergänzend gibt es häufig noch eine Klappwand oder einen Duschvorhang, der die übrigen Wände und die Badtür vor Feuchtigkeit schützt. Deutlich mehr Komfort bieten Wohnmobile mit einer abgetrennten Duschkabine im Bad oder separat, etwa auf der gegenüberliegenden Fahrzeugseite. Luxuriös sind Raumbäder mit eigenem Toilettenraum und Duschkabine. Oft haben diese einen direkten Zugang zum Schlafzimmer. Neben den genannten Varianten gibt es unzählige weitere Badlösungen im Wohnmobil: vom platzsparenden Kompaktbad mit Duscherweiterung in den Flur hinein bis zum Heckbad über die gesamte Fahrzeugbreite. Wie nutzen Sie das Bad in Ihrem Wohnmobil? Dienen Waschbecken, Toilette und Dusche nur als Backup, nutzen Sie nur einzelne Einrichtungen oder ausschließlich die eigene Nasszelle? Mehr zu den Badvarianten in Wohnmobilen lesen Sie hier: Bäder im Wohnmobil . Wie zufrieden sind Sie mit dem Bad in Ihrem Wohnmobil? Das Waschbecken ist zu klein, der Duschvorhang klebt am Körper und auf dem Klo baumeln die Beine. Was für den einen Camper wie gemacht ist, sorgt beim anderen für Verdruss. Meist erkennt man die Schwachstellen im Wohnmobilbad erst dann, wenn man zum ersten Mal mit dem zu kurzen Duschschlauch kämpft oder sich vom Thron aus zur Klopapierrolle verrenkt. Auch fehlende Handtuchhaken und Lüftungsöffnungen, knapper Stauraum oder windige Armaturen können für Unmut im Wohnmobilbad sorgen. Was nervt Sie am Bad in Ihrem Wohnmobil? Haben Sie Dinge selbst optimiert oder war alles von Anfang an in Ordnung für Ihren Anspruch? Für welches Bad würden Sie sich beim Neukauf entscheiden? Bei der Entscheidung für ein neues Wohnmobil spielt die Frage nach dem Bad und seiner Größe eine maßgebliche Rolle. Erfahrenen Campern fällt die Auswahl deutlich leichter als Neueinsteigern ohne einschlägige Erfahrungen. Doch auch wer sich schon zu den alten Hasen zählt, sollte seine aktuellen Bedürfnisse reflektieren und gleichzeitig an die Zukunft denken: Reisegewohnheiten können sich ändern und damit kann auch das Bad einen neuen Stellenwert bekommen. Wer etwa irgendwann von der Hauptsaison auf die Nebensaison umschwenkt, kann in manchen Regionen schon Mitte September vor verschlossenen Campingplatztüren stehen und ist plötzlich mit Stellplätzen ohne Sanitärinfrastruktur konfrontiert. Oder man entdeckt Städtereisen mit dem Wohnmobil für sich und übernachtet gern mitten im Zentrum auf einfachen Stellplätzen. promobil will herausfinden: Welchen Stellenwert hatte das Bad für Sie bei der Auswahl Ihres Wohnmobils? Für welche Badlösung würden Sie sich heute beim Kauf eines Wohnmobils entscheiden? Schreiben Sie uns! Bei der Umfrage mitmachen und gewinnen! Senden Sie uns Ihre Meinung bis zum 21. Juli 2025 per E-Mail an thema-des-monats@promobil.de . Unter allen Einsendungen verlosen wir eines unserer aktuellen promobil-Sonderhefte nach Wunsch und Verfügbarkeit. Bitte fügen Sie Ihrer Einsendung möglichst ein Porträtfoto von sich bei, das wir zusammen mit Ihrem Meinungsbeitrag in promobil veröffentlichen dürfen; Ihre Chance auf Veröffentlichung erhöht sich dadurch. Datenschutzhinweis : Wenn Sie uns eine Anfrage stellen oder ein Feedback geben, speichern wir Ihre Kontaktdaten und Ihren Text (Art. 6 Abs. 1 lit. f DSGVO). Ihre Zuschrift hilft uns, unser Informationsangebot in unseren Medien zu verbessern. Wir geben Ihre Daten nicht an Dritte weiter. Wir behalten uns vor, Ihre Zuschrift zusammen mit Ihrem Namen in unseren Zeitschriften promobil und CARAVANING und gegebenenfalls auch auf unserer Website www.promobil.de, sowie unseren Social-Media-Kanälen zu veröffentlichen. Sie können der Speicherung Ihrer Daten jederzeit mit Wirkung für die Zukunft widersprechen ( datenschutz@motorpresse.de ). Wir werden dann die gespeicherten Daten umgehend löschen. Im Übrigen löschen wir Ihre Daten spätestens nach Ablauf eines halben Jahres bzw. im Falle einer Veröffentlichung im Internet, wenn wir der Ansicht sind, dass die Frage nicht mehr interessant für unsere NutzerInnen ist. Mehr zum Datenschutz unter www.promobil.de/datenschutz .", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2220868.jpg", + "alt": "Dethleffs Family XL", + "caption": "Dethleffs Family XL", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2220871.jpg", + "alt": "Schwenkwand", + "caption": "Schwenkwand", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2220869.jpg", + "alt": "Sunliving S 72 DL", + "caption": "Sunliving S 72 DL", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1835793.jpg", + "alt": "Gebraucht-Kauf Ratgeber", + "caption": "Gebraucht-Kauf Ratgeber", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1836156.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2149628.jpg", + "alt": "Gefuehrte Wohnmobilreisen i", + "caption": "Gefuehrte Wohnmobilreisen i", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1555475.jpg", + "alt": "Hagelschäden am Wohnmobil", + "caption": "Hagelschäden am Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2153790.jpg", + "alt": "Sanitär-Autarkie - Frischwasser", + "caption": "Sanitär-Autarkie - Frischwasser", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2078412.jpg", + "alt": "CMT 2024 Wohnmobil-Messekauf", + "caption": "CMT 2024 Wohnmobil-Messekauf", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2147777.jpg", + "alt": "Adria Super Twin etnhüllung auf der Messe", + "caption": "Adria Super Twin etnhüllung auf der Messe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/", + "title": "Umfrage zum Kaffeegenuss beim Camping: So kochen Sie am liebsten Ihren Kaffee", + "date": "Sat, 12 Jul 2025 14:00:00 +0200", + "summary": "

    Für viele Camperinnen und Camper kann der Tag erst nach einer guten Tasse Kaffee beginnen. So bereiten Sie Ihren Kaffee im Wohnmobil zu!

    ", + "text": "Kaffee ist für viele der Wachmacher Nummer Eins. Auf dem Camping- oder Stellplatz kann er auch zur Kontaktaufnahme dienen. Wohl dem, der seinen Camping- oder Stellplatznachbarn einen Espresso, einen Cappuccino oder einen gepflegten Filterkaffee anbieten kann. Doch wie bei vielem sind auch beim Kaffeegenuss die Geschmäcker verschieden. Wir haben Sie gefragt, welches Ihr bevorzugtes Heißgetränk im Campingurlaub ist und wie Sie es zubereiten. Die Antworten finden Sie unten . Haben Sie eine Kaffeemaschine im Wohnmobil? Die einen schwören auf technisch ausgefeiltes Equipment mit automatischem Milchaufschäumer, andere vertrauen auf die gute alte Filtermaschine oder den Perlator von Bialetti und Co. Puristen brühen mit heißem Wasser in der French Press oder mit einem Filterhalter selbst auf. Ganz Abgebrühte machen sich das Leben mit Instant-Pulver leicht. Welche Methoden zum Kaffeekochen nutzen Sie im Campingurlaub? Wo verstauen Sie Ihr Kaffee-Equipment während der Fahrt im Wohnmobil? Viele Wohnmobilhersteller bieten inzwischen clevere Lösungen, um eine Kaffeemaschine im Wohnmobil gut zu verstauen. Absenkbare Schränke oder spezielle Regale erleichtern Kaffeeliebhabern das Leben im Wohnmobil. Zum Teil kann man die Kapselmaschine samt Kapselhalter gleich mitbestellen. Haben Sie eine spezielle Lösung für den Kaffeemaschinentransport im Wohnmobil? Oder haben Sie sich selbst einen geeigneten Ort für die Unterbringung während der Fahrt gesucht? Ihre Antworten zum Kaffeegenuss Karin und Harald Pauler: Ein Wasserkessel für den Gasherd, Filter und Filtertüte; so bereiten wir unseren Kaffee im Wohnmobil seit mehr als 30 Jahren zu. Und am Nachmittag gerne auch mal einen Espresso aus der alten Espressokanne. Ingrid und Hannes Drechsler: Für eine schmale Kapselmaschine mit integriertem Milchschäumer haben wir auf Arbeitshöhe im Apothekerschrank einen Auszug montiert. Während der Fahrt dient Schaumstoff zum Schutz und das Fach wird mit einem Schieber fixiert. Utz Graafmann: Mit einem Briki, einem kleinen Mokkakännchen, bereiten wir auf dem Gasherd griechischen Kaffee zu. Er hat ein tolles Aroma und einen perfekten Kaimaki, also die \"Crema\" beim griechischen Kaffee. Urlaubserinnerungen an Griechenland inklusive. Gertrudis Laggai: Meinen Espressokocher verwende ich für normalen Kaffee mit Kaffeepads. Das schmeckt hervorragend und der Kocher ist schnell zu reinigen, da sich kein loses Kaffeepulver darin befindet. So habe ich einen Kocher für normalen Kaffee und für Espresso dabei. Allerdings gibt es nicht in allen Ländern Kaffeepads, daher informieren und genügend Pads mitnehmen. Urs Bichler: Als echte Kaffeeliebhaber haben wir viele Möglichkeiten ausprobiert. Heute genießen wir unseren Kaffee aus einer Mini-Nespresso-Maschine, die wir mit Landstrom oder mit einer Eco-Flow-Powerstation betreiben. Sie hat ihren festen Platz an der Küchenwand in einer Halterung von Käpsele. Margret und Werner: Unsere Coffee B Maschine betreiben wir mit Landstrom, ansonsten gibt es zur Not löslichen Kaffee. Die Kaffee-Kugeln sind kompostierbar und somit nachhaltig. Carsten Languth: Wir benutzen ein Kaffeekonzentrat von Moin. Wasser kochen, einen Messlöffel hinzufügen und fertig. Es gibt viele Sorten und die kleinen Fläschchen sind leicht zu verstauen. Kerstin Anders: Vor drei Jahren waren wir noch mit Instantkaffee unterwegs. Inzwischen kaufen wir unterwegs bei kleinen, lokalen Röstereien Kaffee. Der wird in der French Press mit Thermofunktion zubereitet. Manche Rösterei bietet auch Tassenkaffeefilter an. Die klemmt man in die Tasse und übergießt sie mit heißem Wasser. Gerd Lowig: Ich mahle den Kaffee in einer Handmühle und bereite ihn in der French Press zu. Harald Homm: Mit Landstrom ist unser Saeco-Vollautomat die erste Wahl. Stehen wir autark, wird die French Press von Waldwerk ausgepackt. Walter Kaiser: Als Gourmet-Banausen (in Bezug auf die Kaffeezubereitung im Camper-Van) verwenden wir Nescafé Gold. Ganz so übel ist das Gebräu nicht, kochendes Wasser gibt es immer und es steht nichts herum und man muss keine Kaffeereste entsorgen. Birte und Rainer: Echten Kaffee wie bei Oma gibt es bei uns. Kessel, Wasser kochen, Filter auf Thermoskanne, Kaffeepulver aufgießen. Der Vorteil ist, dass so gleich ein Liter Kaffee fertig ist und der Nachbar gerne einen Becher mittrinken darf.", + "tags": [], + "status": "Online", + "link": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2198084.jpg", + "alt": "Kaffeemaschinen", + "caption": "Kaffeemaschinen", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/", + "title": "Zwei Menschen, zwei Meinungen: Das Mietbad spaltet die Campingwelt", + "date": "Sat, 12 Jul 2025 11:00:00 +0200", + "summary": "

    Privates Bad am Stellplatz: Komfort pur oder Verrat am Camping? Zwei Redakteur:innen diskutieren, was das Mietbad wirklich bedeutet.

    ", + "text": "Ein privates Mietbad auf der Campingplatz-Parzelle ist wie ein VIP-Bereich fürs Zähneputzen – nur ohne Türsteher. Statt Flipflop-Marsch durchs Morgengrauen geht’s direkt von der Matratze aufs eigene WC. Dusche, Spiegel, Klobrille – alles da, alles sauber, alles zur alleinigen Nutzung. Privatbad auf dem Campingplatz – ja oder nein? Die einen feiern die neue Form des Komforts als zeitgemäßes Angebot. Die anderen kritisieren: Mietbäder fördern das Eigenbrötlertum, steigern Kosten und entfremden vom klassischen Campinggefühl. Ist ein privates Bad direkt an der Parzelle ein Fortschritt oder ein Rückschritt fürs Camping? An kaum einem Thema scheiden sich die Geister unter Camperinnen und Campern so sehr wie an dieser Frage. Zwischen Naturnähe und Komfortanspruch, Gemeinschaft und Rückzug – Zwei Redaktionsmeinungen, zwei Perspektiven, ein Thema: Wie viel Privat-Bad verträgt das Camping? Philipp Heise: Klare Kante gegen Mietbäder! Die Campingwelt verändert sich – und nicht jede Entwicklung ist ein Fortschritt. Mietbäder auf der eigenen Parzelle versprechen auf den ersten Blick Komfort, doch sie werfen auch grundlegende Fragen auf, wohin sich Camping entwickelt. Als Fachredakteur, der sein Hobby lebt, sehe ich den Trend zu privaten Sanitärkabinen mit Sorge – und das nicht nur, weil ich am liebsten unparzelliert oder bestenfalls frei stehe beim Campen. Warum? Weil Mietbäder für mich eine Abkehr vom eigentlichen Wesen des Campings bedeuten. Verlust des Camping-Gefühls Camping war immer mehr als nur eine Urlaubsform. Es ist ein Lebensgefühl. Es geht um Naturverbundenheit und auch um eine materielle Reduktion, die hilft, dem Alltag in einer Überflussgesellschaft zu entfliehen. Wer sich ein eigenes abgeschlossenes Bad direkt an die Parzelle mietet, grenzt sich ab. Der Schritt zur abgeschotteten Ferienwohnung im Grünen ist dann nicht mehr weit. Es entsteht ein künstlicher Komfortraum, der mit klassischem Camping wenig zu tun hat. Warum noch mit dem Freizeitmobil verreisen, wenn man sich vor Ort dann die Annehmlichkeiten eines Ferienapartments nachbaut? Weniger Gemeinschaft Camping lebt von Begegnung. Der morgendliche Plausch am Waschhaus, das Zähneputzen neben anderen Reisenden aus aller Welt – das sind die kleinen Momente, die verbinden. Mietbäder fördern jedoch die Abschottung. Wer alles privat hat, begegnet niemandem mehr zufällig. Der Campingplatz verkommt so zur Parzellenansammlung mit eigenem Sanitärtrakt. Höhere Kosten – für Camper und Betreiber Mietbäder treiben die Preise hoch – für Stellplätze wie für deren Wartung. Camper, die auf diese Form der \"Luxus-Parzelle\" verzichten möchten, zahlen oft mit dank insgesamt höherer Gesamtpreise. Für Betreiber bedeuten der Unterhalt und die Reinigung privater Sanitäranlagen einen erheblichen Mehraufwand. Widerspruch zur Naturverbundenheit Camping steht für Reduktion, für bewusstes Leben in und mit der Natur. Die Errichtung privater Bäder auf jeder Parzelle wirkt diesem Gedanken entgegen: versiegelte Flächen, zusätzliche Infrastruktur, höherer Wasser- und Energieverbrauch. Und zu guter Letzt wandeln sie das optische Erscheinungsbild eines Campingplatzes stark hin zu einer Mini-Reihenhaussiedlung. Fazit : Mietbäder mögen bequem sein – aber sie sind ein Komfort, der das Camping einen Teil seiner Essenz raubt. Statt naturnah und gemeinschaftlich wird es individuell und abgeschottet. Es entsteht eine Art Zweiklassengesellschaft, die das Knüpfen neuer Kontakte weiter erschwert. Wenn wir nicht aufpassen, verwandeln sich unsere Campingplätze schleichend in Reihenhaussiedlungen mit Urlaubsanstrich. Sophia Pfisterer: Privates Mietbad, gönn ich mir! Ich habe viele Nächte in Stockbetten verbracht. Habe mit Stirnlampe auf Festivals das Zelt gesucht, mit nassen Flipflops in Gemeinschaftsduschen gestanden und während Corona die Hände vor und nach dem Klogang desinfiziert. Entgegenkommende Camperinnen und Camper nickten mir zu. Es war intensiv – und irgendwie schön. Aber heute wünsche ich mir etwas mehr \"Chill Pill\". Seitdem ich mit kleinem Kind reise, stelle ich fest: Nicht jede Situation lässt sich mit einem Schulterzucken und einem fröhlichen \"Das gehört dazu\" lösen. Heute freue ich mich über Mietbäder auf der Parzelle – nicht aus Bequemlichkeit, sondern aus dem Bedürfnis nach Routine und Verlässlichkeit. Glamping ist kein Verrat an der Idee – sondern ihre Weiterentwicklung Camping ist nicht nur wild und reduziert. Es ist das, was wir daraus machen. Ich sehe Mietbäder nicht als Abschottung, sondern als Wahlfreiheit. Glamping ist für mich der Beweis, dass Camping mitwachsen kann – mit dem Leben, mit der Familie, mit den Ansprüchen. Wer eine atomare Windelexplosion nachts eindämmen oder einem Kleinkind (sprich: zappeligem Dinosaurier) die Zähne putzen muss, lernt ein sauberes, privates Bad zu schätzen. Und wenn ich nach einem langen Campingtag 5 Minuten ungestört mit warmem Wasser duschen kann, habe ich schlicht mehr Energie für das, was draußen zählt: das Lagerfeuer, die Natur, die Begegnung. Gemeinschaft braucht Raum – auch Rückzugsraum In Südspanien stand ich einmal auf einem wunderschönen Campingplatz, weitläufige Parzellen unter Bäumen, direkt am Strand. Doch irgendwas mit der Wasserversorgung war faul. Die Toiletten liefen über, teilweise waren sie so randvoll, dass wir schnell das Weite gesucht haben. Der Angestellte an der Rezeption schaute nur mitleidig: \"Si, claro\", sagte er, und wir bekamen unser Geld zurück. Es war schon so ein Albtraum – mit kleinem Kindosauraus rex, das alles ableckt? Der blanke Bakterien-Horror! Die Begegnungen auf Campingplätzen gehören für mich dazu: das kurze Schwätzchen am Spülbecken, die Urlaubsfreundschaften bei den Großen wie Kleinen. Und genauso genieße ich es, abends die Tür hinter mir zu schließen – und mein Buch zu lesen. Gemeinschaft darf für mich nicht bedeuten, dass ich meinen Wunsch nach Ruhe und Rückzug komplett aufgeben muss. Gemeinschaft entsteht nicht im Mangel, sondern im geteilten Erleben – gerne draußen, gerne am Grill, aber nicht zwangsläufig in der Duschkabine. Ja zu Vielfalt auf dem Platz Nicht jeder Camper und jede Camperin ist gleich. Manche reisen minimalistisch, andere mit Komfortanspruch. Das Schöne an modernen Campingplätzen: Sie können beides. Mietbäder sind ein Angebot, kein Zwang. Das Gemeinschaftsbad wird's weiterhin geben. Vielleicht nutze ich es sogar irgendwann mal wieder. Gleichwohl empfinde ich es als Gewinn, wenn Menschen mit besonderen Bedürfnissen – Familien mit kleinen Kindern, Senioren, Menschen mit Mobilitätseinschränkung – sich auf dem Campingplatz willkommen und wohl fühlen. Komfort ist keine Bedrohung, sondern eine Einladung. Fazit : Mietbäder rauben dem Camping nicht die Seele – sie geben der Urlaubsform neue Möglichkeiten. Wer diesen Komfort ablehnt, soll das tun. Aber wer ihn braucht, sollte sich nicht schämen müssen. Denn wahres Campinggefühl entsteht nicht im Bad – sondern draußen, wo wir uns begegnen.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2221475.jpg", + "alt": "Emsland Camp, Stellplatz", + "caption": "Emsland Camp, Stellplatz", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2200233.jpg", + "alt": "LMC Edero 400 C (2025) Sofa", + "caption": "LMC Edero 400 C (2025) Sofa", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2221474.jpg", + "alt": "Ferienpark Beerze Bulten, Privatbad", + "caption": "Ferienpark Beerze Bulten, Privatbad", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1928382.jpg", + "alt": "Mercedes Marco Polo 300 d AMG-Line (2023) Test", + "caption": "Mercedes Marco Polo 300 d AMG-Line (2023) Test", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2221472.jpg", + "alt": "Ferienpark Beerze Bulten, Privatbad", + "caption": "Ferienpark Beerze Bulten, Privatbad", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/", + "title": "Zubehör auf der größten Campingmesse kaufen: Deshalb müssen Zubehör-Shopper zum Caravan Salon", + "date": "Mon, 07 Jul 2025 14:03:00 +0200", + "summary": "

    Zubehör gibt’s überall – aber nur auf dem Caravan Salon gibt’s den vollen Überblick. Camper, die gezielt nachrüsten oder ihr Fahrzeug optimieren wollen, finden hier nicht nur günstige Messepreise, sondern auch Beratung, Live-Tests und echte Neuheiten.

    ", + "text": "Der beliebteste Gegenstand mit Rädern auf dem Caravan Salon ist der Fritz Berger Einkaufstrolley. Wer auf der größten Messe für Reisemobile, Wohnwagen oder Campingbusse unterwegs ist, sieht immer wieder Besucher, die die kleine blaue Kiste hinter sich herziehen. Natürlich ist die vollgestopft mit Camping-Ausrüstung. Wer möchte schon die ganzen Schnäppchen, die er gerade in den Zubehör-Hallen 3, 13 und 14 gemacht hat, herumtragen. Also gibt es für 20 Euro den Trolley als Extra dazu. Auf der riesigen Neuheiten-Show geht im Glanz der Campingfahrzeuge unter, dass es kaum eine bessere Gelegenheit gibt, um sich über Camping-Zubehör zu informieren, es einzukaufen und alles über Neuheiten zu erfahren. Warum das so ist, erzählen wir Ihnen hier. 1. Marktübersicht an einem Ort Auf dem Caravan Salon finden Camper eine riesige Auswahl an Zubehör – von Solarmodulen über automatische Hubstützen, Batterien, Vorzelten, Markisen bis zu cleveren Campingstühlen oder Küchenhelfern. Es sind nicht nur alle Kategorien aus den Bereichen Camping-Zubehör, Wohnmobil- oder Wohnwagen-Technik oder Ausrüstung auf der Messe, sondern in der Regel auch alle relevanten Hersteller. Dazwischen schleicht sich gelegentlich ein kleines Start-up mit einer neuen Idee. Camperinnen und Camper können sich also schnell einen Überblick über den Markt verschaffen und die konkurrierenden Produkte gleich miteinander vergleichen. Das klappt im Internet gar nicht und bei Zubehör-Shops am Wohnort nur bedingt, weil die nicht alle Marken verkaufen. 2. Produkte direkt ausprobieren Probieren geht über Studieren: Die Chance dazu haben Camperinnen und Camper auf dem Caravan Salon oft ziemlich exklusiv. In Online-Shops müssen sie sich auf Bewertungen anderer Käufer verlassen und stationäre Händler haben die Ware oft nur verpackt im Regal liegen. Auf dem Caravan Salon haben die Hersteller in der Regel eigene Stände und bauen dort so viele Produkte wie möglich auf – vorrangig die Neuheiten. Besucher können sich die Vorzelte anschauen oder auf Campingstühlen Probe sitzen. Sie können ausprobieren, ob sie mit der Bedienung des Reich easydriver oder des Truma Mover besser klarkommen und sich danach für einen Rangierantrieb für den Wohnwagen entscheiden. 4. Fragen direkt klären – bei den besten Experten Wer auf dem Caravan Salon ein Zubehör-Produkt entdeckt und Fragen dazu hat, kann sie gleich klären. Die Antworten geben oft die Mitarbeiterinnen und Mitarbeiter der Hersteller. Bessere Experten gibt es nicht. Wer direkt für ein Unternehmen arbeitet, weiß oft mehr über das Produktportfolio als Einzelhändler. Natürlich geht das nicht auf, wenn Camperinnen und Camper in der Zubehör-Halle 3 am großen Verkaufsstand von Fritz-Berger vor Toiletten-Zusätzen von Thetford, Geschirr von Brunner oder Kühlboxen von Dometic stehen. Dann gibt es aber auch eine Lösung: Die Frage einfach mitnehmen in die Hallen 13 und 14, wo die drei Hersteller ihre Stände haben. Denn die gehören zur Kategorie Fahrzeugtechnik und Ausstattung, für die es eigene Hallen gibt. 5. Schnäppchen machen dank Messepreisen Viele Hersteller oder Zubehör-Händler machen auf dem Caravan Salon Sonderangebote. Preise liegen dabei oft 10 bis 20 Prozent unter dem regulären Marktwert. Gerade bei hochpreisigen Teilen wie Wechselrichtern, Batterien oder Klimaanlagen kann sich das lohnen. 6. Zubehör-Neuheiten zuerst sehen Auch die großen Hersteller von Camping-Zubehör, Fahrzeug- und Aufbautechnik stellen in der Regel in Düsseldorf ihre Neuheiten für die kommende Saison vor. Nirgends in Europa können Camperinnen und Camper die technischen Highlights der Zukunft früher live aufgebaut sehen. Zubehör in Halle 3, Ausstattung und Technik in Hallen 13 und 14 Eigentlich liegen die Kategorien Camping-Zubehör und Fahrzeug-Ausstattung und Technik relativ nah zusammen. Manche Camperinnen und Camper würden Ausstattungs-Komponenten wie Klimaanlagen oder Markisen vermutlich sogar zum Zubehör zählen. Auf dem Caravan Salon liegen die drei Kategorien maximal weit auseinander. Zubehör wie Vorzelte, Campingstühle oder Geschirr finden die Besucher nämlich eher in Halle 3 an der südwestlichen Ecke des Geländes. Die Hersteller von Klima-Technik, Wechselrichter, Markisen oder Sat-Anlagen sind in den Hallen 13 und 14 untergebracht – also am Ostende des Geländes.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2030929.jpg", + "alt": "Xcabin", + "caption": "Xcabin", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2222273.jpg", + "alt": "Mobilvetta Kea, Wohnraum", + "caption": "Mobilvetta Kea, Wohnraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2219705.jpg", + "alt": "Weinsberg, Carsuite, Wohnmobil", + "caption": "Weinsberg, Carsuite, Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2030129.jpg", + "alt": "Caravan Salon 2024", + "caption": "Caravan Salon 2024", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2216820.jpg", + "alt": "Corigon CV 60 D, von vorne", + "caption": "Corigon CV 60 D, von vorne", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2216768.jpg", + "alt": "Bürster Papillon Rendering", + "caption": "Bürster Papillon Rendering", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2215467.jpg", + "alt": "Giottiline Siena 396 Wohnmobil für Familien mit Kinderzimmer", + "caption": "Giottiline Siena 396 Wohnmobil für Familien mit Kinderzimmer", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/", + "title": "Tipps für die größte Camping-Messe Deutschlands: Darum dürfen Sie den Caravan Salon nicht verpassen", + "date": "Thu, 03 Jul 2025 06:00:00 +0200", + "summary": "

    Der Caravan Salon in Düsseldorf ist die größte Messe für Wohnmobile, Wohnwagen und Camping-Zubehör. Wir verraten Ihnen, warum Sie unbedingt einmal hingehen müssen!

    ", + "text": "Die mit Abstand größte und wichtigste Messe für Wohnmobile, Wohnwagen und Camping-Zubehör ist ohne Zweifel der Caravan Salon in Düsseldorf. Er findet jedes Jahr Ende August statt – 2025 vom 30. August bis zum 7. September. Was Sie dort erwartet, lesen Sie in unserem Themenspecial. Warum Sie unbedingt auf den Caravan Salon gehen sollten, erfahren Sie hier. 1. Wohnmobile/Wohnwagen anschauen Ganz oben auf der Liste der Messe-Highlights stehen natürlich die unzähligen Wohnmobile, Campingbusse und Wohnwagen, die Sie dort nicht nur aus der Ferne, sondern ganz genau von außen und innen unter die Lupe nehmen können. Nirgendwo sonst haben Sie die Chance, einmal so viele Modelle unterschiedlicher Hersteller auf einem Fleck zu sehen. Das lohnt sich, wenn Sie: A: Noch nie ein Campingfahrzeug von innen gesehen haben. Treten Sie ruhig ein und schauen Sie sich einmal die unterschiedlichen Gattungen von innen an. Meist wirken die Fahrzeuge auf Bildern größer, als sie es tatsächlich sind. Nehmen Sie Ihren Partner/Ihre Partnerin und Kinder mit rein, um zu sehen, wie sich die Platzverhältnisse auf sie auswirken. B: Ein Fahrzeug kaufen möchten, aber noch nicht so genau wissen, was oder von welcher Marke. Hier haben Sie die Chance, die unterschiedlichen Hersteller auszuchecken. Seien es die Big Player auf dem Markt, wie Hymer, Knaus oder Pössl, oder unbekanntere, kleine Manufakturen – auf dem Caravan Salon sind sie alle vertreten. 2. Wohnmobil, Campingbus oder Wohnwagen kaufen Natürlich animiert die Messe auch zum Kauf eines Freizeitfahrzeugs, mit Rabatten und attraktiven Preisen. Allerdings sollten Sie von Spontankäufen absehen und nur zuschlagen, wenn Sie sich wirklich sicher sind. Wichtig ist es, sich vorher Gedanken darüber zu machen: Was ist mir beim Camping wichtig? Eine grobe Idee von der Fahrzeugkategorie, dem Platz und der Bettenaufteilung sollten Sie immerhin haben. Alles, was sonst für den Messekauf wichtig ist, erfahren Sie hier. Wohnmobile, Campingbusse und Wohnwagen gibt es in den Hallen: 1, 4-7a, 10–12 und 15 bis 17. 3. Zubehör durchforsten Im Zubehör-Bereich des Caravan Salons – in den Hallen 3, 13 und 14 – finden Sie alles, was das Camperleben angenehmer macht. Ob praktische Alltagshelfer, clevere Technik oder stilvolle Einrichtung: Hier können Sie stöbern, vergleichen und entdecken, was zu Ihrem Fahrzeug passt. Vielleicht ahnen Sie noch gar nicht, wie viel Potenzial in Ihrem mobilen Zuhause steckt. 4. Über Selbstausbau informieren Zum Thema Zubehör passt auch die Sonderschau \"Abenteuer Selbstausbau\" auf dem Freigelände vor den Hallen 13 und 14. Hier erfahren Sie nicht nur, welches Zubehör Sie für einen Selbstausbau benötigen, sondern auch, wie Sie diesen planen und durchführen. Dort gibt es täglich Vorträge für Anfänger, Fortgeschrittene und Profis zum Thema Selbstausbau und ebenso fertige Ausbauten, die beispielhaft zeigen, was möglich ist. Dass ein Selbstausbau nämlich nicht nur cool aussieht, sondern vor allem einiges an Blut, Schweiß und Tränen einfordert, lernen Sie spätestens im Gespräch mit den Experten. 5. Starter-Welt für Neulinge Alle Camping-Neulinge sollten unbedingt bei der Starter-Welt vorbeischauen. Hier gibt es spannende Vorträge von Expertinnen und Experten aus der Camping-Branche zum Thema \"das erste Mal Camping\". Wenn Sie noch nie campen waren, können Sie sich hier über die unterschiedlichen Fahrzeugarten informieren und was unterwegs wichtig ist. Außerdem können Sie Ihre brennendsten Fragen loswerden. Die Starter-Welt kommt 2025 an einen neuen Platz und befindet sich zwischen den Hallen 5 und 9. 6. Ungestört am Preview Day Wer sich intensiv mit den Fahrzeugen und Co. auseinandersetzen will, kann schon am Freitag, 29. August, ein Ticket für den \"Preview Day\" erwerben. Die Stückzahlen der Tickets sind limitiert und so schafft es nur eine begrenzte Besuchermenge auf das Gelände. An diesem Tag können Sie sich in entspannter Atmosphäre umschauen. Am Wochenende wird es jedes Jahr gerammelt voll auf dem Caravan Salon. Wer am Preview Day kein Ticket mehr bekommt, es aber unter der Woche einrichten kann, profitiert ebenfalls von mehr Ruhe und hat mehr Gelegenheit, mit den Beratern an den Herstellerständen ins Gespräch zu kommen.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2030129.jpg", + "alt": "Caravan Salon 2024", + "caption": "Caravan Salon 2024", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2222273.jpg", + "alt": "Mobilvetta Kea, Wohnraum", + "caption": "Mobilvetta Kea, Wohnraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2219705.jpg", + "alt": "Weinsberg, Carsuite, Wohnmobil", + "caption": "Weinsberg, Carsuite, Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2030929.jpg", + "alt": "Xcabin", + "caption": "Xcabin", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2216820.jpg", + "alt": "Corigon CV 60 D, von vorne", + "caption": "Corigon CV 60 D, von vorne", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2216768.jpg", + "alt": "Bürster Papillon Rendering", + "caption": "Bürster Papillon Rendering", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2215467.jpg", + "alt": "Giottiline Siena 396 Wohnmobil für Familien mit Kinderzimmer", + "caption": "Giottiline Siena 396 Wohnmobil für Familien mit Kinderzimmer", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/", + "title": "Sommerhitze im Wohnmobil & Wohnwagen: Die besten Tipps gegen Hitze im Camper", + "date": "Sun, 29 Jun 2025 14:00:00 +0200", + "summary": "

    Die erste Hitzewelle ist in vollem Gange. Wir verraten die besten Tipps und Tricks, wie es im Camper kühl bleibt.

    ", + "text": "Es wird richtig heiß! Wenn die Temperaturen im Sommer steigen, kann es im Wohnmobil schnell unangenehm heiß werden. Besonders bei Reisen nach Südeuropa oder während Hitzewellen in Deutschland heizt sich der Innenraum von Wohnmobilen, Campingbussen oder Wohnwagen tagsüber stark auf. Und wir alle fragen uns: Was tun, wenn es zu heiß wird im Campingfahrzeug? Keine Sorge, es gibt zahlreiche Möglichkeiten, wie Sie die heißen Tage angenehmer gestalten können. Wir haben die besten Kühl-Tipps für Sie zusammengestellt, damit Sie auch bei hohen Temperaturen einen kühlen Kopf bewahren können. Wer sehr temperaturempfindlich ist, sollte auch bei der Wahl des Urlaubsortes das Klima im Kopf behalten. Vor allem für Menschen mit Vorerkrankungen, kleine Kinder, Schwangere und ältere Reisende ist der Trend Coolcation im Hochsommer wahrscheinlich die beste Wahl – Sprich: Ein Sommerurlaub an einem kühlen Ort. Sie wollen trotzdem in den Süden oder lieben es einfach, wenn es draußen warm ist? Mit den folgenden Maßnahmen können Sie auch bei hohen Temperaturen einen angenehmen und erholsamen Campingurlaub genießen. Richtig lüften Sobald die ersten Sonnenstrahlen die Luft aufheizen, werden die Schotten dicht gemacht. Im Reisemobil oder Wohnwagen bedeutet das: Fenster und Luken zu. Lüften mittels Dachluken und Fenster ergibt nur Sinn, wenn es draußen kühler ist. Und genau die Südeuropäer machen uns vor, wie es geht: Sie lüften dann, wenn es draußen kühler ist als drin – und zwar von spätabends bis frühmorgens . Auch wenn draußen ein kleines Lüftchen weht, ergibt das Lüften Sinn. Dann entsteht auch drinnen ein Luftstrom , der zwar die Temperatur real nicht senkt, sie jedoch erträglicher macht. Kastenwagen heizen sich stärker auf, weshalb hier offene Fenster und Türen auch tagsüber Linderung bringen können. Fensterschutz Wer denkt, das Schließen aller Rollos würde dem rasanten Temperaturanstieg entgegenwirken, liegt nicht ganz richtig. Zwar versprechen die silbrig folierten Rollo-Außenseiten eine gewisse Abschirmung, doch wenn das Sonnenlicht auf die Rollos trifft, ist die Wärme schon hinter den Fensterscheiben – also im Fahrzeug. Fenster, Luken und Türen sind die eigentlichen Hitzeschleusen. Spezielle Funktionstextilien , die man außen anbringt, helfen, sie besser zu isolieren. Die größte Wirksamkeit entwickeln sie in Kombination mit geschlossenen Rollos innen. Für Dachhauben und Seitenfenster haben verschiedene Firmen maßgeschneiderte Sonnenschutz-Überzüge im Programm. Die Beschaffenheit der Überzüge ist unterschiedlich: Durch die Dometic \" Sunshades \" dringt immer noch ein wenig Tageslicht, die Thermomatte von Hindermann ist dagegen komplett undurchsichtig. Die Hindermann Thermomatte können Sie hier direkt bei unserem Partnershop Fritz Berger bestellen. Cockpit-Schutz Vor allem für das größte Fenster im Fahrzeug, die Frontscheibe, eignet sich zusätzlich eine Thermofolie außen, erhältlich beispielsweise bei Fritz Berger. Der Zubehörhandel hat eine Vielzahl maßgeschneiderter silber bedampfter Dämmmatten im Angebot. Die Preisspannen sind enorm. Je nach technischer Finesse und Ausstattung kosten sie zwischen 100 und 900 Euro. Die Frontscheiben-Thermofolie von Fritz Berger können Sie direkt bei Fritz Berger bestellen, einfach hier klicken. Noch mehr Thermomatten für die Frontscheibe gibt es hier bei Camping Wagner. Ventilatoren Dem Luftzug auf die Sprünge helfen Ventilator-Dachhauben . Bei Fiamma heißen sie Turbo Vent und Turbo Vent Premium, passen in Dachlukenausschnitte von 36 mal 36 und 40 mal 40 Zentimeter Größe und verfügen über zwei Laufrichtungen sowie stufenlose Drehzahlregelung. Damit kann kühle Außenluft zu- oder heiße Innenluft abgeführt werden. Beim Luftverkehr von drinnen nach draußen dienen Ventilator-Dachhauben je nach Einbaulage auch als Dunstabzug für Küche oder Bad. Hier gibt es noch mehr Informationen über Ventilatoren fürs Camping. Hier gibt es die Fiamma-Ventilator-Dachhauben in unserem Partnershop Fritz Berger. Ebenfalls erhältlich ist der Universal-Ventilator Fritz Berger Turbo-Kit, der mit Querstreben unter herkömmlichen Dachhauben montiert werden kann. Seinen Strom bezieht er über eine handwerklich aufwendige Verkabelung mit dem Bordnetz oder acht 1,5-Volt-Batterien. Natürlich funktioniert auch jeder normale Tischventilator . Dagegen sprechen jedoch der Platzbedarf, den er im Wohnmobil und beim Transport beansprucht, und dass ein Kabel durch den Raum führt. Schatten suchen Effektiver Hitzeschutz fängt außen an. Die simpelste Lösung heißt: Einen schattigen Stellplatz unter Bäumen suchen. In die dunkle Röhre schaut dann nur der, der seine Satellitenschüssel fest auf dem Dach montiert hat. Wer häufig heiße Regionen aufsucht und trotzdem nicht aufs Fernsehen verzichten mag, greift besser zu transportablen Sat-Schüsseln. Oder hat einfach einen Router dabei und streamt das Fernseh-Programm. Hier finden Sie mehr zum Thema Internet im Reisemobil: Aktuelle Router haben wir hier getestet. Noch mehr dazu gibt es hier: Router für unterwegs. Aber auch das Bier bleibt auf Schattenplätzen länger kühl, weil Absorberkühlschränke systembedingt nur 30 Grad Celsius unter die Außentemperatur kommen. Knallt die Sonne durch die Abluftgitter auf die Kühlschrankrückseite, kann es kritisch werden. Spezielle 12-Volt- Kühlschrankventilatoren mildern oder beheben dieses Problem. Sowohl Dometic als auch Thetford haben einbaufertige Ventilator-Sets für rund 45 bzw. 53 Euro im Programm. Hier können Sie solche Ventilatoren direkt bei unserem Partnershop Fritz Berger bestellen. Markise Selbst auf dem lauschigsten Schattenplatz scheint irgendwann die Sonne. Dann schlägt die Stunde von Markise und Sonnendach. Planen mit UV-Blocker schützen Haut und Fahrzeug. Eine vom textilen Vordach beschattete Seitenwand bleibt deutlich kühler als eine direkt bestrahlte. Das Angebot an Markisen ist enorm. Es reicht vom einfachen Sonnensegel (ab ca. 180 Euro) über in die Kederleiste eingezogene Sackmarkisen , die von Hand entrollt und aufgestellt werden müssen, bis zu klassischen Kassettenmarkisen , die per Handkurbel oder elektrisch ausfahren. Viele Sack- und Kassettenmarkisen lassen sich durch Front- und Seitenteile zu Windfängen und geschlossenen Vorzelten erweitern – eine variable Lösung für die meisten Einsätze mit Ausnahme von extremem Wintercamping. Sonnensegel können Sie hier bei unserem Partnershop Fritz Berger direkt bestellen. Tipps und alles rund ums Thema Markise finden Sie hier. Belüftete Sitzmatte Wer keine Klimaanlage fürs Fahrerhaus hat, kann während der Fahrt zwar das Fenster einen Spalt öffnen. Allerdings riskiert man damit im schlimmsten Fall, sich durch den kalten Luftstrom im Nacken einen \"Zug\" zu holen, eine Muskelverspannung. Eine nachrüstbare Alternative für lange Strecken bei praller Sonne ist eine belüftete Sitzauflage. Diese kühlenden Sitzmatten tragen an mehreren Stellen im Polster einen Luftauslass. Matten wie die von Westfalia werden via 12-Volt-Anschluss betrieben. Kühlmatten Ganz ohne Strom funktionieren Kühlmatten, die es ebenfalls für die Sitze gibt, aber fürs Bett. Gehen die Temperaturen auch nachts nicht in den Keller, könnte beispielsweise die Freshmat von Wiegel für Linderung sorgen. Die Kühlkissen, die es als 30 mal 40 Zentimeter große Sitz- sowie als 90 mal 90 Zentimeter große faltbare Matratzenauflage gibt, haben einen Gelkern, der bei Druck Kühle erzeugt. Sobald Druck fehlt, regeneriert sich das Gel ohne Strom- oder Kältezufuhr. Die Matten gibt es auch für das Haustier. Kühlmatten für Haustiere gibt es hier bei Fritz Berger. Hier gibt es verschiedene Kühlmatten bei Amazon. Schutzfarbe Der Aufbau des Wohnmobils bleibt durch einen UV-Schutzanstrich auf dem Dach kühler, beispielsweise von der Marke Cooldry. Die Dispersionsfarbe enthält Reflexionskomponenten, die bis zu 90 Prozent der Sonnenenergie reflektieren sollen. Des Weiteren gibt der Hersteller an, dass sich die Oberflächentemperatur des nach dem Anstrich mattweißen oder -beigen Dachs bei direkter Sonnenbestrahlung bei Tests von 45,4 auf 31,4 Grad reduziert. Die Schutzfarbe kann direkt auf das lackierte Blech bzw. GFK aufgetragen werden. Der Originallack kann, muss aber nicht angeschliffen werden. Laut Hersteller genügt ein Liter Cooldry für ca. 1,5 m² bei zwei Schichten. Das heißt: zehn Liter reichen für ca. 15 m², der Literpreis liegt aktuell bei rund 20,40 Euro. Nach rund einer Stunde klebt der Schutzanstrich nicht mehr, nach zwölf bis 16 Stunden kann eine zweite Schicht aufgetragen werden. Klimaanlagen Klimaanlagen sind die Hightech-Geräte gegen Hitze. Die Anlagen unterscheiden sich durch ihre Wirkungsweise und den Einbauort. Die effektivste Kühlung, jedoch unter intensivem Einsatz von 230-Volt-Strom, versprechen Kompressor-Klimaanlagen . Diese gibt es für die Montage auf dem Dach in einem Dachlukenausschnitt von 40 mal 40 Zentimeter Größe. Unsere große Kaufberatung mit Marktübersicht zum Thema Klimaanalgen finden Sie hier. Die wichtigsten Hersteller von Dachklimaanlagen mit 1100 bis 3200 Watt Kühlleistung sind Dometic, Truma, Telair und Coleman. Eine Sonderform der Kompressor-Anlage ist die Saphir-Baureihe von Truma für den Einbau im Fahrzeug. Sie findet Platz im Doppelboden oder in einem anderen Staufach. Alle Kompressor-Klimaanlagen haben ähnliche Nachteile: Geräuschloser Betrieb ist nicht möglich – sowohl innen als auch außen ist stets ein leichtes Brummen vernehmbar. Außerdem wiegen die Geräte zwischen 18 und 24 Kilogramm und brauchen Landstrom. Wer autark stehen möchte, muss einen Generator an Bord haben, der ebenfalls teuer ist, Energie verbraucht und Geräusche emittiert. Ohne Kompressor und deshalb mit 12 Volt kommt die Verdunster-Klimaanlage Ebercool von Eberspächer zurecht. Das 25 Kilogramm schwere Dachgerät verdampft zwischen einem und drei Liter Wasser pro Stunde, um die Luft um etwas mehr als zehn Grad Celsius im Verhältnis zur Außentemperatur abzukühlen und in den Innenraum zu blasen. Grundsätzlich sind Dachklimaanlagen leichter nachzurüsten als Exemplare für den Einbau innen. Noch mehr Tipps Draußen kochen Wer an heißen Tagen die Küche nach draußen verlegt, heizt das Wohnmobil nicht noch zusätzlich auf. Salate oder kalte Gerichte funktionieren natürlich ohne Herd, man kann aber auch die Küche nach draußen verlegen. Dazu ist es praktisch einen Gaskocher für draußen dabeizuhaben. Unsere KollegInnen haben erst kürzlich verschiedene Modelle getestet, die sich für die Außenküche eignen. Hier finden Sie alle Modelle und den ganzen Test. Erfrischungen Natürlich gilt beim Campingurlaub wie auch sonst an heißen Tagen, immer genug trinken! Wer sich schon beim Cremen abkühlen will, kann die Sonnencreme in den Kühlschrank stellen. Frische bringt zu Beispiel auch ein Bodyspray mit Pfefferminzöl oder einfach eine Sprühflasche mit Wasser.", + "tags": [], + "status": "Online", + "link": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/1918478.jpg", + "alt": "Abkühlung bei Hitze im Wohnmobil", + "caption": "Abkühlung bei Hitze im Wohnmobil", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1090711.jpg", + "alt": "Thema des Monats: Schutz gegen Sommerhitze", + "caption": "Thema des Monats: Schutz gegen Sommerhitze", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1036072.jpg", + "alt": "Ratgeber: Schutz gegen Sommerhitze", + "caption": "Ratgeber: Schutz gegen Sommerhitze", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1036092.jpg", + "alt": "Ratgeber: Schutz gegen Sommerhitze", + "caption": "Ratgeber: Schutz gegen Sommerhitze", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1090704.jpg", + "alt": "Thema des Monats: Schutz gegen Sommerhitze", + "caption": "Thema des Monats: Schutz gegen Sommerhitze", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1900143.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2033268.jpg", + "alt": "Klimaanlage Zubehoer f", + "caption": "Klimaanlage Zubehoer f", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1986977.jpg", + "alt": "Klimaanlage von Dometic? - Kühlen", + "caption": "Klimaanlage von Dometic? - Kühlen", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1013077.jpg", + "alt": "Dachklimaanlagen im Test", + "caption": "Dachklimaanlagen im Test", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1025681.jpg", + "alt": "Im Sommer schwitzen die hinteren Passagiere oft.", + "caption": "Im Sommer schwitzen die hinteren Passagiere oft.", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1027262.jpg", + "alt": "Tablet", + "caption": "Tablet", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1052520.jpg", + "alt": "Zubehörspezialist Truma bietet neue Dachklimaanlage Aventa comfort mit speziellem Dichtkonzept an", + "caption": "Zubehörspezialist Truma bietet neue Dachklimaanlage Aventa comfort mit speziellem Dichtkonzept an", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/", + "title": "Dethleffs Reiselust-Prämie: Bis zu 20.000 Euro Rabatt auf Wohnmobile", + "date": "Sat, 28 Jun 2025 12:00:00 +0200", + "summary": "

    Dethleffs geht in die Rabattschlacht: bis zu 10.000 Euro Rabatt auf Neufahrzeuge und bis zu 20.000 Euro auf junge Gebrauchte!

    ", + "text": "Dethleffs startet eine attraktive Rabattaktion und bietet Käufern bis zu 20.000 Euro Preisvorteil auf junge gebrauchte Wohnmobile und Campingbusse und bis zu 10.000 Euro auf neue. Mit der \"Reiselust-Prämie\" sorgt der Hersteller dafür, dass der Traum vom eigenen Fahrzeug für viele Camper noch greifbarer wird. Vor allem zeitnah: Denn die Rabatte gelten nur für Fahrzeuge, die bereits produziert sind und schon in den Höfen der Händler stehen. Wer zugreift, spart bis zum 31. Juli 2025 – eine Gelegenheit, die sich viele nicht entgehen lassen sollten. Reiselust-Prämie für Neufahrzeuge und junge Gebrauchte Das Angebot gilt nur für ausgewählte Modelle, und die Rabatthöhe ist abhängig vom Modelljahr. Besonders hervorzuheben ist, dass auch junge Gebrauchtfahrzeuge Teil der Aktion sind. Diese Möglichkeit ist besonders für Camper von Interesse, die ein nahezu neues Fahrzeug zu einem deutlich günstigeren Preis erwerben möchten. Zu den rabattierten Fahrzeugen gehört etwa der Dethleffs Trend , der für seine Kombination aus modernem Design und cleverem Komfort bekannt ist. Als Integrierter (Trend I ) oder Teilintegrierter (Trend T ) mit \"Reiselust-Prämie\" erhältlich, bietet das Wohnmobil alles, was das Herz eines Camper-Fans höher schlagen lässt – vom großzügigen Wohnraum bis zu praktischen Details für den Alltag unterwegs. Käuferinnen und Käufer können beim Kauf des Bestsellers direkt vom Hof eines Händlers bis zu 6.000 Euro sparen. Auch der Dethleffs Just Camp ist Teil der Rabattaktion. Kompakt, modern und preislich fair, ist dieses Wohnmobil perfekt für Einsteiger und alle, die unkompliziert und ohne viel Aufwand losfahren möchten. Wer sich für ein neues Modell entscheidet, profitiert von bis zu 6.000 Euro Rabatt. Die Rabatte für neue aufgebaute Wohnmobile sind jeweils gestaffelt: Modelljahr 2023: 6.000 Euro Modelljahr 2024: 4.000 Euro Modelljahr 2025: 2.000 Euro Bis zu 10.000 Euro Rabatt bekommen Camperinnen und Camper auf neue Globetrail Campingbusse . Auch hier gibt es wieder eine Staffelung: Modelljahr 2023: 10.000 Euro Modelljahr 2024: 8.000 Euro Modelljahr 2025: 6.000 Euro Für Gebrauchtfahrzeuge der Baujahre 2022 bis 2025 gibt es ebenfalls hohe Rabatte, die aber an bestimmte Fahrzeuge gebunden sind. Globetrail (ausgenommen Globetrail Performance), Globebus (ausgenommen Active), Just (ausgenommen Active): je 8.000 Euro Prämie Trend (ausgenommen Alkoven): 10.000 Euro Prämie Esprit : 15.000 Euro Prämie Globetrotter XLI & XXL A: je 20.000 Euro Prämie Vorteile der Aktion für Camper Warum gerade jetzt ein Dethleffs Wohnmobil oder Campervan? Die Antwort ist einfach: Die \"Reiselust-Prämie\" macht den Kauf eines neuen oder jungen gebrauchten Fahrzeugs attraktiver denn je. Wer ein Wohnmobil oder einen Campervan von Dethleffs ins Auge fasst, spart nicht nur durch den Rabatt, sondern erhält auch ein Fahrzeug, das mit guter Qualität und praktischen Funktionen überzeugt. Für all diejenigen, die sich von den Fahrzeugen persönlich überzeugen möchten, bieten Dethleffs' Handelspartner zahlreiche Hausmessen an. Hier können Interessierte die Fahrzeuge anschauen. Die genaue Liste der Veranstaltungen und Termine ist online einsehbar. Alternativ können Kunden online einen Termin bei einem Händler in der Nähe anfragen, bei dem Rabatt-Modelle verfügbar sind. Einschränkungen und Details zur Aktion Die \"Reiselust-Prämie\" gilt nur bis zum 31. Juli 2025 und nur für Fahrzeuge, die bei teilnehmenden Händlern jetzt schon verfügbar sind – nicht auf Neubestellungen. Wer sich also für ein Modell interessiert, sollte nicht zu lange warten. Das Angebot gilt, solange der Vorrat reicht. Dethleffs schafft Platz für Neuheiten Von der Rabattaktion profitieren die Kunden. Sie schafft auf den Höfen der Händler nebenbei Platz für Neuheiten und hilft den Betrieben aus der Krise. Denn die Branche hat bedingt durch eine deutliche Überproduktion und anziehende Absatzschwierigkeiten mit einem Überbestand zu kämpfen, der das Kapital der Handelsbetriebe bindet und die ihre Gewinne mindert.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2083933.jpg", + "alt": "Dethleffs Trend i", + "caption": "Dethleffs Trend i", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2087105.jpg", + "alt": "Dethleffs Trend T (2024)", + "caption": "Dethleffs Trend T (2024)", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2071456.jpg", + "alt": "Dethleffs Trend I 7057 EBL (2024) f", + "caption": "Dethleffs Trend I 7057 EBL (2024) f", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/1819971.jpg", + "alt": "Dethleffs Globetrotter XLI (2022)", + "caption": "Dethleffs Globetrotter XLI (2022)", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/", + "title": "Der neue promobil-Newsletter - gratis!: Zum Frühstück die spannendsten Camping-Themen", + "date": "Fri, 27 Jun 2025 13:00:00 +0200", + "summary": "

    Den promobil-Newsletter gibt es ab sofort auch Samstagmorgens: Zum Frühstück servieren wir die frischesten Camping-News.

    ", + "text": "Melden Sie sich für unseren gratis promobil-Newsletter an und verpassen Sie keine Neuigkeiten mehr. Jetzt sogar zwei Mal die Woche. Warum? Weil wir nicht wollen, dass Sie etwas verpassen. +++ Hier zum Newsletter anmelden .+++ Mehr Reisetipps, Zubehör-Highlights und Wohnmobil-Neuheiten – direkt ins Postfach Camping ist mehr als ein Hobby – es ist eine Leidenschaft. Wer unterwegs ist, plant, umbaut oder träumt, braucht vor allem eines: aktuelle Infos, die wirklich weiterhelfen. Genau deshalb gibt’s den promobil-Newsletter – und jetzt sogar zweimal pro Woche! Neu: Ihr Samstags-Update zum Frühstück Ab dem 5. Juli 2025 schicken wir Ihnen den promobil-Newsletter zusätzlich samstags um 9 Uhr – pünktlich zum ersten Kaffee. Warum? Weil wir jede Woche so viele spannende Themen haben, dass ein einziger Newsletter einfach nicht mehr reicht. Modellneuheiten, clevere Techniktrends, Zubehör, das den Camping-Alltag leichter macht – dazu Ratgeber, Tourentipps und Stellplatz-Geheimtipps aus der Redaktion. Wohin am Wochenende? Was ist neu auf dem Markt? Wir liefern Antworten. Mit dem neuen Samstags-Newsletter bleiben Sie am Puls der Camping-Welt. Egal, ob Sie Ihre erste Reise planen oder schon seit Jahren unterwegs sind – unsere Inhalte richten sich an alle, die Camping leben. Kuratiert von der promobil-Redaktion, geschrieben mit Blick auf die Praxis. Doppelt informiert, doppelt inspiriert Unsere Newsletter-Abonnentinnen und -Abonennten bekommen jetzt mittwochs und samstags alles Wichtige aus der Welt der Wohnmobile, Vans und Campingplätze – ohne langes Suchen, ohne Umwege. So starten Sie nicht nur bestens informiert in die Woche, sondern auch mit frischer Inspiration ins Wochenende . Jetzt anmelden und dabei sein Ob im Camper, zu Hause oder auf der Suche nach der nächsten Idee – der promobil-Newsletter liefert, was zählt. Jetzt einfach anmelden und keinen Reisetipp, kein neues Zubehör und keine spannende Story mehr verpassen! Hier für den promobil-Newsletter anmelden . Übrigens können Sie nicht nur den promobil-Newsletter mit allen Themen rund um Wohnmobile abonnieren, sondern auch den CARAVANING-Newsletter mit allen Infos rund um Wohnwagen und Zugfahrzeug. Jede Woche die neuesten Caravans, Zugfahrzeugtests sowie nützliches Zubehör, Campingplatz-Tipps und die aktuellen Ratgeber für die Pflege und Optimierung Ihres eigenen Wohnwagens – hier finden Sie alle News! Damit Sie alle spannenden Artikel lesen können und Ihnen nichts vorenthalten bleibt, schließen Sie gleich unser Plus-Abo mit ab. Die neuesten Insider-Informationen rund um neue Wohnmobile, ausführliche Ratgeber für Ihr liebstes Gefährt zu Hause oder die besten getesteten Stellplätze schalten Sie mit einem promobil-Plus-Abo frei. Hier das promobil-Plus-Abo abschließen .", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2217158.jpg", + "alt": "adult couple making a video call with their iPad in a camper van", + "caption": "adult couple making a video call with their iPad in a camper van", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/", + "title": "Drittes Camping-Rekordjahr in Folge: Süd schlägt Nord – Hier wird am häufigsten gecampt", + "date": "Tue, 24 Jun 2025 14:00:00 +0200", + "summary": "

    Camping ist weiterhin im Trend: 2024 stieg die Zahl der Campingübernachtungen in Deutschland im Vergleich zum Vorjahr. Doch wo campt man am häufigsten?

    ", + "text": "Die aktuellen Übernachtungszahlen aus dem vergangenen Jahr zeigen: Campingtourismus boomt weiterhin! Die deutsche Campingbranche verzeichnete im vergangenen Jahr einen Zuwachs. Mit 42,9 Millionen Übernachtungen zählt der Urlaub auf Campingplätzen zu den am stärksten wachsenden Segmenten in der deutschen Tourismusbranche. Fast jede zwölfte (8,6 %) der insgesamt 496,0 Millionen Gästeübernachtungen im Jahr 2024 fand auf einem Campingplatz statt. Das sind die beliebtesten Bundesländer für Camping Wir berichteten bereits über die beliebtesten deutschen Regionen 2024 für Campingurlaub . Sehr aufschlussreich ist der Blick auf die beliebtesten Bundesländer für Camping – dort ist seit vielen Jahren Bayern der ungeschlagene Camping-Champion. 2024 zählte das Bundesland mit über 8,3 Millionen die meisten Campingübernachtungen in ganz Deutschland. Insgesamt stieg die Anzahl um 1,3 Prozent. Die beliebteste bayerische Campingregion ist übrigens das Allgäu – doch auch im Bayerischen Wald oder im Fränkischen Seenland lohnt sich ein Besuch. Auf Platz 2 hält sich das Bundesland Niedersachsen mit über 6 Millionen Campingübernachtungen. Das Bundesland im Norden trendet dabei mehr als Bayern und kann 5,1 Prozent im Vergleich zum Vorjahr dazugewinnen. Die beliebteste Region hier ist natürlich die Nordseeküste. Doch auch das Harz, die Lüneburger Heide oder das Weserbergland haben ihren ganz eigenen Reiz. Ganz neu auf Platz 3 kommt 2024 das Bundesland Mecklenburg-Vorpommern , da Schleswig-Holstein (-2,3 Prozent) auf Platz 5 absteigt. Das Bundesland im Osten gewinnt 1,9 Prozent dazu und zählt insgesamt 5,53 Millionen Campingübernachtungen. Die beliebteste Campingregion in Meck-Pomm ist die Ostseeküste – doch auch die Mecklenburgische Seenplatte hat viele Fans. Platz 4 geht an Baden-Württemberg mit 5,41 Millionen Campingübernachtungen und einem kleinen Minus von 0,1 Prozent. Der Schwarzwald ist hier der größte Camping-Magnet. Top-Campingplätze in den Top 3 Bundesländern Bleibt die Frage: Welcher Campingplatz ist in den Top 3 Camping-Bundesländern besonders beliebt? Auf Camping.info haben wir die bestbewerteten Campingplätze der Top 3 Bundesländer herausgefiltert. Voraussetzung: Mehr als 1.000 Bewertungen. Bayern: Campingplatz Demmelhof in Bad Tölz Ruhe am Alpenrand bietet der Campingplatz Demmelhof. Er liegt idyllisch in der Region Bad Tölz-Wolfratshausen. Mit seinen großzügigen Stellplätzen und modernen Sanitäranlagen ist er besonders für Familien und Naturfreunde geeignet. Freizeiteinrichtungen wie ein großzügiger Spielplatz und Wandermöglichkeiten in den umliegenden Bergen machen ihn zu einem idealen Ausgangspunkt für Outdoor-Aktivitäten. Die jüngste Bewertung in der Stellplatz-Radar-App beschreibt den Platz wie folgt: \"Sehr ehrlicher und menschlicher Bauernhof-Campingplatz mit toller zentraler Lage. Der See war eine willkommene Abkühlung.\" Niedersachsen: Campingplatz Südheide in Winsen Inmitten der malerischen Südheide bei Winsen (Luhe) gelegen, überzeugt dieser Campingplatz mit seiner naturnahen Atmosphäre. Der Platz bietet großzügige Stellflächen und moderne Einrichtungen für Camper und hat sich besonders als familienfreundlich etabliert. Ein umfangreiches Freizeitangebot mit Rad- und Wanderrouten sowie einem Pool sorgt für abwechslungsreiche Erholung. Eine Bewertung aus dem Stellplatz-Radar lautet: \"Sehr schöner Campingplatz mit neuem Sanitärgebäude, sehr gepflegt und sauber. Toller Naturschwimmteich.\" Mecklenburg-Vorpommern: Campingpark Kühlungsborn Direkt an der Ostsee in Kühlungsborn gelegen, besticht dieser Campingplatz durch seine Nähe zum Strand und die vielfältigen Freizeitmöglichkeiten. Der Campingpark ist ideal für einen aktiven Strandurlaub. Dafür sorgt eine breite Auswahl an sportlichen Aktivitäten wie Surfen und Beachvolleyball. Die Anlage ist großzügig, genauso wie die Stellplätze für Wohnmobile und Zelte. Zur Ausstattung gehören moderne Sanitäranlagen und ein Restaurant. Im Stellplatz-Radar schreibt im User: \"Luxus Campingplatz mit dementsprechendem Preis. Wer bucht, sollte das wissen. Sehr sauber, problemlose Anreise.\" Dauerbrenner: Camping gewinnt konstant Beliebtheit Die Auswertungen des Portals Camping.info zeigen darüber hinaus, dass der Boom dieser Urlaubsform nicht allein ein Corona-Effekt ist. Seit zehn Jahren steigen die Übernachtungszahlen kontinuierlich und wurden nur 2020 und 2021 durch Corona-Beschränkungen vorübergehend gebremst.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2149829.jpg", + "alt": "Bayern, Campingplatz Grafenlehen", + "caption": "Bayern, Campingplatz Grafenlehen", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2194877.jpg", + "alt": "Campingtourismus", + "caption": "Campingtourismus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://imgsdb1.promobil.de/image/66e7374674eac60008479824-websiteListThumb.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://imgsdb1.promobil.de/image/6334afd1fc5fef00087dcca2-websiteListThumb.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://imgsdb1.promobil.de/image/5d7d0c0ab79f8d08001e5b92-websiteListThumb.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2194876.jpg", + "alt": "Campingtourismus", + "caption": "Campingtourismus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/", + "title": "Wohnmobil-Handel treibt Vorzelt-Profi in Insolvenz: Camping-Ausrüster Herzog beantragt Insolvenz", + "date": "Mon, 23 Jun 2025 14:00:00 +0200", + "summary": "

    Herzog, einer der führenden Vorzelthersteller, kämpft mit der Insolvenz. Dabei schwächelt auch der angeschlossene Wohnmobil- und Wohnwagenhandel. Ein Lehrstück über die aktuellen Tücken des Caravaning-Marktes.

    ", + "text": "Der Vorzelthersteller und Caravaning-Händler Herzog ist insolvent. Laut einer Pressemitteilung arbeitet das Unternehmen gemeinsam mit Insolvenzverwalter Holger Blümle von der Kanzlei Schultze und Braun an einer tragfähigen Sanierung. In Kirchheim am Neckar, 40 Kilometer nördlich von Stuttgart, steht nicht nur ein Traditionsunternehmen vor großen wirtschaftlichen Problemen – sondern ein exemplarisches Geschäftsmodell. Die Insolvenz von Herzog zeigt, wie problematisch die Marktbedingungen für die Händler in der Caravaning-Branche unter den derzeitigen Bedingungen sind. Das Zwei-Säulen-Modell steht unter Druck Herzog ist eine der Top-Adressen Deutschlands für die Produktion maßgefertigter Vorzelte. Parallel dazu wurde über Jahre ein Handelsbereich mit Wohnwagen, Campingbussen und Wohnmobilen mit angeschlossener Werkstatt aufgebaut. Die Marken: Fendt, Knaus, Tabbert, Weinsberg. Doch genau dieses Geschäftsmodell, das Produktion von Vorzelten und Handel von Campingfahrzeugen vereint, wurde Herzog zum Verhängnis. Anders als bei Kommissionsmodellen kaufen Händler Wohnmobile und Wohnwagen vom Hersteller – auf eigenes Risiko. Ausgelöst vom Pandemie-Boom entstand ein Nachfragestau. Die Hersteller kamen mit der Auslieferung nicht hinterher und drehten deshalb ihre Produktions-Kapazitäten deutlich hoch. Nach der Pandemie legte sich der Kaufrausch. Die Lebenshaltungskosten erhöhen sich, die Preise steigen. Die Kundinnen und Kunden nehmen weniger Wohnmobile und Wohnwagen ab, als die Hersteller produzieren und die Handelsbetriebe geordert haben. Die Folge: Viele Händler bleiben auf den Wohnwagen und Wohnmobilen und ihren Finanzierungskosten sitzen, was Liquidität bindet. Gegenüber der Stuttgarter Zeitung skizzierte Ingo Schorlemmer, Pressesprecher von Schultze und Braun, diese Marktbedingungen als Kernproblem der Branche. Denn sie treiben nicht nur Herzog in Probleme. In den vergangenen Monaten mussten mehrere Caravaning-Händler Insolvenz anmelden oder den Betrieb einstellen . Vorzeltproduktion längst gedrosselt Mit den Absatzproblemen am Fahrzeugmarkt gingen die Verkaufszahlen von Vorzelten zurück. Parallel stiegen die Materialpreise für die hauseigene Zeltproduktion. Schon lange bevor das Insolvenzverfahren eingeleitet wurde, hatte Herzog begonnen, auf die veränderten Marktbedingungen zu reagieren. \"Wir haben schon früh damit begonnen, unsere Produktionskapazitäten und -prozesse an die veränderten Rahmenbedingungen anzupassen\", erklärt Geschäftsführer Erich Eugen Herzog. Produktionsmengen wurden gestrafft, Abläufe optimiert, alternative Aufträge akquiriert. Auch im Vertrieb setzte Herzog verstärkt auf Direktvermarktung und digitale Kanäle. Dennoch gelang es nicht, die entstandene Lücke in der Auslastung vollständig zu schließen. Das Unternehmen hat also nicht abgewartet – sondern gehandelt. Doch die strukturellen Belastungen im Markt waren stärker. \"Die Kombination aus Herausforderungen war und ist auch für uns als vorsichtig planendes und agierendes Familienunternehmen über einen Zeitraum von inzwischen über drei Jahren nicht durchzuhalten\", so Herzog. Das Insolvenzverfahren läuft seit Mitte Juni 2025. Herzog führt den Geschäftsbetrieb derzeit regulär fort. Die Gehälter der Mitarbeitenden sind durch das Insolvenzgeld über drei Monate gedeckt. Investoren gesucht Der Insolvenzverwalter Holger Blümle prüft derzeit gemeinsam mit der Geschäftsführung Sanierungsoptionen. Das Unternehmen soll unter Mitwirkung der Familie Herzog zukunftsfähig aufgestellt werden, um möglichst viele Arbeitsplätze zu erhalten. Die Neuausrichtung soll insbesondere die Stärken des Unternehmens nutzen: maßgeschneiderte Zeltlösungen, ISO-zertifizierte Produktion und einen starken Servicefokus. Zusammen mit den Eigentümern und der Unternehmensberatung sucht der Insolvenzverwalter nach Investoren, die in das bestehende Unternehmen einsteigen wolle oder es in ihre Unternehmensgruppe eingliedern möchten. Bisher seien die Rückmeldungen durchweg positiv, heißt es in der Pressemitteilung der Kanzlei Schulze und Braun. \"Wir werden aber auch noch weitere potenzielle Kandidaten ansprechen. Interessenten für einen Einstieg können sich gerne bei mir melden. Der Prozess ist offen für alle ernsthaften Investoren\", sagt Blümel. Was Camper zur Insolvenz wissen müssen Für Kunden ändert sich vorerst wenig. Serviceleistungen bleiben bestehen, Lieferketten sind gesichert. Bestellungen über den Online-Shop sind möglich, Service und Werkstatt bleiben aktiv. Wer gerade über einen Vorzeltkauf oder eine Reparatur nachdenkt, kann das weiterhin mit gutem Gewissen bei Herzog tun. Herzog: Kurze Firmenhistorie Herzog entstand 1902 als Hersteller von Pferdedecken und Rucksäcken, verlagerte seinen Schwerpunkt mit der Zeit auf Vorzelte für Wohnwagen und Wohnmobile. In diesem Segment gehört das Familienunternehmen zu den Marktführern in Europa. \"Wir produzieren auf über 16.000 m² mit einem hochmodernen Maschinenpark\", sagt Geschäftsführer Erich Eugen Herzog. Das Unternehmen ist bekannt für seine flexiblen Zeltlösungen – auch als Maßanfertigung. Abgerundet wird das umfassende Produktportfolio im Shop von Herzog durch ein breites Camping-, Trekking-, Freizeit- und Outdoor-Sortiment anderer Hersteller.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/1090697.jpg", + "alt": "Thema des Monats: Schutz gegen Sommerhitze", + "caption": "Thema des Monats: Schutz gegen Sommerhitze", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/", + "title": "Pannen und Probleme im Wohnmobil & Wohnwagen: Erste Hilfe für die Camper-Bordtechnik", + "date": "Sat, 21 Jun 2025 14:00:00 +0200", + "summary": "

    Was tun, wenn die Technik streikt? Wir verraten Ihnen, wie Sie Pannen im Wohnmobilurlaub meistern – mit Tipps für Strom, Wasser, Gas & Co.

    ", + "text": "Pannen und Probleme im Wohnmobil & Wohnwagen: Erste Hilfe für die Camper-Bordtechnik\n\nCamping kann eine angenehme Weinachtsreise sein, aber man sollte immer für unvorhergesehene Situationen vorbereitet sein. Von leerer Bordbatterie bis hin zur Gasflasche, es kann einige Herausforderungen geben, auf die Camper stoßen can. Wisse z.B., wie man die Bordbatterie lädt und den Zustand der Batterie erkennt. Führe immer eine Ersatzbatterie mit und prüfe in regelmäßigen Abständen die Funkion der Sicherungen. Sorge außerdem dafür, daß du die Funkionsweise der Heizung kennst, damit du nicht kalt erwischt wirst, wenn du sie wirklich brauchst.\n\nEbenso ist die Kenntniss über deinen Kühlschrank wichtig. Weißt du, wie man prüft, ob Gas oder Strom das Problem ist, wenn der Kühlschrank nicht funktioniert?\n\nEs ist auch wichtig zu wissen, wo und wie man die Gasflaschen austauscht, um einen Gastmangel zu vermeiden. Lerne die verschiedenen Flaschen- und Anschlusstypen kennen, die in den verschiedenen Ländern gelten. \n\nIn Sachen Wasser, weißt du was zu tun ist, wenn kein Wasser aus dem Hahn kommt? Wie kannst du eine defekte Tauchpumpe ersetzen oder eine blockierte Wasserleitung finden?\n\nDenke darüber nach, was zu tun ist, wenn die Toilettenkassette voll ist und wie du sie richtig entsorgst. Hast du darüber nachgedacht, was zu tun ist, wenn du einen Kratzer oder eine Beule in deinem Wohnmobil hast?\n\nUnd schließlich, hast du einen Notfallplan für den Fall eines platten Reifens? Bist du ausgerüstet, um einen Reifen selbst zu wechseln, oder müsstest du auf einen Pannendienst warten? Sei bewusst, dass Camping-Urlauber auf einige Probleme stoßen können und sei gut darauf vorbereitet, diese selbst zu lösen.", + "tags": [ + "#CampingVorbereitung", + "#WohnmobilTipps", + "#WeihnachtsCamping" + ], + "status": "Trash", + "link": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2215422.jpg", + "alt": "Young couple with broken down van on roadside", + "caption": "Young couple with broken down van on roadside", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/", + "title": "Gotthard, Brenner & Reschenpass: Wo Wohnmobile und Camper heute Geduld brauchen", + "date": "Sat, 21 Jun 2025 11:25:00 +0200", + "summary": "

    Am Gotthard ist am Vormittag bereits mit bis zu 50 Minuten Verzögerung zu rechnen. San Bernardino lockt als Ausweichroute ohne Baustellen. Am Reschenpass bleibt die Ampelregelung ganzjährig aktiv. Für Wohnmobile und Gespanne auf dem Heimweg aus Italien, Kroatien und Co bedeutet das heute Wartezeiten.

    ", + "text": "Zum Ferienende sind Megastaus leider oft vorgezeichnet. Insbesondere aus dem Süden, also Italien, Slowenien, Kroatien, kommen an diesem Wochenende tausende Urlauber zurück. Engstellen mit Grenzkontrollen, Blockabfertigung am Gotthard und zahlreiche Baustellen – etwa an der Luegbrücke auf dem Weg nach Österreich zum Brenner – verschärfen die Lage zusätzlich. Bereits vergangenes Wochenende und am Feiertag kam es vielerorts zu langen Staus. Staus auf der Gotthard-Route (Schweiz) Heute (am 21.06.2025) müssen sich Camperinnen und Camper erneut auf längere Wartezeiten einstellen. In den kritischen Zonen, insbesondere vor dem Gotthard-Straßentunnel , zeigen sich bereits am Morgen erste Rückstaus. Jetzt am Mittag sind es laut der Verkehrsüberwachung am Gotthardtunnel (www.gotthard-traffic.ch) bereits 5 Kilometer und bis zu 50 Minuten Wartezeit. Betrachtet man die Webcam Aufnahmen 8 Kilometer vor dem Südportal läuft der Verkehr jedoch noch gemächlich. Erfahrungsgemäß verschärft sich die Lage ab den späten Vormittagsstunden bis in den späten Nachmittag hinein deutlich. Neben der Tunnelpassage selbst sorgt auch die Blockabfertigung für Lkw immer wieder für Verzögerungen. Reisende weichen bei ersten Anzeichen von Stillstand häufig auf den Gotthardpass aus – eine landschaftlich reizvolle, aber zeitaufwändige Ausweichroute, die gerade mit Wohnmobilen nur eingeschränkt empfohlen werden kann. Am Pass stauen sich Fahrzeuge regelmäßig an engen Baustellenbereichen sowie an den Kreisverkehren und am Bahnübergang auf der Nordseite. Alternative: San-Bernardino-Route Als Ausweichmöglichkeit bietet sich die Route über den San-Bernardino-Tunnel (A13) an. Die Strecke ist aktuell ohne größere Baustellen und bislang (21.06.2025, 11:19) staufrei befahrbar. Allerdings nutzen immer mehr Rückreisende diese Option, was im Tagesverlauf zu wachsendem Verkehrsaufkommen führen dürfte. Wer früh startet oder besonders flexibel ist, hat über diese Nord-Süd-Achse durch Graubünden eine realistische Chance, größere Verzögerungen zu vermeiden. Staus auf der Brenner-Route (Österreich) Auch auf der Brennerstrecke ist am heutigen Samstag mit massiven Rückstaus zu rechnen. Bereits frühmorgens beginnt in Tirol die Blockabfertigung für Lkw , die regelmäßig Rückstauungen auf der Inntalautobahn (A12) und Brennerautobahn (A13) verursacht. Die Dauerbaustelle an der Luegbrücke zwischen Innsbruck und dem Brenner bleibt dabei ein neuralgischer Punkt. Immerhin: Im Sommer 2025 greift eine Ausnahmeregelung , die für etwas Entlastung sorgt. Zwischen Juni und Anfang September wird der Verkehr dort zeitweise zweispurig geführt , um den Urlaubsreiseverkehr besser zu bewältigen. Dennoch ist mit Rückstaus zu rechnen – vor allem, wenn sich Urlauberströme mit Lkw-Abfertigung überlagern. Aktuell (21.06.2025, 11:20) sind auf der Verkehrsüberwachung des Brenner (www.autobrennero.it) noch keine Staus zu erkennen. Für den Nachmittag und den morgigen Sonntag sagt die Verkehrsprognose jedoch starken bis sehr starken Verkehr voraus. Alternative: Reschenpass-Route über Südtirol Weniger frequentiert, aber landschaftlich reizvoll und aktuell vergleichsweise flüssig befahrbar ist die Route über den Reschenpass (SS40/B180) . Diese Verbindung führt von Südtirol über Nauders ins österreichische Inntal – und weiter zur A12 Richtung Deutschland. Allerdings wird der Verkehr im Bereich der Kanzelgalerie bei Pfunds seit Mai 2025 einspurig per Ampel geregelt – ganzjährig, auch im Sommer . Eine Ausnahmeregelung, wie sie etwa bei der Luegbrücke greift, gibt es hier nicht . Die Baustelle bleibt bis Ende 2026 bestehen. Wartezeiten halten sich bislang im Rahmen, können aber im Tagesverlauf anwachsen. Eine Umfahrung über das Engadin ist für Pkw möglich, für größere Gespanne allerdings nicht zugelassen. Rückreise durch Süddeutschland: A8 und A81 besonders belastet Wer über die A8 (Salzburg – München – Stuttgart) oder die A81 (Singen – Stuttgart) unterwegs ist, sollte sich ebenfalls auf dichten Verkehr einstellen. Die A8 ist traditionell eine der am stärksten belasteten Autobahnen bei Rückreiseverkehr. Baustellenbereiche und Engstellen, etwa rund um Ulm und bei Pforzheim, wirken sich regelmäßig stauverschärfend aus. In den Nachmittagsstunden kann es auch auf der A7 (Füssen – Ulm – Würzburg) und auf der A96 (Memmingen – Lindau – München) zu erheblichen Verzögerungen kommen, wenn die Urlaubsrückkehrer aus dem Allgäu, Tirol und Vorarlberg zuströmen.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2215558.jpg", + "alt": "Stau in der Schweiz mit Wohnmobilen und Wohnwagen", + "caption": "Stau in der Schweiz mit Wohnmobilen und Wohnwagen", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/", + "title": "Leichtbau in der Caravaning-Industrie: Mit diesen Tricks sparen die Hersteller Gewicht", + "date": "Thu, 19 Jun 2025 14:00:00 +0200", + "summary": "

    Ein leichtes Reisemobil schafft Reserven bei der Zuladung und sorgt für einen geringeren Verbrauch. promobil verrät, was Hersteller in Sachen Leichtbau unternehmen – und wo die Grenzen liegen.

    ", + "text": "Ich packe meine Sachen und nehme mit: die E-Bikes, die Kaffeemaschine, den Grill … Und die Markise, die Klimaanlage und die Solaranlage dürfen natürlich auch nicht fehlen. Gerade in der 3,5-Tonnen-Klasse setzt der Wunsch vieler Reisemobilisten nach üppiger Zuladung und reichlich Komfort die Hersteller teils heftig unter Druck. Mit einem leichten Auf- und Ausbau sorgen Reisemobilhersteller dafür, dass möglichst viel Gepäck auf Reisen mitgenommen werden kann. Gleichzeitig bringt ein leichtes Mobil weitere Vorteile – etwa einen geringeren Kraftstoffverbrauch und dadurch eine höhere Reichweite und weniger CO2-Ausstoß. Was unterschiedliche Hersteller beim Thema Leichtbau tun, können sie hier liesen. Vanyx: Leichtbau mit viel Carbon Vanyx fertigt edle Kastenwagen-Ausbauten auf Basis des allradgetriebenen MAN TGE. Um die Busse möglichst leicht zu halten, setzen die Südbadener auf den Werkstoff Carbon – etwa beim Hochdach. Das ist in Sandwichbauweise gefertigt und wiegt laut Hersteller 89 Kilogramm. Durch den Einsatz von Carbon kann Vanyx nach eigenen Angaben 50 Prozent an Gewicht gegenüber einem GfK-Hochdach einsparen. Das Dach hat Vanyx gemeinsam mit dem Fraunhofer Institut entwickelt, dort wird das Dach auch hergestellt. Auch beim Ausbau des Campers setzt Vanyx auf Kohlefaser. Unter anderem besteht der Lattenrost sowie die Unterkonstruktion der Betten aus CfK (Carbonfaser-verstärkter Kunststoff). Auch beim Tisch, Waschbecken, der Kloschüssel, Dusche und Bodenplatte verwendet Vanyx CfK. Dank Carbon kommt der Vanyx laut Hersteller auf ein Leergewicht von etwa drei Tonnen – und das trotz üppiger Ausstattung mit Vollluftfahrwerk oder Solarpanels auf dem Dach. Der Preis für den edlen und leichten Campingbus beginnt allerdings bei 340.000 Euro. LMC Tracer: Reduzierung aufs Wesentliche Beim neuen Tracer konnte LMC im Vergleich zu den bestehenden Tourer-Teilintegrierten bis zu 100 Kilogramm einsparen. Den Sassenbergern gelang das unter anderem durch Einsatz von Leichtbaumaterialien und die Optimierung der Materialstärken beim Möbelbau. So wurde etwa die T-Haube durch einen verbesserten Faservolumengehalt des GfK-Laminats um 4,5 Kilo leichter. Am Fahrgestell kommen leichte Blattfedern aus GfK zum Einsatz, außerdem eine gewichtsoptimierte Rahmenverlängerung. Auch bei der Elektro- und Gasinstallation konnten Kilos eingespart werden. Aber nicht nur das Gewicht der fünf Tracer- Modelle – zwei schmale Vans und drei normalbreite Modelle – hat LMC nach unten gedrückt, auch die Preise konnten attraktiv gehalten werden. Die starten für die breiteren Modelle bei 65.200 Euro. Niesmann+Bischoff: Leichtbau bei Integrierten Auch Hersteller von Luxus-Integrierten setzen auf Leichtbau. Niesmann+ Bischoff beispielsweise hat zum Modelljahr 2025 den Arto nach eigenen Angaben um mehr als 300 Kilogramm leichter gemacht als den Vorgänger. Das ist umso bemerkenswerter angesichts dessen, dass der Arto nun auf dem Mercedes Sprinter aufbaut, der etwa 80 Kilogramm schwerer ist als der Fiat Ducato, der bislang als Basis diente. Die Maßnahmen zur Gewichtsreduzierung: Beim Boden, einer Sandwichkonstruktion mit Aluminium-Deckschichten und XPS-Kern, hat Niesmann+Bischoff das Flächengewicht um 39 Prozentreduzieren können – und das, obwohl er in Summe dicker geworden ist (42 statt bisher 23 Millimeter). Die Isolierung des Bodens soll viermal so gut sein wie beim Vorgänger, die Biegesteifigkeit hat Niesmann+Bischoff nach eigenen Angaben um den Faktor 6,3 verbessert. Carthago: Gewicht sparen durch intelligentes Weglassen Gewichtsparen durch intelligentes Weglassen: Mit dieser Methode senkt Carthago das Gewicht in seiner neuen Integrierten-Baureihe C2-Tourer. Etwa in den Kleiderschränken unter den Betten sind im Regalboden sowie in den Seitenwänden Teile ausgefräst. Beim Regalbrett befindet sich die Ausfräsung an der Unterseite und stört damit weder optisch noch bei der Nutzung. Auch die Ausschnitte in der Seitenwand bergen keine funktionalen Nachteile, sind zwar sichtbar, aber nicht störend – und vermindern das Gewicht wiederum etwas. Aus der Holz-Einlegeplatte in der Dusche hat Carthago ebenfalls einen Teil ausgefräst und spart auch hier Gewicht. Eine weitere Maßnahme in Sachen Leichtbau beim C2-Tourer: Die Sandwich-Seitenwände laufen nun bis zu den A-Säulen vorn plan durch. Die vergleichsweise schwere GfK-Frontmaske, die sich bei der Vorgängerversion des C-Tourer noch bis zum ersten seitlichen Fenstersteg herumwölbte, endet nun an der A-Säule. Im Vergleich zum C1-Tourer, der die bisherige Bauweise weiterführt, ist der neue C2-Tourer außerdem um etwa zehn Zentimeter schmaler, was ebenfalls Gewicht einspart. Die Integrierten C1- und C2-Tourer sowie den Teilintegrierten C1-Tourer T bietet Carthago sowohl in einer Comfort-Version mit 4,2 Tonnen Gesamtgewicht als auch in einer Lightweight-Variante mit 3,5 Tonnen an. Um zusätzlich Gewicht zu sparen, verzichtet die Lightweight-Version in der Serienausführung auf Ausstattungsdetails wie etwa die Zusatzpolster zur Betterweiterung. Außerdem kommen teils leichtere Komponenten zum Einsatz, z.B. ein Herd mit emailliertem Drahtrost und Edelstahlboden statt Gussrost und Glasboden. Weinsberg: Zwei Superlight-Baureihen Das schwäbische Unternehmen hat sich auf Möbel- und Innenausbau in Leichtbauweise spezialisiert. Für unterschiedliche Bereiche im Mobil stehen eigens entwickelte Materialkompositionen bereit: für den Möbelbau beispielsweise Sandwichplatten mit leichten EPS-, XPS- oder PET-Kernen. Die sind laut Hersteller nicht nur bis zu 45 Prozent leichter als Pappelsperrholz, sondern teils auch günstiger. Teilweise sind Kern und Decklagen an den Seiten durch Polyurethan miteinander vergossen, was für zusätzliche Stabilität sorgt. Für den Boden, der eine hohe Biegefestigkeit und Wasserresistenz benötigt, hat Vöhringer eine spezielle Leichtbauplatte entwickelt. Den Kern dieser Platte bilden Schäume bzw. Waben, die aus unterschiedlichen Materialien bestehen können. Die Deckschicht besteht aus einem Glasfaser-Polypropylen-Gelege. Auch für die Verkleidung von Wänden und Decken hat Vöhringer verschiedene Leichtbaumaterialien im Angebot. Die sind atmungsaktiv, schallisolierend und können für eine angenehme Optik und Haptik teilweise mit Stoffen kaschiert werden. Zu den Kunden von Vöhringer zählen zahlreiche kleinere und größere Hersteller aus der Reisemobil-Branche. Für die Campingbus-Marke Alphavan hat Vöhringer beispielsweise den kompletten Möbel- und Innenausbau ausgeführt. Vöhringer: Auf Leichtbaumöbel spezialisiert Bei zwei seiner aktuellen Baureihen, dem Alkovenmobil Carahome und dem Integrierten Caracore, setzt Weinsberg die sogenannte Superlight-Technologie ein. Beide Baureihen sind in unterschiedlichen Grundrissen erhältlich, das Gesamtgewicht liegt bei allen Grundrissvarianten bei 3,5 Tonnen. Durch die Superlight-Bauweise verspricht Weinsberg fast 30 Prozent mehr Zuladung. Um das zu erreichen, kommen beim Möbelbau Leichtbauplatten der Marke Lisocore zum Einsatz. Die bestehen aus einer gewellten Kernschicht aus Holz- und Pflanzenfaservlies, die mit den Deckschichten aus Furniersperrholz verklebt sind. Der Fahrzeugboden besteht aus einer 52 Millimeter starken Sandwichplatte mit XPS-Schaum. Auch die Sitzbank in den Carahome- und Caracore-Modellen hat Weinsberg nach eigenen Angaben besonders leicht gestaltet. Zudem sind die Fahrzeuge mit leichten Blattfedern aus GfK ausgestattet, optional sind Lithium-Batterien statt Blei-Akkus erhältlich. Leichtbau ist in der Caravaning-Industrie seit jeher wichtig. Das wird auch so bleiben, wenn der B-Führerschein für Wohnmobile bis 4,25 Tonnen den Druck etwas von den Herstellern nimmt. Die haben aber gerade erst angefangen mit den modernsten Leichtbaumaterialien wie EPP (expandiertes Polypropylen) zu arbeiten. Vorreiter sind hier Adria mit Einzelelementen und Knaus, die ab 2026 in allen Campingbussen auf große EPP-Bauteile setzen.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2207575.jpg", + "alt": "Leichtbau Reisemobile XPS-Kern", + "caption": "Leichtbau Reisemobile XPS-Kern", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/", + "title": "5 Camper-Marken aus Slowenien: Ernstzunehmende Alternativen zu Hymer und Co", + "date": "Thu, 19 Jun 2025 11:00:00 +0200", + "summary": "

    Slowenische Camper-Marken wie Adria und Robeta haben sich längst als zuverlässige Anbieter etabliert. Sie stehen für exzellente Technik, hochwertiges Design und konkurrenzfähige Preise. Fünf slowenische Marken im kurzen Porträt.

    ", + "text": "In der deutschen Campingszene wächst das Interesse an Marken aus Ländern wie Polen , Slowenien und sogar China . Oft wird ihnen primär eines zugeschrieben: günstige Preise. Doch diese Vorstellung trifft so nicht immer zu. Vielmehr bieten diese Marken häufig ein überzeugendes Preis-Leistungs-Verhältnis. Besonders spannend sind dabei die slowenischen Hersteller, die keineswegs Neulinge am Markt sind: Einige von ihnen produzieren bereits seit den 1970er und 1980er Jahren, lange bevor Wohnmobile hierzulande ein Boomsegment wurden. Die bekannteste slowenische Marke auf dem deutschen Markt ist Adria , die mit ihrer Tochtermarke Sun Living eine breite Palette, von Einsteiger- bis Premiumfahrzeugen, abdeckt. Und auch wenn die Marke Robeta hierzulande erst in den letzten Jahren für Aufsehen sorgte, gibt es sie schon seit 2011. Slowenien bietet im heiß umkämpften Markt der Wohnmobile und Wohnwagen für fast jeden Geschmack und Geldbeutel etwas: von robusten Einsteigermodellen über stylische Campervans bis zu exklusiven Luxus-Campern im Boutique-Stil. Sogar der Offroad- und Allrad-Trend spiegelt sich mit der Marke Megamobil wider, die einige besonders geländetauglich anmutende Kastenwagen produziert. Kurz gesagt: Slowenische Camper überzeugen nicht mit Billigpreisen, sondern mit einer ausgewogenen Mischung aus Qualität, Design, Ausstattung und einem konkurrenzfähigen Preis – eine spannende Alternative zu den klassischen deutschen Herstellern. Wir stellen fünf slowenische Hersteller und ihre Modellpalette vor. 1. Adria – Premium-Marke mit Geschichte Adria ist das Flaggschiff unter Sloweniens Freizeitfahrzeugmarken. Seit der Gründung 1965 produziert das Unternehmen durchgängig in Novo Mesto – heute in einem der modernsten Werke Europas. Über 600.000 Fahrzeuge haben die Slowenen bislang gefertigt, darunter Caravans, teil- und vollintegrierte Wohnmobile (Coral, Matrix, Sonic) sowie Campervans (Twin Supreme u. a.). Die Produktion setzt dabei auf hochmoderne und ISO-zertifizierte Prozesse sowie umfangreiche Qualitätsprüfungen – inklusive Dichtigkeit-Checks in Monsunkammern und Extremtests in Klimakammern bei bis zu –40 °C. Die Marke gehört seit 2017 zur französischen Trigano-Gruppe, produziert aber weiterhin eigenständig in Slowenien. Adria verbindet Premium-Design und zuverlässige Technik mit industrieller Stärke – und besetzt so den europäischen Mittel- bis Oberklassemarkt. Segmente: Caravans, Vans, teilintegrierte und integrierte Wohnmobile, Alkoven Baureihen: Caravans: Aviva (Lite), Action, Altea , Adora, Alpina , Astella; Vans: Twin (Sports, Supreme, Max, Supertwin ); Teilintegrierte: Compact (Max), Coral, Matrix, Coral XL (Alkoven); Integrierte: Sonic, Supersonic Basispreise : ab circa 10.000 bis 50.000 Euro (Caravans); ab circa 60.000 bis 150.000 Euro (Vans, TIs und Integrierte) Besonderheiten: ISO-zertifizierte Fertigung mit Monsun- und Klimakammern, digitales MACH-System, Panorama-Design, mehrfach ausgezeichnet Hier geht es zum Test des Adria Twin 640 SGX 2. Robeta – Boutique-Luxus aus Slowenien Robeta hat sich seit der Gründung 2011 in den oberen Rängen des Segments der Luxus-Campingbusse auf dem europäischen Markt etabliert. Mit individualisierbaren Serienmodellen (\" Adonis \", \"Apollo\", \" Ares \" u. v. a.) bietet Robeta über 15.000 mögliche Konfigurationen für Kundinnen und Kunden. Jedes Fahrzeug kommt dabei handsigniert direkt vom Monteur. Ein besonderer Hingucker: die Robeta Schumacher Edition – präsentiert mit Ex-Formel-1-Star Ralf Schumacher auf dem Caravan Salon 2022. Basierend auf dem Mercedes Sprinter (7,36 m, 190 PS), ausgestattet mit Yacht-inspiriertem Interieur, Solaranlage, JL‑Audio-Soundsystem und luxuriösem Sanitärbereich – und einem Preis von rund 279.000 Euro . Eine weitere Besonderheit der Slowenen sind die Leichtbaumöbel aus recyceltem Kunststoff, mit denen sie nach eigenen Angaben bis zu 220 kg Gewichtsersparnis pro Fahrzeug erreichen. Robeta richtet sich damit an Premiumkäuferinnen und -käufer mit Stilbewusstsein, die Individualität statt Massenware, luxuriöses Design und technische High-End-Ausstattung zu Listenpreisen suchen. Segmente: ausschließlich Kastenwagen Baureihen: drei Serienmodelle (\" Adonis \", \"Apollo\", \" Ares \") plus Sonder-Editionen wie die Schumacher Edition Basispreise : ab ca. 80.000 bis 279.000 Euro Besonderheiten: Leichtbaumöbel aus recyceltem Kunststoff mit bis zu 220 kg Gewichtsersparnis, handsignierte Fahrzeuge, rund 15.000 Konfigurationsoptionen Hier geht es zum Test des Robeta Adonis 3. Sun Living – budgetfreundlicher Einstieg Als Schwester-Marke von Adria und Teil der Trigano-Gruppe (seit 2017) zielt Sun Living gezielt auf Einsteiger- und Mittelklasse ab. Weil Sun Living im gleichen Werk wie Adria gebaut wird, kann die Marke hochwertige Ausstattungen wie GFK-Boden, Kompressor-Kühlschrank und digitale Steuerung auch in günstigeren Modellen anbieten. Ein Marktvorteil. Auch die hohen Qualitätsstandards und das technische Know-how im Werk in Novo Mesto kommen den Einsteigermodellen von Sun Living zugute. Die aktuelle Modellpalette umfasst Kastenwagen (V-Serie) , teilintegrierte Modelle (S-Serie) sowie klassische Alkovenmobile (A-Serie) – alle auf Citroën Jumper oder Fiat Ducato. Besonders beliebt: der kompakte V 60 SP mit Aufstelldach oder der S 70 SP , ein clever konzipierter Teilintegrierter mit Querbett. Einstiegspreise liegen meist zwischen 57.000 und 70.000 Euro , je nach Modell und Ausstattung. Innen dominiert ein funktionales, helles Design mit pflegeleichten Materialien, das vor allem Camping-Neulinge und Familien anspricht. Wer auf Individualisierungsoptionen verzichten kann, bekommt hier viel Technik und Raum zum attraktiven Preis – ohne auf Solidität und durchdachte Details zu verzichten. Segmente/Baureihen: Vans (V-Serie), Teilintegrierte (S-Serie), Alkoven (A-Serie) Basispreise: ab ca. 57.000 bis 70.000 Euro Besonderheiten: Ausstattung wie GFK-Boden, Kompressor-Kühlschrank, digitale Steuerung aus Adria-Fertigung 4. Tourne – Der schicke Außenseiter Tourne fertigt ebenfalls in Slowenien und baut ausschließlich kompakte Campervans. Preislich ist die kleine Marke zwischen Sun Living und Robeta angesiedelt – kein übertrieben luxuriös, aber hochwertig, individuell und klar positioniert. Das Unternehmen kombiniert skandinavisch inspirierte Innenraumgestaltung – helle Holzdekore, klare Strukturen, dezente LED-Beleuchtung – mit praxisnaher Technik. Besonders hervorzuheben ist die effektive Wintertauglichkeit: Alle Fahrzeuge verfügen über eine vollständige Isolierung, Fußboden- und Dieselheizung sowie ein durchgängiges Belüftungssystem. Die Modellpalette umfasst aktuell die Baureihen Cruise und Select , jeweils in den Längen 6,00 und 6,36 Metern – alle auf Citroën Jumper mit optionalem Allrad und Automatikgetriebe. Der Einstiegspreis liegt bei rund 58.700 Euro (Cruise 6.0), die Topmodelle wie der Select 6.4 kosten ab 83.000 Euro . Ein besonderes Merkmal ist das patentierte \"Dream4\"-System, mit dem sich vier vollwertige Schlafplätze im Kastenwagen realisieren lassen – ganz ohne Aufstelldach. Segmente: ausschließlich kompakte Campingbusse (Kastenwagen) Baureihen: Cruise und Select (je in 6,00 m & 6,36 m) Basispreise : ab ca. 59.000 bis 83.000 Euro Besonderheiten: Skandinavisch inspiriertes Interieur, lückenlose Isolation (Fußboden- & Dieselheizung), patentiertes Dream4 -Schlafsystem für vier Personen Hier geht es zum Test des Tourne 6.4 5. Megamobil – Alternative Größe mit Komfort Megamobil produziert ausschließlich Kastenwagen – und das in sorgfältiger Handarbeit. Das slowenische Familienunternehmen mit Sitz in Slovenska Bistrica hat seine Wurzeln in den 1960er-Jahren, der Ausbau von Campervans erfolgt seit rund 15 Jahren. Heute fertigen rund 80 Mitarbeiter jährlich etwa 500 Fahrzeuge – mit viel Sorgfalt, robusten Materialien und einem klaren Fokus auf Praxistauglichkeit und ganzjährige Nutzbarkeit. Alle Modelle entstehen auf Basis von Fiat Ducato, Citroën Jumper, MAN TGE oder VW Crafter – und unterscheiden sich in Länge (von 5,40 bis 6,80 m), Raumaufteilung und Technik. Die Möbel bestehen aus 15 mm starkem Pappelsperrholz mit pflegeleichter CPL-Oberfläche, die Fahrzeuge sind rundum isoliert und mit Armaflex gedämmt. Jedes Exemplar durchläuft nach Angaben des Herstellers vor der Auslieferung umfangreiche Funktions- und Dichtheitsprüfungen. Besonders beliebt ist der Mega Sport 640 : ein clever konzipierter Campervan mit elektrischem Hubbett über einem großen Stauraum im Heck – dort lassen sich selbst zwei Fahrräder unterbringen. Im promobil-Test lobten wir primär das flexible Bettkonzept, die gute Familiennutzung und die hochwertige Verarbeitung. Kritik gab es nur für kleinere Komfortdetails wie fehlende Ablageflächen im Bettbereich. Zum vollständigen Test des Mega Sport 640 geht es hier. Segmente: ausschließlich Kastenwagen Baureihen: Lounge, Classic, Sport, Revolution , Twin, Re-Aktiv , 4x4 Basispreise : ab ca. 70.000 Euro", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2051250.jpg", + "alt": "Tourne Mobil 6.0 (2024)Campingbus i", + "caption": "Tourne Mobil 6.0 (2024)Campingbus i", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/", + "title": "„Bella Italia – Camping auf Deutsch“ Recap Folge 2: Sascha und Dennis vom Bodensee als Italiener", + "date": "Tue, 17 Jun 2025 16:00:00 +0200", + "summary": "

    Endlich geht es wieder los: die neue Staffel \"Bella Italia – Camping auf Deutsch\" ist auf RTL II gestartet. In Folge 2 wollen die Bodensee-Boys als Italiener durchgehen – ohne Italienisch-Kenntnisse. Wie das klappt?!

    ", + "text": "Gestern (16.06.2025) lief nun schon die zweite Folge der neuen Staffel \"Bella Italia – Camping auf Deutsch\" auf RTL II. Mit dabei sind natürlich die Fingerhuths und die Bodensee-Boys, aber auch ein paar neue Gesichter. Eines vereint sie alle: sie machen Urlaub auf dem berühmten italienischen Campingplatz \" Marina di Venezia \". Fingerhuths gehen dem Marina fremd Naja fast! Sascha und Nicole Fingerhuth und Clique scheinen dieses Mal dem Mega-Campingplatz fremdzugehen und urlauben lieber an der Costa Brava in Spanien. Das Filmteam ist trotzdem dabei. Ob sie diese Staffel noch auf dem Marina zu sehen sind? Es bleibt spannend. Für mich ist es immer wieder erstaunlich, was die Camperinnen und Camper alles aus ihren Wohnmobilen und Wohnwagen zaubern. Sei es Micha, der ein Sammelsurium an bunten Strasssteinchen aus seinem Wohnwagen zaubert, mit dem er uns seine Kumpels Horst und Sascha ihre Kühlboxen verzieren oder Hypnotiseur Peter und seine Frau Angelika für die ein Eierkocher zur Standardausrüstung gehört. Folge 2 \"Bella Italia\": Was ist passiert? Einen liebenswerten Moment gab es bei den Camping-Neulingen Maysofie und Tochter Mia, die zum allerersten Mal die Wohnwagen-Toilette ausleeren gehen mussten. Sicher erinnern sich die meisten langjährigen Camping-Fans an ihr eigenes erstes Mal. Die Kassette der Toilette über den Platz ziehen – das kostet zunächst einmal Überwindung. Maysofie opfert sich dann tapfer und leert die Brühe in den Ausguss. Unter Würgen und Jammern haben die beiden es hinter sich gebracht. Die Bondesee-Boys Sascha und Dennis sind wieder auf einer Mission: Sie wollen als waschechte Italiener durchgehen und das nahegelegene Venedig unsicher machen. Das Problem ist nur: Italienisch sprechen sie noch schlechter als Englisch. Das macht aber gar nichts. Das Liebenswerte an den beiden Männern ist ja, dass sie sich mit Hand und Fuß verständigen können und zusammen immer Spaß haben. Nach so einigen Aperol-Spritz läuft es dann mit der Kontaktaufnahme auf Italienischen auch gar nicht so schlecht. Natürlich alles nur freundschaftlich. Mittlerweile sind beide Schwaben vergeben und Flirts suchen sie auf dem Marina di Venezia nicht mehr. Ehepaar kehrt zurück Gegen Ende der Folge reist dann noch ein weiteres Kult-Pärchen an. Lex und seine frisch angetraute Annika – sie haben sich in der letzten Staffel das Ja-Wort am Strand des Campingplatzes gegeben – reisen mit ihren beiden Müttern an. Das verspricht Unterhaltung. Das Ehepaar wünscht sich Zweisamkeit. Und die Mütter? Familienzeit. Ob das gut geht?! Wir können gespannt sein auf die nächste unterhaltsame Folge der Doku-Soap \"Bella Italia – Camping auf Deutsch\" am 23.06.2025.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2214454.jpg", + "alt": "Bella Italia - Camping auf Deutsch", + "caption": "Bella Italia - Camping auf Deutsch", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2214455.jpg", + "alt": "Bella Italia - Camping auf Deutsch", + "caption": "Bella Italia - Camping auf Deutsch", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/", + "title": "Tipps für die Reiseplanung: Diese kostenlosen Apps müssen Camper kennen", + "date": "Sat, 14 Jun 2025 14:00:00 +0200", + "summary": "

    Diese Apps retten den Urlaub: Ob Krankheit, Notfall oder Sprachbarriere – hier sind 5 App-Kategorien, die im Ausland helfen.

    ", + "text": "Im Urlaub will man zwar nicht ständig am Mobiltelefon hängen, doch in vielen Situationen kann es ein nützlicher Helfer sein. Während die Internetrecherche schnell vom eigentlichen Ziel ablenkt, bieten spezialisierte Apps einen klaren Fokus. Sie lenken nicht ab, sondern konzentrieren sich auf ein Thema – und genau das macht sie so praktisch. Ein gutes Beispiel ist die promobil Stellplatz-Radar-App , die gezielt bei der Suche nach Camping- und Stellplätzen oder Entsorgungsstationen unterstützt. Doch nicht nur Übernachtungsplätze und Entsorgungsmöglichkeiten sind im Campingurlaub unverzichtbar. Wir haben kostenlose Apps aus fünf Kategorien zusammengestellt, die im Krankheitsfall, bei Sprachbarrieren oder in Notfällen in fremder Umgebung weiterhelfen. 1. Mobile Daten im Blick behalten Viele Apps funktionieren nicht nur offline, sondern verbrauchen auch mobile Daten. Daher steht am Anfang jeder Auslandsreise der Blick auf den Mobilfunktarif und das verfügbare Datenvolumen in EU und Nicht-EU. Besonders in Grenzregionen zu Nicht-EU-Staaten wie etwa der Schweiz kann es vorkommen, dass sich das Mobiltelefon in das Netz des Nachbarlands einwählt und je nach Tarif hohe Roaming-Gebühren anfallen. Abhilfe bieten die Apps der Mobilfunkanbieter, über die man die persönlichen Tarifdetails einsehen, sein verbrauchtes Datenguthaben kontrollieren und gegebenenfalls erweitern kann. Die Telekom bietet diesen Service in der \"Magenta-App\" : Apple Store: MeinMagenta: Handy & Festnetz im App Store Google-Play-Store: MeinMagenta: Handy & Festnetz – Apps bei Google Play Bei Telefónica findet man die entsprechenden Funktionen in der \" Mein O2-App \": Apple Store: Mein o2 im App Store Google-Play-Store: Mein o2 – Apps bei Google Play Bei Vodafone in der App \" Mein Vodafone \": Apple Store: MeinVodafone – Apps bei Google Play Google-Play-Store: MeinVodafone im App Store Bei 1&1 gibt es dafür die App \" Control-Center \": Apple Store: 1&1 Control-Center im App Store Google-Play-Store: 1&1 Control-Center – Apps bei Google Play 2. Sicherheitshinweise immer auf dem Schirm Je nach Reiseland sollte man sich schon vor dem Losfahren über aktuelle Entwicklungen am Zielort informieren. Mit der App \"Sicher Reisen\" vom Auswärtigen Amt kann man im Vorfeld und unterwegs die Reise- und Sicherheitshinweise des Urlaubslands im Blick behalten. Bei aktuellen Änderungen wird man auf Wunsch automatisch informiert. Außerdem findet man in der App detaillierte Informationen zu Ansprechpartnern der deutschen Auslandsvertretungen. Die App enthält zudem Hinweise, wie man im Urlaub vorgeht, falls der Ausweis verloren geht oder der Zugang zum Konto oder zur Kreditkarte nicht mehr möglich ist. Die App \" Sicher Reisen \" gibt es in den Stores von Apple und Google: Apple Store: Sicher Reisen im App Store Google-Play-Store: Sicher Reisen – Apps bei Google Play Sogenannte Notfall-Informations-Apps senden bei Unwettern und anderen Katastrophenlagen Push-Nachrichten aufs Mobiltelefon. Sie warnen vor Gefahren wie etwa Hochwasser, Feuer oder auch bei Gefährdungslagen, etwa nach Anschlägen. Wer innerhalb Deutschlands unterwegs ist, wird über die App \"Nina\" vom Bundesamt für Bevölkerungsschutz bei Gefahrenlagen an heimischen Standorten gewarnt. Die App \" Nina \" gibt es in den Stores von Apple und Google: Apple Store: NINA im App Store Google-Play-Store: NINA - Die Warn-App des BBK – Apps bei Google Play Bei Reisen innerhalb von Europa empfiehlt sich eine international vernetzte Warn-App wie \"Katwarn\". Dank der sogenannten \"Katwarn-Roaming-Technologie\" erhält man – bei entsprechender Einstellung – auch im Ausland Warnmeldungen für den aktuellen Aufenthaltsort, ohne die App des jeweiligen Landes installieren zu müssen. Die App \" Katwarn \" gibt es in den Stores von Apple und Google: Apple Store: KATWARN im App Store Google-Play-Store: KATWARN – Apps bei Google Play 3. Bei Krankheit ärztlichen Rat suchen Gerade im Urlaub und womöglich noch im Ausland kann es herausfordernd sein, einen Arzt oder ein Krankenhaus zu finden. Da ist es beruhigend, wenn man sich im Vorfeld bereits auf eine solche Situation vorbereitet hat. Viele nutzen auch im Alltag schon Apps, um Arzttermine zu buchen oder sich per Videosprechstunde von einem Arzt beraten zu lassen. Unabhängig von einer bestimmten Krankenversicherung kann man beispielsweise über die App des Münchner Unternehmens Teleclinic Online-Arztgespräche vereinbaren, ggf. sogar beim eigenen Arzt, wenn er dort gelistet ist. Die App von Teleclinic gibt es hier zum Download: Apple Store: TeleClinic - Online Arzt im App Store Google-Play-Store TeleClinic - Online Arzt - Apps on Google Play Auch der ADAC bietet diesen Service in Kooperation mit Teleclinic und Doctolib an. Dafür kann man den ADAC-Onlinezugang nutzen. Für die Online-Sprechstunde ist eine ADAC-Mitgliedschaft oder ein Auslandskrankenschutz des ADAC notwendig. Hier geht es zur ADAC \" Medical App \" in den Stores von Apple und Google: Apple Store: ADAC Medical: Gesundheitsapp im App Store Google-Play-Store: ADAC Medical: Gesundheitsapp – Apps bei Google Play Auch viele Krankenversicherungen bieten ihren Versicherten den Service der Telesprechstunde in eigenen Apps. Hier einige Beispiele der größten gesetzlichen Krankenversicherungen: Die AOK mit der App \" AOK NAVIDA \": Apple-Store: AOK NAVIDA im App Store Google-Play-Store: AOK NAVIDA – Apps bei Google Play Die Barmer mit der \" Teledoktor-App \": Apple-Store: BARMER Teledoktor-App im App Store Google-Play-Store: BARMER Teledoktor-App – Apps bei Google Play Die DAK mit der \" DAK-App \": Apple-Store: DAK App im App Store Google-Play-Store: DAK App – Apps bei Google Play Techniker Krankenkasse mit ihrer \" App TK-Doc \": Apple-Store: TK-Doc im App Store Google-Play-Store: TK-App – Apps bei Google Play Viele private Krankenversicherer bieten ihren Versicherten ebenfalls Apps für den Krankheits- oder Notfall an, wie etwa der Kölner Krankenversicherer Debeka mit der App \"Auslands SOS\". Zum Download von \"Auslands-SOS\" geht es hier: Apple-Store: Debeka Auslands-SOS – Apps bei Google Play Google-Play-Store: Debeka Auslands-SOS im App Store Vor-Ort und Onlinetermine buchen kann man auch über die Apps von Doctolib oder Jameda. Bei Doctolib findet man neben Arztpraxen in Deutschland auch Ärztinnen und Ärzte in Frankreich und Italien. Zum Download von \"Dictolib\" geht es hier: Apple-Store: Doctolib - Die Gesundheits-App im App Store Google-Play-Store: Doctolib - Die Gesundheits-App – Apps bei Google Play Hier gibt es die App von Jameda zum Download: Apple-Store: jameda: Ärzte finden & buchen im App Store Google-Play-Store: jameda: Ärzte finden & buchen – Apps bei Google Play 4. Sprachprobleme überwinden Wer in Europa reist, trifft unweigerlich auf Situationen, in denen er sich in einer fremden Sprache nur schwer oder gar nicht verständigen kann. Statt eines klassischen Wörterbuchs greifen viele inzwischen zu Übersetzungsapps. Eine empfehlenswerte Alternative zu den US-Anbietern Google und Microsoft ist die App von DeepL die in Köln entwickelt wird. DeepL gilt dabei als besonders präzise bei europäischen Sprachen, während Google Translate die meisten Sprachen unterstützt. Alle drei Apps entwickeln sich laufend weiter und unterstützen auch die Kamera- und Bildübersetzung. So kann man etwa fremdsprachige Speisekarten oder die Beschreibung von Sehenswürdigkeiten direkt übersetzen lassen. Auch die Spracheingabe und -ausgabe unterstützen alle drei. Der Vorteil der Übersetzungs-App von Microsoft ist die Offline-Nutzung, wenn man sich eine bestimmte Sprache in der App im Vorfeld heruntergeladen hat. Zur App von DeepL geht es hier: Apple-Store: DeepL Translate on the App Store Google-Play-Store: DeepL Übersetzer – Apps bei Google Play Der \"Google Übersetzer\" in den App-Stores: Apple-Store: Google Übersetzer im App Store Google-Play-Store: Google Übersetzer – Apps bei Google Play Hier geht es zum Microsoft Übersetzer: Apple-Store: Microsoft Translator im App Store Google-Play-Store: Microsoft Übersetzer – Apps bei Google Play 5. Im Notfall Hilfe rufen In Ausnahmesituationen vergisst man oft die einfachsten Dinge. Die Rufnummer 112 ist in Deutschland und Europa die Notrufnummer für lebensbedrohliche Notfälle wie Brände, Unfälle und medizinische Notfälle. Sie ist ohne Vorwahl und kostenlos erreichbar. In Deutschland kann man einen Notruf auch über die App \"Nora\" absetzen. Sie ist in Kooperation der Bundesländer entstanden. Zuvor muss man sich mit der eigenen Mobilfunknummer registrieren und per Postident mit seinem Ausweis identifizieren. So soll unter anderem Missbrauch verhindert werden. Nach der Verifizierung kann man über einen Button in der App bei Notfällen die Polizei, die Feuerwehr und den Rettungsdienst überall in Deutschland alarmieren. Mit der Standort-Funktion des Mobiltelefons wird der genaue Standort an die Leitstelle übermittelt. Über die App können auch Notrufe abgesetzt werden, ohne sprechen zu müssen. Zum Download der \" Nora \"-App: Apple-Store: nora - Notruf-App im App Store Google-Play-Store: nora - Notruf-App – Apps bei Google Play Die in der Schweiz entwickelte Notruf-App \"EchoSOS\" funktioniert im Gegensatz zu \"Nora\" weltweit. Auch sie erkennt den Standort und zeigt die Notrufnummer des entsprechenden Landes an. Der Notruf kann dann wie bei \"Nora\" aus der App heraus automatisch gestartet werden. Dabei wird auch der Standort an die Leitstelle übertragen. Ist am Notrufort kein mobiles Internet verfügbar, dann wird über die App automatisch eine SMS verschickt an die Leitstelle verschickt. Hier geht es zum Download von \" EchoSOS \": Apple-Store: EchoSOS on the App Store Google-Play-Store: EchoSOS – Apps bei Google Play In beiden Apps kann man sich auf die Nutzung der Anwendung im Notfall vorbereiten und über eine Demo den Notfall simulieren.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/", + "images": [ + { + "url": "https://matomo.promobil.de/matomo.php?idsite=5&rec=1&e_c=Custom%20Events&e_a=JavaScript%20disabled&e_n=true", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2213667.jpg", + "alt": "Kostenlose_Apps_Datenvolumen", + "caption": "Kostenlose_Apps_Datenvolumen", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2213668.jpg", + "alt": "Kostenlose-Apps_Notfall-App", + "caption": "Kostenlose-Apps_Notfall-App", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2213669.jpg", + "alt": "Kostenlose-Apps_Arztgespräch", + "caption": "Kostenlose-Apps_Arztgespräch", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2213670.jpg", + "alt": "Kostenlose-Apps_Übersetzer", + "caption": "Kostenlose-Apps_Übersetzer", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2213671.jpg", + "alt": "Kostenlose-Apps_Krankenwagen", + "caption": "Kostenlose-Apps_Krankenwagen", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225218.jpg", + "alt": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "caption": "Ahorn Camp, CV 630, Campingbus, Innenraum", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/1992117.jpg", + "alt": "MAN-Campingbus-Ausbau", + "caption": "MAN-Campingbus-Ausbau", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225495.jpg", + "alt": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "caption": "Motorhome Exclusiv, Adventure Pro, 4x4-Campingbus", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2225200.jpg", + "alt": "Gut Damp", + "caption": "Gut Damp", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:51/rt:fill/w:90/plain/2216436.jpg", + "alt": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "caption": "f_Weinsberg-Carabus_540_MQ_Sitzgruppe", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://www.promobil.de/_next/static/media/newsletter.a6565611.jpg", + "alt": "", + "caption": "Bild aus Originalartikel", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-ig.svg", + "alt": "Social Icon instagram", + "caption": "Social Icon instagram", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-fb.svg", + "alt": "Social Icon facebook", + "caption": "Social Icon facebook", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-rss.svg", + "alt": "Social Icon RSS", + "caption": "Social Icon RSS", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-yt.svg", + "alt": "Social Icon youtube", + "caption": "Social Icon youtube", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + }, + { + "url": "https://www.promobil.de/_next/static/img/icon-x.svg", + "alt": "Social Icon Twitter", + "caption": "Social Icon Twitter", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/frankreichs-autobahnen-kein-adac-schutz-bei-pannen/", + "title": "Regeln auf Frankreichs Autobahnen im Pannenfall: Kein Schutz durch ADAC & Co. auf Autobahnen", + "date": "Mon, 04 Aug 2025 16:00:00 +0200", + "summary": "

    ADAC & Co. dürfen bei Pannen in Frankreich nicht helfen – was Camperinnen und Camper auf Autobahnen wissen und beachten müssen.

    ", + "text": "Wer mit dem Wohnmobil durch Frankreich reist und auf der Autobahn liegenbleibt, kann von seinem Schutzbriefanbieter keine Hilfe erwarten. Während etwa in Deutschland oder Italien Automobilclubs und Schutzbriefversicherungen Hilfe organisieren, greifen auf Frankreichs Autobahnen andere Regeln. Nur Notrufsäule oder 112 – sonst nichts Im Fall einer Panne auf der französischen Autobahn dürfen Dienstleister wie etwa der ADAC keine Hilfe organisieren. Stattdessen muss die Panne über eine der Notrufsäulen oder über die Notrufnummer 112 gemeldet werden. Nach der Meldung koordiniert der private Autobahnbetreiber den dafür autorisierten Pannendienst, der binnen rund 30 Minuten eintreffen sollte. Abschleppen oder Reparatur vor Ort Der Pannenhelfer prüft, ob das Wohnmobil vor Ort repariert werden kann oder in eine Werkstatt abgeschleppt werden muss. Beim Abschleppen hat man die Wahl zwischen zwei Optionen: Man lässt sich in die nächste Werkstatt abschleppen oder lässt das Wohnmobil auf Wunsch zu einem anderen Ort bringen, allerdings maximal fünf Kilometer abseits der nächsten Autobahnausfahrt. Gesetzlich geregelte Abschleppkosten bis 3,5 Tonnen Doch zumindest Fahrer von Wohnmobilen bis 3,5 Tonnen können aufatmen: Für das Abschleppen auf Frankreichs Autobahnen gelten gesetzlich festgelegte Tarife. So dürfen aktuell für das Abschleppen eines Wohnmobils unter 3,5 Tonnen tagsüber pauschal 148,67 Euro berechnet werden (Montag bis Freitag zwischen 8 und 18 Uhr). In den übrigen Zeiten sowie an Wochenenden und Feiertagen gilt eine Pauschale von 223,01 Euro. Zur besseren Transparenz müssen diese Preise im Pannenhilfefahrzeug ausgehängt sein. Bezahlt werden muss die Rechnung direkt vor Ort. Schutzbriefversicherungen erstatten oft im Nachhinein die Kosten fürs Abschleppen, der ADAC etwa bis zu 300 Euro. Reparaturen zahlt man selbst Die Kosten für eine Reparatur durch die Pannenhilfe müssen Wohnmobilfahrer im Gegensatz zu den Abschleppkosten auch mit Schutzbrief selbst tragen. Dabei sollte man unbedingt darauf achten, dass man eine Rechnung bekommt. Wie auch beim Abschleppen ist der Pannenhelfer verpflichtet, eine Rechnung auszustellen, auf der alle erbrachten Leistungen und deren Preis aufgeführt sind. Schwerer als 3,5 Tonnen? Dann wird's teuer Kritischer wird es für Besitzer schwererer Wohnmobile: Ab einem zulässigen Gesamtgewicht von über 3,5 Tonnen gibt es keine regulierten Tarife auf Frankreichs Autobahnen. Die Preise richten sich nach den Vorgaben des gerufenen Abschleppdienstes – vierstellige Beträge sind keine Seltenheit. Wer ein großes Wohnmobil fährt, sollte daher unbedingt vor Reiseantritt überprüfen, ob und in welcher Höhe der Versicherungsschutz greift, und sich beim jeweiligen Versicherer rückversichern, wie er im Pannenfall vorgehen soll. So verhalten Sie sich bei einer Panne richtig In Frankreich ist es nicht erlaubt, sich zu Fuß auf der Autobahn (einschließlich Pannenstreifen) zu bewegen. Alle Insassen des Wohnmobils müssen bei einer Panne oder einem Unfall außerhalb des Fahrzeugs eine Warnweste tragen und unverzüglich die Fahrbahn und den Standstreifen verlassen. Auf das Aufstellen eines Warndreiecks auf Autobahnen kann laut ADAC verzichtet werden, wenn der Fahrer sich dadurch in Gefahr bringt. Dagegen ist auf Landstraßen und innerorts das Aufstellen eines Warndreiecks vorgeschrieben. Wer sein Fahrzeug noch aus eigener Kraft bewegen kann, sollte unbedingt versuchen, die nächste Autobahnausfahrt zu erreichen. Auf Landstraßen kann man dann wieder frei entscheiden, welchen Pannenhelfer man beauftragen möchte.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/frankreichs-autobahnen-kein-adac-schutz-bei-pannen/", + "images": [], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/weitere-ratgeber/warntafel-wahnsinn-in-italien-anbringen-an-fahrradtraegern-trotz-neuer-gesetze-empfohlen/", + "title": "Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht?", + "date": "Thu, 31 Jul 2025 10:38:00 +0200", + "summary": "

    Chaos beim Fahrradtransport in Italien: Seit Januar 2025 ist die Warntafel an Kupplungsträgern mit Kennzeichen und Licht offiziell nicht mehr vorgeschrieben. Doch ADAC und ÖAMTC empfehlen, die Warntafel besser weiterhin zu montieren.

    ", + "text": "Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht?\n\nItalienische und internationale Automobilclubs empfehlen Reisenden, trotz neuer Regelungen, Warntafeln an Fahrrad- und Transportträgern ihrer Fahrzeuge anzubringen, um Bußgelder zu vermeiden. Seit Januar 2025 hat Italien eine Gesetzesänderung eingeführt, die besagt, dass diese Tafeln nicht mehr notwendig sind, solange die Beleuchtung sichtbar ist oder der Träger eine eigene Beleuchtung und ein Wiederholungskennzeichen hat. Dies beträfe Fahrzeuge der Klassen M1 und N1, zu denen Wohnmobile und Campingbusse zählen. In der Praxis wird diese Regelung jedoch anscheinend nicht konsequent umgesetzt, und es gibt lokal unterschiedliche Interpretationen, was zu Unsicherheit unter den Reisenden führt. Deshalb raten Automobilclubs, sich weiterhin an die alte Regelung zu halten. Bei Wohnmobilen, bei denen der Fahrradträger direkt an der Heckwand montiert ist, bleibt die Pflicht zur Warntafel bestehen. Jede Warntafel in Italien muss rot-weiß gestreift sein, Mindestmaße von 50 cm x 50 cm haben und aus Metallblech bestehen. Wenn die Ladung am Heck breiter als das Fahrzeug ist, muss an jeder Seite eine Tafel montiert werden.", + "tags": [ + "\"Italien Reisebestimmungen\"", + "\"Automobilclubs Empfehlungen\"", + "\"Fahrzeug Warntafeln\"" + ], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/warntafel-wahnsinn-in-italien-anbringen-an-fahrradtraegern-trotz-neuer-gesetze-empfohlen/", + "images": [ + { + "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-YimPc01cYtOXjUpCATUqDABw/user-eA31w0vmy3fOrb3G64Ygndsr/img-Ksiks2ssSZxpEFf1MQedlap1.png?st=2025-08-15T06%3A48%3A42Z&se=2025-08-15T08%3A48%3A42Z&sp=r&sv=2024-08-04&sr=b&rscd=inline&rsct=image/png&skoid=8b33a531-2df9-46a3-bc02-d4b1430a422c&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-08-14T16%3A59%3A16Z&ske=2025-08-15T16%3A59%3A16Z&sks=b&skv=2024-08-04&sig=e0/ULpNgNLwixo3UapqnxHgR18t4HCpyEtnbmik33yA%3D", + "alt": "KI-generiertes Titelbild zu: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht?", + "caption": "KI-generiertes Titelbild zu: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht?", + "copyright": "OpenAI DALL·E", + "copyright_url": "https://openai.com/dall-e" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "https://www.promobil.de/tipps/achtung-mautschock-warum-viele-wohnmobile-bald-eine-go-box-brauchen/", + "title": "Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box", + "date": "Wed, 30 Jul 2025 16:00:00 +0200", + "summary": "

    Ab 2029 gilt für Wohnmobile mit hoher \"tzGm\" die GO-Box-Pflicht – trotz 3,5 Tonnen \"zGG\" im Fahrzeugschein. promobil erklärt, was das bedeutet.

    ", + "text": "Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box\n\nAb dem 1. Februar 2029 gelten neue Vorschriften für die Mautzahlung auf österreichischen Autobahnen und Schnellstraßen für Wohnmobile. Statt der bisherigen Regelung, nach der sich die Mautpflicht nach dem im Fahrzeugschein eingetragenen zulässigen Gesamtgewicht des Fahrzeugs richtete, ist nun die technisch mögliche Gesamtmasse des Fahrzeugs ausschlaggebend. Das bedeutet, dass alle Wohnmobile, die gemäß Herstellerangaben mehr als 3,5 Tonnen tragen könnten, eine sogenannte GO-Box benötigen, ein elektronisches Gerät für die Mautabrechnung. Diese Geräte sind an speziellen Vertriebsstellen erhältlich und werden an der Windschutzscheibe des Fahrzeugs montiert. Sie registrieren automatisch, wenn das Fahrzeug eine mautpflichtige Strecke befährt und berechnen die Maut dann streckenabhängig.\n\nDie Änderung ist insbesondere für Fahrzeuge relevant, die technisch mehr als 3,5 Tonnen tragen könnten, aber auf ein tatsächliches Gesamtgewicht von 3,5 Tonnen \"abgelastet\" wurden. Kamen solche Fahrzeuge bislang ohne die GO-Box aus, werden sie ab Februar 2029 mautpflichtig, wenn ihre technisch mögliche Gesamtmasse mehr als 3,5 Tonnen beträgt. Bereits seit dem 1. Dezember 2023 galt diese Regelung für alle nach diesem Datum neu zugelassenen Wohnmobile.\n\nFür die Anmeldung und Einrichtung der GO-Box werden die Fahrzeugdaten (einschließlich der Anzahl der Achsen und der Schadstoffklasse, die den Mautpreis beeinflussen), persönliche Daten sowie der Fahrzeugschein benötigt. Nach der Anmeldung erhält der Fahrzeughalter eine Fahrzeugdeklaration, die er bei Fahrten auf mautpflichtigen Strecken in Österreich immer dabei haben muss.", + "tags": [ + "\"Mautvorschriften Österreich\"", + "\"Wohnmobile\"", + "\"GO-Box\"" + ], + "status": "Online", + "link": "https://www.promobil.de/tipps/achtung-mautschock-warum-viele-wohnmobile-bald-eine-go-box-brauchen/", + "images": [ + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/1102576.jpg", + "alt": "Go-Box", + "caption": "Maut, Basis, Wissen, Österreich, Vignette, Go-Box,", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/achtung-mautschock-warum-viele-wohnmobile-bald-eine-go-box-brauchen/", + "width": 430, + "height": 243, + "title": "Maut, Basis, Wissen, Österreich, Vignette, Go-Box," + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2202648.jpg", + "alt": "Wohnmobil, Küste, Parkplatz, Wohnmobil, Mann", + "caption": "Wohnmobil, Küste, Parkplatz, Wohnmobil, Mann", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/achtung-mautschock-warum-viele-wohnmobile-bald-eine-go-box-brauchen/", + "width": 249, + "height": 140, + "title": "Wohnmobil, Küste, Parkplatz, Wohnmobil, Mann" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2203732.jpg", + "alt": "Spanien Polizei Verkehr", + "caption": "05/2025, Spanien Polizei Verkehr", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/achtung-mautschock-warum-viele-wohnmobile-bald-eine-go-box-brauchen/", + "width": 249, + "height": 140, + "title": "05/2025, Spanien Polizei Verkehr" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/2201001.jpg", + "alt": "f_Autohof_estaurant_Verpflegung", + "caption": "f_Autohof, Restaurant, essen, vegetarisch", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/achtung-mautschock-warum-viele-wohnmobile-bald-eine-go-box-brauchen/", + "width": 249, + "height": 140, + "title": "f_Autohof, Restaurant, essen, vegetarisch" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:140/rt:fill/w:249/plain/1107089.jpg", + "alt": "Die Seitensitztruhe bietet sich als Schuhfach an.", + "caption": "Supercheck, Dethleffs Magic Edition T 2 EB, Seitensitztruhe, Schuhfach, Feuerlöscher", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/achtung-mautschock-warum-viele-wohnmobile-bald-eine-go-box-brauchen/", + "width": 249, + "height": 140, + "title": "Supercheck, Dethleffs Magic Edition T 2 EB, Seitensitztruhe, Schuhfach, Feuerlöscher" + }, + { + "url": "https://oaidalleapiprodscus.blob.core.windows.net/private/org-YimPc01cYtOXjUpCATUqDABw/user-eA31w0vmy3fOrb3G64Ygndsr/img-Pl4ik6W7mTrv2MhIbdWlwgOL.png?st=2025-08-15T06%3A51%3A53Z&se=2025-08-15T08%3A51%3A53Z&sp=r&sv=2024-08-04&sr=b&rscd=inline&rsct=image/png&skoid=b1a0ae1f-618f-4548-84fd-8b16cacd5485&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-08-14T15%3A09%3A17Z&ske=2025-08-15T15%3A09%3A17Z&sks=b&skv=2024-08-04&sig=RHIFlJLMumrcr/jEskOVfqJ%2Bns0pDS2HM8l5siBfLmM%3D", + "alt": "KI-generiertes Titelbild zu: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box", + "caption": "KI-generiertes Titelbild zu: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box", + "copyright": "OpenAI DALL·E", + "copyright_url": "https://openai.com/dall-e" + } + ], + "source": "https://www.promobil.de/rss/ratgeber" + }, + { + "id": "87ae83573a39b0296226eaa8c52a03a4", + "title": "Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper", + "date": "Sat, 16 Aug 2025 06:00:00 +0200", + "summary": "

    Gasflasche leer? Das führt auf Reisen oft zu Engpässen. Gut, wenn Nachschub rund um die Uhr zur Verfügung steht – etwa in Form von Gasflaschen-Automaten. promobil hat den 24/7 Tauschautomaten für Gasflaschen ausprobiert.

    ", + "text": "Die Bequemlichkeit des Austauschs von leeren Gasflaschen gegen volle an Automaten ist ein großer Vorteil für Besitzer von Wohnmobilen. Das Verfahren ist einfach: Man stellt die leere Flasche in den Automaten, bezahlt mit Karte und innerhalb von wenigen Minuten erhält man eine volle Flasche. Diese Automaten wurden erfolgreich an einem Globus-Baumarkt in der Nähe von Stuttgart getestet. Es gibt insgesamt 72 dieser Automaten in Globus-Märkten in Deutschland und Luxemburg, an denen sowohl 11- als auch 5-kg-Flaschen getauscht werden können.\n\nNicht nur Wohnmobilbesitzer profitieren von diesem 24-Stunden-Service. Auch Grillfans, die feststellen, dass ihr Gasgrill leer ist, können ihre Flasche schnell und unkompliziert austauschen, vorausgesetzt es gibt einen Markt in der Nähe. Die Gasflaschenautomaten werden von der Firma Insensiv in Bielefeld hergestellt, die seit 2016 für Globus und andere Kunden tätig ist. Je nach Flaschengröße können bis zu 72 volle Gasflaschen in die Automaten passen, die normalerweise auf vier Ausgabebahnen verteilt sind, zusätzlich gibt es eine Bahn für die Annahme leerer Flaschen.\n\nHeutzutage gibt es diese Automaten an 105 Standorten und das Geschäft wächst stetig. Laut Alexander Wiese, Marketing-Verantwortlicher von Insensiv, wird derzeit etwa ein weiterer Automat pro Woche geliefert. Diese Automaten befinden sich nicht nur in Baumärkten, sondern auch an Tankstellen und Lebensmitteldiscountern und zunehmend an Wohnmobilstellplätzen.\n\nDas Netzwerk dieser Automaten ist auch in der Promobil Stellplatz-App und -Datenbank gelistet. Sowohl Reisemobilisten als auch Produzenten, Aufsteller und Betreiber profitieren von diesem Service, und es ist zu hoffen, dass die Anzahl der Automaten in Zukunft weiter steigen wird.\n\nWährend Gastanks, die fest im Fahrzeug installiert sind und ein größeres Volumen haben, an rund 6000 Tankstellen in Deutschland befüllt werden können, ist das Befüllen von sogenannten Tankflaschen, einer Mischung aus Gasflasche und Gastank, an Tankstellen in Deutschland offiziell nicht erlaubt.", + "tags": [ + "Gasflaschen-Automat", + "Wohnmobil", + "Globus-Baumarkt" + ], + "status": "Online", + "link": "https://www.promobil.de/weitere-ratgeber/gasflaschenservice-fuer-camping-und-grillfans-im-promobil-test/", + "images": [], + "source": "https://www.promobil.de/rss/ratgeber", + "source_name": "ratgeber bei www.promobil.de", + "created_at": "2025-08-16T12:49:46.822304", + "word_count": 287, + "rewritten_at": "2025-08-16T12:51:39.038647", + "wp_upload_date": "2025-08-16T12:58:20.442976", + "wp_post_id": 3378 + }, + { + "id": "abbe981f16577cf832b0a291395949ca", + "title": "Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper", + "date": "Fri, 15 Aug 2025 16:00:00 +0200", + "summary": "

    Wer in Italien seinen Müll aus dem Wohnmobil oder Zugfahrzeug wirft, riskiert künftig mehr als nur ein schlechtes Gewissen. Seit August 2025 gelten neue Vorschriften – und die haben es in sich.

    ", + "text": "Für Camper, die sich in Italien aufhalten, könnte das Vergessen eines Müllbeutels neben ihrem Fahrzeug ein kostspieliges Versehen werden, das bis zu 18.000 Euro kosten kann. Dies ist auf ein neues Gesetzespaket zurückzuführen, das die italienische Regierung eingeführt hat, um die zunehmende Verschmutzung an Straßen, Seen und Küsten zu bekämpfen. Dieses Gesetz, das \"decreto-legge 8 agosto 2025, n. 116\", verschärft die Straßenverkehrsordnung und betrifft alle Wohnmobilreisenden unmittelbar. Es verbietet ausdrücklich, Abfälle aller Art, von Kaugummi bis zu vollen Müllsäcken, aus fahrenden oder parkenden Fahrzeugen zu entsorgen, unabhängig davon, ob der Fahrer oder der Beifahrer dafür verantwortlich ist. Bei nachgewiesener Gefährdung von Umwelt oder Tieren können sogar strafrechtliche Konsequenzen drohen. \n\nBesonders Wohnmobilbenutzer sind betroffen, da sie beim Kochen, Grillen und bei längeren Aufenthalten viel Abfall produzieren. Wer seinen Abfall nicht ordnungsgemäß entsorgt, gefährdet nicht nur die Umwelt, sondern auch seinen Geldbeutel. Die Strafen sind besonders streng in Naturparks, an Flussufern oder in der Nähe des Meeres – alles beliebte Reiseziele für Camper. \n\nItalien setzt zur Überwachung auf Kameras, die entlang von Autobahnen, auf Parkplätzen und in Städten installiert sind und die ein Fahrzeugkennzeichen erfassen können. Ein aufgezeichneter Verstoß kann ausreichen, um einen Bußgeldbescheid auszulösen. Für Camper, die gemietete Fahrzeuge benutzen, kann dies besonders problematisch sein, da die Strafe direkt an den Vermieter geht, oft mit zusätzlichen Bearbeitungsgebühren.\n\nIn Deutschland ist das Wegwerfen von Müll aus dem Fahrzeug ebenfalls verboten, aber es gibt keine einheitliche Regelung und die Strafen variieren je nach Bundesland. Bei illegaler Entsorgung größerer Abfälle können Strafen bis zu 1.000 Euro drohen, insbesondere wenn Naturschutzgesetze verletzt werden. Im Vergleich zu Italien sind die Strafen in Deutschland jedoch weniger streng und werden weniger konsequent durchgesetzt.", + "tags": [ + "Italien", + "Camping", + "Müllentsorgung", + "Straßenverkehrsordnung", + "Umweltschutz" + ], + "status": "Online", + "link": "https://www.promobil.de/weitere-ratgeber/neue-bussgelder-in-italien-falsche-muellentsorgung-aus-dem-wohnmobil-wird-besonders-teuer/", + "images": [], + "source": "https://www.promobil.de/rss/ratgeber", + "source_name": "ratgeber bei www.promobil.de", + "created_at": "2025-08-16T12:49:47.652064", + "word_count": 275, + "rewritten_at": "2025-08-18T10:30:43.148097", + "wp_upload_date": "2025-08-19T09:45:44.761954", + "wp_post_id": 3385 + }, + { + "id": "13aafca64dc26e25ebc74baabef3257f", + "title": "Umfrage zum perfekten Campingtag: Wo verbringen Sie den perfekten Campingurlaub?", + "date": "Sun, 17 Aug 2025 16:00:00 +0200", + "summary": "

    Wie sieht Ihr perfekter Campingtag aus? Lassen Sie uns wissen, was Sie im Urlaub glücklich macht und machen Sie mit bei unserer Umfrage.

    ", + "text": "Beim Campen ist kein Tag wie der andere und für jeden wird er in einer anderen Art und Weise zum perfekten Campingtag: entspannt und gemütlich, sportlich und abenteuerlich, kulturell bereichernd oder minimalistisch. Was gehört für Sie zu einem perfekten Campingtag? An welche Erlebnisse und Begegnungen an einem solchen Tag denken Sie besonders gerne zurück? Schwimmen und paddeln im Wasser oder chillen am Strand? Campingplätze am Wasser sind perfekt, um Erholung und Aktivitäten im Wasser miteinander zu kombinieren. Ob direkt am Meer, an einem idyllischen See oder am Fluss: Die Nähe zum Wasser lädt zu Wassersportaktivitäten einerseits und zur Entspannung andererseits ein. Springen Sie morgens als eine der Ersten ins Wasser oder sind Sie die letzte, die ihr Strandtuch ausbreitet? Genießen Sie den Sonnenuntergang beim Stand-up-paddeln oder setzen Sie am Surfbrett die Segel, sobald der Wind weht? Oder verbringen Sie am liebsten den Tag in der Sonnenliege mit einem guten Buch und einer gelegentlichen Erfrischung im Wasser? Wie sieht Ihr perfekter Tag beim Camping am Meer, See oder Fluss aus? Bergtour, Mountainbikerunde oder Kletterwand? Camping in den Bergen verspricht das Gefühl von Freiheit inmitten unberührter Natur. Zwischen schroffen Gipfeln, blühenden Almwiesen und kristallklaren Bergseen gibt es zahlreiche Möglichkeiten einen Urlaubstag zu gestalten. Suchen Sie im Campingurlaub die sportliche Herausforderung? Oder brechen Sie lieber zu einer entspannten und einfachen Wandertour mit gemütlichem Picknick auf? Suchen Sie die Herausforderung beim Klettern? Wie sieht Ihr perfekter Campingtag in den Bergen aus? Stadtführung, Museumsbesuch oder kulinarische Entdeckungsreise? Wer im Campingurlaub historische Gebäude, Museen, Parks und Plätze in der Stadt entdecken will, findet in vielen europäischen Städten Campingplätze oder Stellplätze am Stadtrand oder mittendrin. Sie sind der perfekte Ausgangspunkt, um lebendige Stadtviertel zu entdecken, auf quirligen Märkten einzukaufen und gute Restaurants zu besuchen. Gehört für Sie zu Ihrem perfekten Campingtag der Besuch einer lebendigen Stadt dazu? Lassen Sie sich in der Stadt einfach treiben oder sind sie lieber mit einem professionellen Gästeführer unterwegs? Fahren Sie mit dem Fahrrad, dem Segway oder öffentlichen Verkehrsmitteln durch die Stadt oder bewältigen Sie die Besichtigung zu Fuß? Schreiben Sie uns! Bei der Umfrage mitmachen und gewinnen! Wie sieht Ihr perfekter Campingtag aus? Führt er Sie ans Wasser, in die Berge oder in sehenswerte Städte? Oder an einen ganz anderen Ort? Was darf an einem perfekten Campingtag auf keinen Fall fehlen? Skizzieren Sie in ein paar Sätzen, was für Sie einen Campingtag perfekt macht! Senden Sie uns Ihre Meinung bis zum 25. August 2025 per E-Mail an thema-des-monats@promobil.de . Unter allen Einsendungen verlosen wir eines unserer aktuellen promobil-Sonderhefte nach Wunsch und Verfügbarkeit. Bitte fügen Sie Ihrer Einsendung möglichst ein Porträtfoto von sich bei, das wir zusammen mit Ihrem Meinungsbeitrag in promobil veröffentlichen dürfen; Ihre Chance auf Veröffentlichung erhöht sich dadurch. Datenschutzhinweis: Wenn Sie uns eine Anfrage stellen oder ein Feedback geben, speichern wir Ihre Kontaktdaten und Ihren Text (Art. 6 Abs. 1 lit. f DSGVO). Ihre Zuschrift hilft uns, unser Informationsangebot in unseren Medien zu verbessern. Wir geben Ihre Daten nicht an Dritte weiter. Wir behalten uns vor, Ihre Zuschrift zusammen mit Ihrem Namen in unseren Zeitschriften promobil und CARAVANING und gegebenenfalls auch auf unserer Website www.promobil.de, sowie unseren Social-Media-Kanälen zu veröffentlichen. Sie können der Speicherung Ihrer Daten jederzeit mit Wirkung für die Zukunft widersprechen (datenschutz@motorpresse.de). Wir werden dann die gespeicherten Daten umgehend löschen. Im Übrigen löschen wir Ihre Daten spätestens nach Ablauf eines halben Jahres bzw. im Falle einer Veröffentlichung im Internet, wenn wir der Ansicht sind, dass die Frage nicht mehr interessant für unsere NutzerInnen ist. Mehr zum Datenschutz unter www.promobil.de/datenschutz .", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/ihr-perfekter-campingtag-mitmachen-und-gewinnen/", + "images": [], + "source": "https://www.promobil.de/rss/ratgeber", + "source_name": "ratgeber bei www.promobil.de", + "created_at": "2025-08-18T10:29:00.444125", + "word_count": 583 + }, + { + "id": "98c55ac19e688c7f19e8eba46ea29fe2", + "title": "Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper", + "date": "Mon, 18 Aug 2025 13:02:00 +0200", + "summary": "

    FlexiCamper versprach Wohnmobile, kassierte Millionen – und lieferte nicht. Jetzt fällt das Gericht ein deutliches Urteil.

    ", + "text": "Im spektakulären Betrugsfall der deutschen Campingbranche \"FlexiCamper\" fiel vergangene Woche ein Urteil vor der zehnten großen Strafkammer des Landgerichts München II. Die beiden Hauptverantwortlichen, eine 36-jährige Geschäftsführerin und ein 63-jähriger faktischer Geschäftsführer, wurden wegen eines Schadens von insgesamt vier Millionen Euro, 54 betrogenen Wohnmobilkäufern und fünf getäuschten Banken zu mehrjährigen Haftstrafen verurteilt. Das Unternehmen war bereits Ende 2022 zahlungsunfähig, stellte jedoch erst im Mai 2023 einen Insolvenzantrag.\n\nDie beiden Angeklagten überzeugten mit manipulierten Bilanzen und Dokumenten fünf Banken von der Stabilität ihres Unternehmens, was zu einem Schaden von 1,6 Millionen Euro führte. Darüber hinaus verkauften sie Wohnmobile, obwohl sie nicht mehr in der Lage waren, die Verkaufsprozesse abzuwickeln, wodurch Kunden einen Schaden von insgesamt 2 Millionen Euro erlitten. Drei Leasingunternehmen wurden um 110.000 Euro betrogen und zusätzliche 500.000 Euro wurden von dem 63-jährigen Angeklagten zweckentfremdet.\n\nDie Strafkammer fand keine Hinweise auf ein absichtliches Veruntreuen der Gelder, sondern sprach von einem \"geschäftlichen Totalschaden\" aufgrund eines unrentablen Geschäftsmodells und chaotischer Buchhaltung. Trotz eines Jahresumsatzes von rund sechs Millionen Euro erlitt das Unternehmen einen Verlust von drei Millionen Euro.\n\nBeide Angeklagten wurden zu Haftstrafen verurteilt - vier Jahre für den 63-jährigen und drei Jahre für die 36-jährige - nach umfassenden Geständnissen und Beweisen ihrer Kooperation und Reue. Das Gericht stellte fest, dass die Ursachen der Vergehen weniger im gezielten Betrug lagen, sondern vielmehr in unternehmerischer Inkompetenz und einem nicht tragfähigen Geschäftsmodell.\n\nDer Fall FlexiCamper ist kein Einzelfall und unterstreicht die Bedeutung von Vorsicht und gesundem Menschenverstand beim Kauf eines Wohnmobils. Kunden, die hohe Summen im Voraus zahlen, ohne eine gesicherte Lieferzusage, riskieren viel. Vorkasse, Lieferverzögerung und Insolvenz sind gängige Muster in der Branche, die oft durch schlechtes Wirtschaften und fehlende externe Sicherheiten instabil wird und somit anfällig für Missbrauch und finanzielle Manipulationen ist.", + "tags": [ + "Betrugsfall", + "Campingbranche", + "FlexiCamper", + "Insolvenz", + "Wirtschaftskriminalität" + ], + "status": "Online", + "link": "https://www.promobil.de/weitere-ratgeber/flexicamper-skandal-harte-urteile-nach-millionenbetrug-im-wohnmobilhandel/", + "images": [], + "source": "https://www.promobil.de/rss/ratgeber", + "source_name": "ratgeber bei www.promobil.de", + "created_at": "2025-08-19T08:48:02.789703", + "word_count": 290, + "rewritten_at": "2025-08-19T08:56:18.555837", + "wp_upload_date": "2025-08-19T09:45:59.508091", + "wp_post_id": 3386 + }, + { + "id": "1209fbff9e284ff355e9d3c46e324528", + "title": "POL-D: Langenfeld - A3 Richtung Arnheim - Anschlussstelle Solingen - Motorradalleinunfall mit Sozia - Fahrer schwer und Sozia leicht verletzt", + "date": "Sat, 16 Aug 2025 13:27:18 +0200", + "summary": "Düsseldorf (ots) - Donnerstag, 14. August 2025, 22:59 Uhr Ein 18-jähriger Düsseldorfer verlor bei Langenfeld im Anschlussstellenbereich Solingen auf der A3 in Richtung Arnheim aus bislang unbekannter Ursache am Donnerstagabend die Kontrolle über ...", + "text": "Polizei Düsseldorf [ Newsroom ] Düsseldorf (ots) - Donnerstag, 14. August 2025, 22:59 Uhr Ein 18-jähriger Düsseldorfer verlor bei Langenfeld im Anschlussstellenbereich Solingen auf der A3 in Richtung Arnheim aus bislang unbekannter Ursache am Donnerstagabend die Kontrolle über ... Lesen Sie hier weiter... Original-Content von: Polizei Düsseldorf, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/13248/6098000", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:45.096514", + "word_count": 51 + }, + { + "id": "f5cd79dd49f2ab2039280604a9d332b0", + "title": "POL-ME: Die Polizei lädt zum Gespräch am \"STREIFENwagen\"", + "date": "Wed, 13 Aug 2025 08:10:00 +0200", + "summary": "Langenfeld (ots) - Er tourt schon seit einiger Zeit durchs Kreisgebiet und ist ein echter Hingucker: Der \"STREIFENwagen\" der Kreispolizeibehörde Mettmann. Mit dem auffälligen Fahrzeug sind die Polizistinnen und Polizisten des Bezirks- und ...", + "text": "Polizei Mettmann [ Newsroom ] Langenfeld (ots) - Er tourt schon seit einiger Zeit durchs Kreisgebiet und ist ein echter Hingucker: Der \"STREIFENwagen\" der Kreispolizeibehörde Mettmann. Mit dem auffälligen Fahrzeug sind die Polizistinnen und Polizisten des Bezirks- und ... Lesen Sie hier weiter... Original-Content von: Polizei Mettmann, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/43777/6095749", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:45.377100", + "word_count": 51 + }, + { + "id": "538a150468cdf061026a6157e64a27c8", + "title": "POL-ME: Tragischer Verkehrsunfall - Zwei Insassen verstorben - 2508041", + "date": "Sun, 10 Aug 2025 11:13:26 +0200", + "summary": "Monheim am Rhein (ots) - Am späten Samstagabend, 9. August 2025, ist es auf einer außerörtlichen Kreisstraße in Monheim am Rhein zu einem tragischen Unfall gekommen in dessen Folge eine 17-jährige Langenfelderin sowie ein 15-Jähriger aus ...", + "text": "Polizei Mettmann [ Newsroom ] Monheim am Rhein (ots) - Am späten Samstagabend, 9. August 2025, ist es auf einer außerörtlichen Kreisstraße in Monheim am Rhein zu einem tragischen Unfall gekommen in dessen Folge eine 17-jährige Langenfelderin sowie ein 15-Jähriger aus ... Lesen Sie hier weiter... Original-Content von: Polizei Mettmann, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/43777/6093692", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:45.632600", + "word_count": 54 + }, + { + "id": "d2399f6291831120ae5da83959e4e2c0", + "title": "POL-ME: Gabelstapler in Brand gesetzt: Polizei bittet um Hinweise - 2508033", + "date": "Fri, 08 Aug 2025 09:35:06 +0200", + "summary": "Langenfeld (ots) - In der Nacht auf Freitag, 8. August 2025, kam es in Langenfeld zu einer Brandstiftung, bei der ein Gabelstapler schwer beschädigt wurde. Die Polizei ermittelt und bittet um Hinweise. Das war nach dem aktuellen Stand der ...", + "text": "Polizei Mettmann [ Newsroom ] Langenfeld (ots) - In der Nacht auf Freitag, 8. August 2025, kam es in Langenfeld zu einer Brandstiftung, bei der ein Gabelstapler schwer beschädigt wurde. Die Polizei ermittelt und bittet um Hinweise. Das war nach dem aktuellen Stand der ... Lesen Sie hier weiter... Original-Content von: Polizei Mettmann, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/43777/6092772", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:45.915950", + "word_count": 57 + }, + { + "id": "42f3d416c11efcda4f04a79e11812b53", + "title": "POL-ME: Porsche 911 Carrera entwendet: Polizei bittet um Hinweise - 2508025", + "date": "Wed, 06 Aug 2025 08:36:57 +0200", + "summary": "Langenfeld (ots) - In der Nacht auf Dienstag, 5. August 2025, wurde in Langenfeld-Richrath ein Sportwagen von Porsche gestohlen. Die Polizei ermittelt und bittet um Hinweise. Das war nach aktuellen Erkenntnissen passiert: Am Montagabend stellte eine ...", + "text": "Polizei Mettmann [ Newsroom ] Langenfeld (ots) - In der Nacht auf Dienstag, 5. August 2025, wurde in Langenfeld-Richrath ein Sportwagen von Porsche gestohlen. Die Polizei ermittelt und bittet um Hinweise. Das war nach aktuellen Erkenntnissen passiert: Am Montagabend stellte eine ... Lesen Sie hier weiter... Original-Content von: Polizei Mettmann, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/43777/6091203", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:46.171556", + "word_count": 54 + }, + { + "id": "d2171eacae49b378fe97193f1c5d5e33", + "title": "POL-ME: Verkehrsunfallfluchten aus dem Kreisgebiet - 2508021", + "date": "Tue, 05 Aug 2025 14:49:57 +0200", + "summary": "Langenfeld (ots) - In den vergangenen Tagen registrierte die Polizei im Kreis Mettmann folgende Verkehrsunfallfluchten: - Eine Verkehrsunfallflucht ist kein Kavaliersdelikt, sondern eine Straftat! - Melden Sie Verkehrsunfallfluchten unverzüglich ...", + "text": "05.08.2025 – 14:49 Polizei Mettmann POL-ME: Verkehrsunfallfluchten aus dem Kreisgebiet - 2508021 Bild-Infos Download Langenfeld (ots) In den vergangenen Tagen registrierte die Polizei im Kreis Mettmann folgende Verkehrsunfallfluchten: --- Langenfeld --- Am Freitagnachmittag, 1. August 2025, kam es auf der Straße Weißenstein in Langenfeld-Berghausen zu einer Verkehrsunfallflucht. Gegen 15:30 Uhr verließ eine 60-Jährige das Grundstück eines Wohnhauses mit der Hausnummer 12 und betrat den asphaltierten Bereich, der parallel zur Fahrbahn liegt. Nach eigenen Angaben wurden sie unmittelbar von dem Fahrradlenker einer vorbeifahrenden Radfahrerin erfasst und fiel zu Boden. Ohne sich um die bei dem Sturz leicht verletzte Fußgängerin zu kümmern, entfernte sich die circa 40 bis 45 Jahre alte Radfahrerin, die schulterlange braune Haare zu einem Zopf gebunden trug und ein westeuropäisches Erscheinungsbild hatte, in unbekannte Richtung. Hinweise nimmt die Polizei in Langenfeld, Telefon 02173 288-6310, jederzeit entgegen. --- Hinweise und Tipps der Polizei --- - Eine Verkehrsunfallflucht ist kein Kavaliersdelikt, sondern eine Straftat! - Melden Sie Verkehrsunfallfluchten unverzüglich bei der nächsten Polizeidienststelle (auch über Notruf 110). - Belassen Sie das Fahrzeug wenn möglich unverändert am Unfallort. - Vermeiden Sie die Beseitigung oder Veränderung von Unfallspuren. Selbst kleinste Lacksplitter, Glasreste, etc. können für die polizeilichen Ermittlungen von Bedeutung sein. Fertigen Sie wenn möglich eigene Fotos von der Unfallsituation und vorgefundenen Spuren, wenn Veränderungen eintreten könnten oder unvermeidlich sind. Fragen bitte an: Kreispolizeibehörde Mettmann Polizeipressestelle Adalbert-Bach-Platz 1 40822 Mettmann Telefon: 02104 982-1010 Telefax: 02104 982-1028 E-Mail: pressestelle.mettmann@polizei.nrw.de Homepage: https://mettmann.polizei.nrw/ Facebook: http://www.facebook.com/Polizei.NRW.ME Instagram: https://www.instagram.com/polizei.nrw.me/?hl=de X: https://twitter.com/polizei_nrw_me WhatsApp-Kanal: https://www.whatsapp.com/channel/0029VaAl7vKEgGfNSUkFwp3g Wir haben jetzt auch einen eigenen WhatsApp-Kanal! Hier informieren wir über wichtige und interessante Polizeimeldungen: https://www.whatsapp.com/channel/0029VaAl7vKEgGfNSUkFwp3g Original-Content von: Polizei Mettmann, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/43777/6090985", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:46.700739", + "word_count": 270 + }, + { + "id": "e4ef744c22effe3467c7e9958aabf440", + "title": "POL-ME: Einbrüche aus dem Kreisgebiet - 2508020", + "date": "Tue, 05 Aug 2025 14:04:43 +0200", + "summary": "Kreis Mettmann (ots) - In den vergangenen Tagen registrierte die Polizei folgende Einbrüche im Kreis Mettmann: In der Nacht auf Dienstag, 5. August 2025, sind noch unbekannte Täterinnen oder Täter zwischen 0:20 und 0:30 Uhr in ein ...", + "text": "Polizei Mettmann [ Newsroom ] Kreis Mettmann (ots) - In den vergangenen Tagen registrierte die Polizei folgende Einbrüche im Kreis Mettmann: In der Nacht auf Dienstag, 5. August 2025, sind noch unbekannte Täterinnen oder Täter zwischen 0:20 und 0:30 Uhr in ein ... Lesen Sie hier weiter... Original-Content von: Polizei Mettmann, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/43777/6090932", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:46.983083", + "word_count": 55 + }, + { + "id": "7b3f32ca27ff818d14af07cba980c9dc", + "title": "POL-ME: Harley-Davidson gestohlen: Polizei bittet um Hinweise - 2508017", + "date": "Tue, 05 Aug 2025 10:07:05 +0200", + "summary": "Langenfeld (ots) - In der Nacht auf Montag, 4. August 2025, wurde eine Harley-Davidson Street Glide Special aus einer Garage in Langenfeld entwendet. Die Polizei ermittelt und bittet um Hinweise. Das war nach aktuellen Erkenntnissen passiert: Am ...", + "text": "Polizei Mettmann [ Newsroom ] Langenfeld (ots) - In der Nacht auf Montag, 4. August 2025, wurde eine Harley-Davidson Street Glide Special aus einer Garage in Langenfeld entwendet. Die Polizei ermittelt und bittet um Hinweise. Das war nach aktuellen Erkenntnissen passiert: Am ... Lesen Sie hier weiter... Original-Content von: Polizei Mettmann, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/43777/6090567", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:47.280393", + "word_count": 55 + }, + { + "id": "ad5f32907694ce0bfa8843bea71f1cae", + "title": "POL-ME: Einbrüche aus dem Kreisgebiet - 2508012", + "date": "Mon, 04 Aug 2025 13:43:34 +0200", + "summary": "Kreis Mettmann (ots) - In den vergangenen Tagen registrierte die Polizei folgende Einbrüche im Kreis Mettmann: In der Zeit von Mittwoch, 30. Juli 2025, gegen 10 Uhr, bis Freitag, 1. August 2025, gegen 11:20 Uhr, sind noch unbekannte Täterinnen ...", + "text": "Polizei Mettmann [ Newsroom ] Kreis Mettmann (ots) - In den vergangenen Tagen registrierte die Polizei folgende Einbrüche im Kreis Mettmann: In der Zeit von Mittwoch, 30. Juli 2025, gegen 10 Uhr, bis Freitag, 1. August 2025, gegen 11:20 Uhr, sind noch unbekannte Täterinnen ... Lesen Sie hier weiter... Original-Content von: Polizei Mettmann, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/43777/6090066", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:47.558722", + "word_count": 57 + }, + { + "id": "88fefbec576ccd3d82ecf3da84e0c6e5", + "title": "POL-D: Meldung der Autobahnpolizei - A 3 - Verkehrsunfall bei Langenfeld - Pkw überschlägt sich in Baustelle - Eine lebensgefährlich verletzte Person", + "date": "Sun, 03 Aug 2025 12:02:43 +0200", + "summary": "Düsseldorf (ots) - Unfallzeit: Samstag, 02. August 2025, 06:30 Uhr Bei einem schweren Verkehrsunfall gestern Morgen auf der A 3 bei Langenfeld wurde ein Mann lebensgefährlich verletzt. Eine Frau erlitt schwere, zwei weitere leichte Verletzungen. ...", + "text": "Polizei Düsseldorf [ Newsroom ] Düsseldorf (ots) - Unfallzeit: Samstag, 02. August 2025, 06:30 Uhr Bei einem schweren Verkehrsunfall gestern Morgen auf der A 3 bei Langenfeld wurde ein Mann lebensgefährlich verletzt. Eine Frau erlitt schwere, zwei weitere leichte Verletzungen. ... Lesen Sie hier weiter... Original-Content von: Polizei Düsseldorf, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/13248/6089342", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:47.830886", + "word_count": 53 + }, + { + "id": "2ed8ff63dc8b92439e833a1a8c5dd3c7", + "title": "POL-ME: Einbrüche aus dem Kreisgebiet - 2508002", + "date": "Fri, 01 Aug 2025 09:43:47 +0200", + "summary": "Langenfeld (ots) - In den vergangenen Tagen registrierte die Polizei folgende Einbrüche im Kreis Mettmann: In der Nacht auf Freitag, 1. August 2025, sind noch unbekannte Täterinnen oder Täter gegen 1:10 Uhr in eine Firma in der Nähe der ...", + "text": "Polizei Mettmann [ Newsroom ] Langenfeld (ots) - In den vergangenen Tagen registrierte die Polizei folgende Einbrüche im Kreis Mettmann: In der Nacht auf Freitag, 1. August 2025, sind noch unbekannte Täterinnen oder Täter gegen 1:10 Uhr in eine Firma in der Nähe der ... Lesen Sie hier weiter... Original-Content von: Polizei Mettmann, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/43777/6088459", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:48.124026", + "word_count": 57 + }, + { + "id": "8862dbc39cc2c8ba6927559701ee0bf9", + "title": "POL-ME: Einbrüche aus dem Kreisgebiet - 2507143", + "date": "Thu, 31 Jul 2025 08:19:41 +0200", + "summary": "Langenfeld (ots) - In den vergangenen Tagen registrierte die Polizei folgenden Einbruch im Kreis Mettmann: In der Zeit von Montag, 28. Juli 2025, gegen 11 Uhr, bis Mittwoch, 30. Juli 2025, gegen 18:15 Uhr, sind noch unbekannte Täterinnen oder ...", + "text": "Polizei Mettmann [ Newsroom ] Langenfeld (ots) - In den vergangenen Tagen registrierte die Polizei folgenden Einbruch im Kreis Mettmann: In der Zeit von Montag, 28. Juli 2025, gegen 11 Uhr, bis Mittwoch, 30. Juli 2025, gegen 18:15 Uhr, sind noch unbekannte Täterinnen oder ... Lesen Sie hier weiter... Original-Content von: Polizei Mettmann, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/43777/6087627", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:48.446398", + "word_count": 57 + }, + { + "id": "ae2e6445342bab198b4aba85f4bb04d8", + "title": "POL-ME: Autos aufgebrochen: Reihenweise Scheiben eingeschlagen - 2507133", + "date": "Mon, 28 Jul 2025 15:25:04 +0200", + "summary": "Langenfeld (ots) - In den vergangenen Tagen kam es in Langenfeld an mehreren Orten zu Autoaufbrüchen. Die unbekannten Täterinnen oder Täter verwendeten dabei stets dieselbe Methode, in dem sie die Seitenscheiben der Autos einschlugen. Die Serie ...", + "text": "Polizei Mettmann [ Newsroom ] Langenfeld (ots) - In den vergangenen Tagen kam es in Langenfeld an mehreren Orten zu Autoaufbrüchen. Die unbekannten Täterinnen oder Täter verwendeten dabei stets dieselbe Methode, in dem sie die Seitenscheiben der Autos einschlugen. Die Serie ... Lesen Sie hier weiter... Original-Content von: Polizei Mettmann, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/43777/6085822", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:48.712189", + "word_count": 54 + }, + { + "id": "aa49f4fadcbdf9bdee659692f428c939", + "title": "POL-ME: Polizei zieht verkehrsunsicheren Transporter aus dem Verkehr - 2507132", + "date": "Mon, 28 Jul 2025 14:58:33 +0200", + "summary": "Langenfeld (ots) - Die Polizei hat am Freitagabend, 25. Juli 2025, in Langenfeld einen verkehrsunsicheren Transporter aus dem Verkehr gezogen. Das Fahrzeug wurde stillgelegt. Das war nach aktuellen Erkenntnissen passiert: Gegen 18 Uhr überprüften ...", + "text": "Polizei Mettmann [ Newsroom ] Langenfeld (ots) - Die Polizei hat am Freitagabend, 25. Juli 2025, in Langenfeld einen verkehrsunsicheren Transporter aus dem Verkehr gezogen. Das Fahrzeug wurde stillgelegt. Das war nach aktuellen Erkenntnissen passiert: Gegen 18 Uhr überprüften ... Lesen Sie hier weiter... Original-Content von: Polizei Mettmann, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/43777/6085785", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:48.999056", + "word_count": 52 + }, + { + "id": "3e546ee523fbf6e5c54e33346e46e883", + "title": "POL-ME: Bonn-Auerberg: Festnahme eines aus dem Maßregelvollzug entwichenen Strafgefangenen - 2507134", + "date": "Mon, 28 Jul 2025 14:56:42 +0200", + "summary": "Bonn / Langenfeld (ots) - Aus aktuellem Anlass und wegen der örtlichen Bezüge nach Langenfeld im Kreis Mettmann teilt die Kreispolizeibehörde Mettmann nachfolgende Pressemeldung des Polizeipräsidiums Bonn: \"Am Freitag (25.07.2025), gegen 15:00 ...", + "text": "Polizei Mettmann [ Newsroom ] Bonn / Langenfeld (ots) - Aus aktuellem Anlass und wegen der örtlichen Bezüge nach Langenfeld im Kreis Mettmann teilt die Kreispolizeibehörde Mettmann nachfolgende Pressemeldung des Polizeipräsidiums Bonn: \"Am Freitag (25.07.2025), gegen 15:00 ... Lesen Sie hier weiter... Original-Content von: Polizei Mettmann, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/blaulicht/pm/43777/6085781", + "images": [], + "source": "https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2", + "source_name": "Presseportal.de - Langenfeld (Rheinland)", + "created_at": "2025-08-19T10:05:49.289160", + "word_count": 50 + }, + { + "id": "bc68d305a762c8b808a88d8c39921c3e", + "title": "Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern", + "date": "Mon, 18 Aug 2025 13:26:55 +0200", + "summary": "Herbertz GmbH: Solingen (ots) - Stechmücken vermiesen im Sommer oft den Abend im Garten oder am See. Ein leichtes, geräuschloses Gerät soll jetzt für entspannte Stunden im Freien sorgen. Wenn die Temperaturen steigen, werden nicht nur Menschen aktiver - auch ...", + "text": "Die Herbertz GmbH aus Solingen hat ein neues, leichtes und geräuschloses Gerät entwickelt, das im Sommer ungestörte Abende im Freien ermöglicht. Dieses soll die Belästigung durch Stechmücken, die bei steigenden Temperaturen zunehmend aktiv werden, minimieren. Die Informationen wurden von Herbertz GmbH bereitgestellt und durch News Aktuell übermittelt.", + "tags": [ + "Herbertz GmbH", + "Stechmückenabwehr", + "Sommerabende", + "Geräuschloses Gerät", + "News Aktuell" + ], + "status": "Online", + "link": "https://www.presseportal.de/pm/180570/6098987", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach camping", + "created_at": "2025-08-19T10:05:50.797639", + "word_count": 47, + "rewritten_at": "2025-08-19T10:32:05.202525", + "wp_upload_date": "2025-08-19T10:32:52.141101", + "wp_post_id": 3396 + }, + { + "id": "7b551a09157f0272fc9bdbbd0cdb163c", + "title": "Neue Folge \"Bella Italia - Camping auf Deutsch\": von Italien in die USA", + "date": "Mon, 18 Aug 2025 10:00:00 +0200", + "summary": "RTLZWEI: München (ots) - - Die Fingerhuth-Clique auf einem typisch amerikanischen BBQ-Festival - Sascha Bohner auf Abwegen in den USA - Neue Folge \"Bella Italia - Camping auf Deutsch\" am 18. August 2025, immer montags um 20:15 Uhr bei RTLZWEI und sieben ...", + "text": "RTLZWEI [ Newsroom ] München (ots) - - Die Fingerhuth-Clique auf einem typisch amerikanischen BBQ-Festival - Sascha Bohner auf Abwegen in den USA - Neue Folge \"Bella Italia - Camping auf Deutsch\" am 18. August 2025, immer montags um 20:15 Uhr bei RTLZWEI und sieben ... Lesen Sie hier weiter... Original-Content von: RTLZWEI, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/6605/6098566", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach camping", + "created_at": "2025-08-19T10:05:51.071877", + "word_count": 57 + }, + { + "id": "ca7909c054c03ff01ad26821e5e77fbb", + "title": "IFA 2025: Jackery präsentiert neue 500-Watt-Powerstation im flachen Format, Solardachziegel und DIY-Balkonkraftwerk mit integriertem Brandschutzsystem", + "date": "Mon, 18 Aug 2025 09:01:13 +0200", + "summary": "Jackery Inc.: Düsseldorf, Deutschland (ots/PRNewswire) - Als Pionier tragbarer, nachhaltiger Energielösungen präsentiert Jackery auf der IFA 2025 in Halle 2.2, Stand 119, seine neuesten Produktgenerationen für unterwegs und zu Hause. So feiert etwa die ...", + "text": "Jackery Inc. [ Newsroom ] Düsseldorf, Deutschland (ots/PRNewswire) - Als Pionier tragbarer, nachhaltiger Energielösungen präsentiert Jackery auf der IFA 2025 in Halle 2.2, Stand 119, seine neuesten Produktgenerationen für unterwegs und zu Hause. So feiert etwa die ... Lesen Sie hier weiter... Original-Content von: Jackery Inc., übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/161806/6098495", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach camping", + "created_at": "2025-08-19T10:05:51.372728", + "word_count": 50 + }, + { + "id": "3b7e4b9526096a931c555a5a972a3029", + "title": "Inklusiver Campingurlaub am Gardasee", + "date": "Mon, 11 Aug 2025 13:03:35 +0200", + "summary": "Lago di Garda Camping: MEDIENINFORMATION Inklusiver Campingurlaub am Gardasee Naturnaher Urlaub, der keine Unterschiede macht. In den Campingdörfern von Lago di Garda Camping steht das Wohl aller Gäste im Mittelpunkt. München, 11. August 2025 – Auf den ...", + "text": "11.08.2025 – 13:03 Lago di Garda Camping Inklusiver Campingurlaub am Gardasee Bild-Infos Download 9 weitere Medieninhalte Ein Dokument 20250811_Inklusiver Urlaub.pdf PDF - 186 kB MEDIENINFORMATION Inklusiver Campingurlaub am Gardasee Naturnaher Urlaub, der keine Unterschiede macht. In den Campingdörfern von Lago di Garda Camping steht das Wohl aller Gäste im Mittelpunkt. München, 11. August 2025 – Auf den Campingplätzen von Lago di Garda Camping wird Gastfreundschaft neu gedacht – inklusiv, achtsam und mit Blick auf die individuellen Bedürfnisse jedes Gastes. Ob große oder kleine Gäste, Menschen mit körperlichen oder mentalen Beeinträchtigungen oder vierbeinige Familienmitglieder: Die Campingplätze rund um den Gardasee schaffen Orte, an denen Urlaub in der Natur für alle erlebbar ist, frei von Einschränkungen und voller Möglichkeiten. Camping Bergamini in Peschiera del Garda und das Camping Village San Francesco in Desenzano haben sich dem Qualitätsnetzwerk „Village for All“ angeschlossen, einer Initiative, die sich auf barrierefreie Gastfreundschaft spezialisiert hat. Ziel ist es, touristische Einrichtungen so zu gestalten, dass sie für möglichst viele Menschen, unabhängig von körperlichen, sensorischen oder kognitiven Einschränkungen, zugänglich und nutzbar sind. „Ein barrierefreier Urlaub bedeutet, frei wählen zu können, ohne sich erklären, anpassen oder verzichten zu müssen. Dafür müssen Informationen transparent und für alle zugänglich sein“ , so Elena Oppizzi, General Manager von Lago di Garda Camping. Einfacher Zugang – online und vor Ort Viele Campingplätze von Lago di Garda Camping bieten inzwischen barrierefreie Webseiten mit klarer Struktur, gut lesbaren Farbkontrasten und Sprachassistenten. So lässt sich der Urlaub auch mit Seh- oder Leseschwierigkeiten einfach und selbstständig planen. Vor Ort wird das barrierefreie Angebot stetig erweitert. Fußwege wurden neu angelegt und Mobilheime mit Rampen sowie Hebevorrichtungen an Pools erleichtern deren Nutzung. So bieten zum Beispiel Camping IdeaLazise und Camping Du Parc speziell ausgestattete Wohneinheiten für Menschen mit Behinderung an. Zur besseren Orientierung gibt es taktile Leitsysteme, fühlbare Karten und Infotafeln mit NFC-Technologie, die per Smartphone zusätzliche Hinweise geben. Auch in den Restaurants wird auf unterschiedliche Bedürfnisse geachtet: Speisekarten in Blindenschrift, Piktogramme sowie optimierte Menüangebote ermöglichen allen Gästen ihre Wahl zu treffen. Gastfreundschaft auf Augenhöhe Bei Lago di Garda Camping wird Inklusion nicht nur in der Architektur, sondern auch in der Begegnung aktiv gelebt. So wurden klassische Rezeptionstheken durch barrierefreie Begegnungstische ersetzt, die einen Empfang auf Augenhöhe ermöglichen. In einigen Anlagen sorgen akustische Verstärkungssysteme für bessere Verständlichkeit und reduzieren störende Hintergrundgeräusche. Auch an die jüngsten Gäste wurde gedacht: es wurden barrierefreie Spielgeräte aus Holz aufgestellt, teilweise in der Nähe der Rezeption, um die Wartezeit für die Kinder zu verkürzen. Für vierbeinige Familienmitglieder gibt es ausgewiesene Hundebereiche und speziell entwickelte Services. Die Campingplätze Fornella und Europa Silvella haben sogar einen Teil ihrer Strände für Hunde reserviert. Was all diese Maßnahmen verbindet, ist ein Anspruch, der über Standards hinausgeht, und die Überzeugung, dass echter Urlaub dort beginnt, wo sich jeder gesehen, verstanden und willkommen fühlt. Über Lago di Garda Camping: Mit rund 370 Quadratkilometern Fläche und 52 Kilometern Länge ist der Gardasee der größte See Italiens. Mediterrane Leichtigkeit und gelassenes Dolce Vita haben ihn seit den 1950-er Jahren zu einem der beliebtesten Reiseziele deutscher Urlauber gemacht. Bis heute ist die Region rund um den Gardasee ideal für alle, die einen naturnahen Urlaub dem klassischen Hotel oder einer Pension vorziehen. Die 17 Campingplätze und Feriendörfer von Lago di Garda Camping , die zwischen San Felice del Benaco am Südwestufer des Gardasees in der Region Lombardei und dem Ort Garda am Ostufer des Sees und Westrand der Provinz Verona liegen, verstehen sich als Gastgeber und Botschafter der Region Gardasee. Lago di Garda Camping c/o Global Communication Experts GmbH Claudia Dressler | Ida Heldt T. +49 89 – 2153793 -82 | -84 Mail: presse.lagodigardacamping@gce-agency.com Osterwaldstr. 10 /G19 80805 München, Deutschland Geschäftsführer: Dorothea Hohn, Ralf Engelhardt Firmensitz: Frankfurt Handelsregister Frankfurt, HRB 76467", + "tags": [], + "status": "Online", + "link": "https://www.presseportal.de/pm/153661/6094377", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach camping", + "created_at": "2025-08-19T10:05:51.937018", + "word_count": 616, + "wp_upload_date": "2025-08-19T10:39:48.206661", + "wp_post_id": 3408 + }, + { + "id": "9dc76c4cd7fc40e529781fc4e74dd154", + "title": "Neuheiten-Feuerwerk bei vanexxt auf dem Caravan Salon Düsseldorf 2025", + "date": "Mon, 11 Aug 2025 07:28:28 +0200", + "summary": "vanexxt Gmbh: Düsseldorf (ots) - Vom Prototyp zur Serienreife - der Caravelle wird zum Camper Nach der Vorstellung als Konzeptfahrzeug im Januar zeigt vanexxt den neuen VW Caravelle nun erstmals als Serienfahrzeug. Außerdem lassen sich auf dem Caravan Salon in ...", + "text": "vanexxt Gmbh [ Newsroom ] Düsseldorf (ots) - Vom Prototyp zur Serienreife - der Caravelle wird zum Camper Nach der Vorstellung als Konzeptfahrzeug im Januar zeigt vanexxt den neuen VW Caravelle nun erstmals als Serienfahrzeug. Außerdem lassen sich auf dem Caravan Salon in ... Lesen Sie hier weiter... Original-Content von: vanexxt Gmbh, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/172978/6093880", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach camping", + "created_at": "2025-08-19T10:05:52.227933", + "word_count": 56 + }, + { + "id": "58a6e48424e6c016eada7ad99ad6c925", + "title": "Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf", + "date": "Wed, 06 Aug 2025 11:00:22 +0200", + "summary": "Vango: Liebe Camping-Expertinnen und Experten, Camping ist mehr als ein Trend – es ist ein Lebensgefühl. Vango, die traditionsreiche Outdoor-Marke aus Schottland, gibt auf dem Caravan Salon Düsseldorf 2025 einen Ausblick auf ihr bevorstehendes ...", + "text": "06.08.2025 – 11:00 Vango Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf Bild-Infos Download Ein Dokument VANGO Pressemitteilu~Düsseldorf 2025.pdf PDF - 434 kB Hier geht es zur Webseite von Vango Liebe Camping-Expertinnen und Experten, Camping ist mehr als ein Trend – es ist ein Lebensgefühl. Vango , die traditionsreiche Outdoor-Marke aus Schottland, gibt auf dem Caravan Salon Düsseldorf 2025 einen Ausblick auf ihr bevorstehendes 60-jähriges Jubiläum im kommenden Jahr und feiert das Draußen-Sein mit einer ganzen Reihe an Produktneuheiten. Wir laden Sie herzlich ein zur Pressekonferenz am Samstag, 30.08., um 15:05 Uhr in Halle 3, Stand C 54. Colin Maclean, Vango International Sales Manager, präsentiert Vango-Neuheiten und gibt einen Ausblick auf 2026. Wir laden Sie herzlich ein, auch gerne zu einem Einzeltermin am Vango-Stand vorbeizuschauen. Am Stand stehen Ihnen Miguel Ferreira, Trek Touren, Vertrieb Vango Deutschland, und Colin Maclean, Vango International Sales Manager, für Gespräche zur Verfügung. Wir freuen uns auf ein Treffen. Viele Grüße Johannes Wessel / Joachim Stark OUTDOOR SPORTS PR Steigenbergerstr. 19 82377 Penzberg T +49 (0) 8856 86 85 318 M Johannes Wessel: +49 (0)1590 5398581 / Jo Stark: +49 (0)176 - 21 61 89 53", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/170000/6091414", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach camping", + "created_at": "2025-08-19T10:05:53.032900", + "word_count": 191 + }, + { + "id": "16253c613e6e422e43775a88fadecae7", + "title": "50 Jahre ADAC Tourset: Vom Kartenstapel zum digitalen Reisebegleiter / Erfolgreicher Reisebegleiter / 657.000 Toursets in 2024 bestellt", + "date": "Wed, 30 Jul 2025 13:09:10 +0200", + "summary": "ADAC: München (ots) - Das ADAC Tourset wird 50 Jahre alt - und bleibt ein beliebter Klassiker. Was 1975 als ADAC Tourenpaket begann, ist heute eine moderne Schnittstelle zwischen analoger und digitaler Reiseplanung. Es bietet individuell ...", + "text": "ADAC [ Newsroom ] München (ots) - Das ADAC Tourset wird 50 Jahre alt - und bleibt ein beliebter Klassiker. Was 1975 als ADAC Tourenpaket begann, ist heute eine moderne Schnittstelle zwischen analoger und digitaler Reiseplanung. Es bietet individuell ... Lesen Sie hier weiter... Original-Content von: ADAC, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/7849/6087294", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach camping", + "created_at": "2025-08-19T10:05:53.311776", + "word_count": 51 + }, + { + "id": "9eaaac79401ab384b374d00ef01e1f99", + "title": "RTLZWEI: Erfolgreicher Montag mit \"Bella Italia - Camping auf Deutsch\"", + "date": "Tue, 29 Jul 2025 09:23:26 +0200", + "summary": "RTLZWEI: München (ots) - - Primetime: \"Bella Italia - Camping auf Deutsch\" mit 7,4 % MA (14-49) - RTLZWEI-Tagesmarktanteil: 4,7 % (14-49) Am gestrigen Montagabend konnte RTLZWEI in der Primetime mit einer neuen Folge von \"Bella Italia - Camping auf Deutsch\" ...", + "text": "RTLZWEI [ Newsroom ] München (ots) - - Primetime: \"Bella Italia - Camping auf Deutsch\" mit 7,4 % MA (14-49) - RTLZWEI-Tagesmarktanteil: 4,7 % (14-49) Am gestrigen Montagabend konnte RTLZWEI in der Primetime mit einer neuen Folge von \"Bella Italia - Camping auf Deutsch\" ... Lesen Sie hier weiter... Original-Content von: RTLZWEI, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/6605/6086102", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach camping", + "created_at": "2025-08-19T10:05:53.636607", + "word_count": 56 + }, + { + "id": "6ff7e621d78be1c95dae357b4216f89c", + "title": "So ist man beim Camping richtig versichert", + "date": "Mon, 28 Jul 2025 09:50:40 +0200", + "summary": "Verbraucherzentrale Nordrhein-Westfalen e.V.: So ist man beim Camping richtig versichert Wer mit Wohnwagen oder Wohnmobil Urlaub macht, sollte an den passenden Versicherungsschutz denken Camping-Urlaub ist weiterhin sehr gefragt. Die Neuzulassungen für Privatkunden lagen im ersten Quartal ...", + "text": "28.07.2025 – 09:50 Verbraucherzentrale Nordrhein-Westfalen e.V. So ist man beim Camping richtig versichert Bild-Infos Download Ein Dokument 20250728_Tipp Camper-Versicherung.pdf PDF - 167 kB So ist man beim Camping richtig versichert Wer mit Wohnwagen oder Wohnmobil Urlaub macht, sollte an den passenden Versicherungsschutz denken Camping-Urlaub ist weiterhin sehr gefragt. Die Neuzulassungen für Privatkunden lagen im ersten Quartal 2025 über dem Vorjahresniveau. Die Nachfrage nach neuen und gebrauchten Wohnwagen und Wohnmobilen bleibt also hoch. Das Preisniveau jedoch ist aufgrund von Überkapazitäten etwas gesunken. „Bei aller Urlaubsfreude ist zu bedenken, dass nicht nur das Gefährt an sich wertvoll ist, sondern auch viel Gepäck und technisches Equipment an Bord ist“, sagt Elke Weidenbach, Versicherungsexpertin der Verbraucherzentrale NRW. „Ein möglicher Diebstahl oder Schaden ist in der Regel nicht über die Hausratversicherung abgedeckt. Die richtige Police spart hier viel Ärger und Enttäuschung.” Fünf Tipps für Wohnmobilisten: Das Wichtigste: Die Kfz-Haftpflicht Wie beim Auto ist auch für Wohnmobile und Wohnwagen eine Kfz-Haftpflichtversicherung gesetzlich vorgeschrieben. Sie ersetzt Schäden, die man bei anderen verursacht. Ratsam ist auch ein Voll- oder wenigstens Teilkaskoversicherungsschutz, damit Schäden am eigenen Fahrzeug abgedeckt sind. Das gilt besonders für hochpreisige Camper. Ratsam: Die Inhaltsversicherung Der bewegliche Besitz ist zu Hause über die Hausratversicherung abgesichert, also Möbel, Kleidung, Bargeld oder elektrische Geräte. Beim Camping-Urlaub gilt das nicht. Um im Wohnmobil oder Wohnwagen das persönliche Equipment gegen Diebstahl, Sturm- oder Wasserschäden zu versichern, gibt es die so genannte Inhaltsversicherung. Diese umfasst das Inventar, also die losen Teile im Fahrzeug. Je nach Vertrag ist nur das Reisegepäck eingeschlossen oder auch Elektronik (Laptop, Handy, Kamera, Tablet) oder Sportgeräte (Fahrrad, Surfbrett, Kajak). Die Inhaltsversicherung greift, wenn die Gegenstände gestohlen werden (Raub, Einbruch oder Diebstahl) oder durch Feuer, Sturm, Hagel, Blitzschlag, Überschwemmung oder eine Explosion beschädigt oder zerstört werden. Allerdings ist nur der bewegliche Besitz innerhalb des Fahrzeugs versichert. Was im Vorzelt aufbewahrt wird, fällt oft nicht darunter. Ausgenommen sind manchmal auch Bargeld, Geldkarten, Wertpapiere und Schmuck. Darum greifen die üblichen Versicherungen nicht Die normale Hausratversicherung umfasst zwar meist auch Gegenstände im Fahrzeug, das bezieht sich jedoch in der Regel nur auf normale Pkw. Auch eine Reisegepäckversicherung ist für Campingurlaub nicht geeignet, denn darüber ist nur Gepäck versichert, das man mit sich führt und dann auch nur während der Beförderung, also etwa im Zug oder Auto. Gepäck auf dem Campingplatz ist nicht versichert. Zudem sind die Versicherungs- und Entschädigungssummen eher niedrig und Dinge wie Elektrogeräte oft ausgeschlossen. Nur für Dauercamper gedacht ist die Campingkaskoversicherung (auch „Campingversicherung“ genannt). Diese Variante sichert Gegenstände ab, die dauerhaft im Fahrzeug aufbewahrt werden. Was bei einem gemieteten Wohnmobil zu beachten ist Bei einer gewerblichen Vermietung ist der Versicherungsschutz üblicherweise Teil des Mietvertrages. Das sollte man vor einer Unterschrift prüfen. Wenn kein ausreichender Versicherungsschutz enthalten ist, sollten Urlauber:innen klären, ob und zu welchem Preis dieser zusätzlich abgeschlossen werden kann. Auch Camper-Sharing-Plattformen im Internet sind eine Möglichkeit. Solche Fahrzeuge sind meist umfassend versichert. Die Kosten dafür sind häufig im Mietpreis inbegriffen. Vorsicht bei privaten Vermietungen: In der Regel ist bei normalen Haftpflicht- und Kaskoversicherungen eine Vermietung gegen Entgelt ausgeschlossen. Ausnahme: Der Camper ist laut Fahrzeugpapieren als „Selbstfahrer-Vermietfahrzeug“ zugelassen. Was gilt für Fahrräder? Hier kommt es auf die Bedingungen der jeweiligen Versicherung an. Vor allem bei teuren E-Bikes ist ein genauer Blick in die Bedingungen ratsam. Fahrräder im Camper sind versichert, Fahrräder auf einem Träger dagegen häufig nicht, da sie sich am, aber nicht im Fahrzeug befinden. Es gibt auch Anbieter, die Fahrräder und andere Sportgeräte vom Versicherungsschutz komplett ausnehmen. Bei anderen variieren die maximalen Entschädigungsgrenzen. Weiterführende Informationen: Tipps zu Versicherungen für Wohnmobil und Wohnwagen sind online hier zu finden: www.verbraucherzentrale.nrw/node/85308 -- Verbraucherzentrale NRW Pressestelle Helmholtzstraße 19, 40215 Düsseldorf T +49 21191380-1101", + "tags": [], + "status": "Online", + "link": "https://www.presseportal.de/pm/121716/6085196", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach camping", + "created_at": "2025-08-19T10:05:54.235782", + "word_count": 603 + }, + { + "id": "d9aa796056ae1f9e97c194d43adf963e", + "title": "Family Spots: Diese Reiseziele begeistern Groß und Klein", + "date": "Mon, 28 Jul 2025 09:01:28 +0200", + "summary": "Global Communication Experts: PRESSEINFORMATION Family Spots: Diese Reiseziele begeistern Groß und Klein Frankfurt am Main, 28. Juli 2025 - Ein Familienurlaub soll vieles zugleich sein: spannend, erholsam, naturnah und kindgerecht – und dennoch möchten Erwachsene nicht auf ...", + "text": "28.07.2025 – 09:01 Global Communication Experts Family Spots: Diese Reiseziele begeistern Groß und Klein Bild-Infos Download 9 weitere Medieninhalte Ein Dokument 20250728_GCE_Listicle_Family Spots.pdf PDF - 478 kB PRESSEINFORMATION Family Spots: Diese Reiseziele begeistern Groß und Klein Frankfurt am Main, 28. Juli 2025 - Ein Familienurlaub soll vieles zugleich sein: spannend, erholsam, naturnah und kindgerecht – und dennoch möchten Erwachsene nicht auf Kultur, gutes Essen oder Komfort verzichten. Immer mehr Reiseziele zeigen, dass Ferien mit der Familie weit mehr bedeuten können als nur entspannte Tage am Strand. Die Tourismusexperten von Global Communication Experts präsentieren Orte, die mit besonderen Angeboten und kinderfreundlichen Aktivitäten überzeugen – und dabei dafür sorgen, dass sowohl kleine Abenteurer als auch große Genießer auf ihre Kosten kommen. Valencia – Sonne, Meer und Spaß für die ganze Familie Valencia begeistert Familien mit einer Mischung aus Stadt, Strand und kinderfreundlichen Highlights. Ein Muss: das Oceanogràfic , Europas größtes Aquarium. Für Bewegung sorgt der Gulliver Park im Turia-Garten – ein riesiger Abenteuerspielplatz in Form einer liegenden Märchenfigur. Natur pur erleben Familien im nahegelegenen Naturpark L’Albufera mit Bootstouren, Vogelbeobachtung und echter Paella direkt am See. Auch Wassersport-Fans kommen in Valencia auf ihre Kosten: An den weitläufigen Stadtstränden wie Malvarrosa oder El Saler laden das warme Mittelmeer, Paddleboarding und entspannte Badetage zum Verweilen ein. Alles bequem erreichbar – zu Fuß, per Rad oder mit der Valencia Tourist Card . Camping am Lago di Garda – das perfekte Familienabenteuer Die 17 familienfreundlichen Campingplätze rund um den Gardasee bieten flexible, naturnahe und unvergessliche Urlaubserlebnisse für die ganze Familie. Spielplätze gehören auf allen Plätzen zur Grundausstattung, 5 davon verfügen zusätzlich über Indoor-Spielbereiche für regnerische Tage. 11 Plätze begeistern mit Wasserrutschen und 16 bieten Animationsprogramme und direkten Zugang zum Seeufer. Auch sportlich hat der Gardasee einiges zu bieten: 13 Campingplätze organisieren Kurse und Turniere für Kinder und Erwachsene. Ein besonderes Highlight erwartet Familien auf dem Campingplatz La Rocca : ein eigener Bauernhof, auf dem Kinder Tiere hautnah erleben und spielerisch die Natur entdecken können. Madeira – Die Blumeninsel für kleine Entdecker Madeira ist keine klassische Familieninsel – und genau das macht sie spannend. Statt Strandurlaub gibt es hier Baden in natürlichen Felsenpools, Delfinbeobachtung auf hoher See, Kajaktouren entlang der Küste und Wandern entlang der Levadas. Kinder lernen, wie aus einer Bananenblüte ein Snack wird und wie Maracujas schmecken, frisch vom Strauch. Madeira ist ein Naturparadies, das Kinder wie Eltern begeistert. Dank mildem Klima und kurzer Flugzeit eignet sich die Insel perfekt für Familien. Lissabon – Zwischen Haien schlafen und auf dem Tejo Speed Boot fahren Lissabon überrascht Familien mit Orten, die Kinderaugen groß werden lassen: Im interaktiven Wissenschaftsmuseum wird mit Wind, Wasser und Schwerkraft gespielt, im Ozeanarium schlafen Kinder neben Haien und Rochen. Danach geht’s im Speed Boot über den Tejo oder an die Strände von Costa da Caparica. Und wer einen Ausflug nach Setúbal macht, kann mit etwas Glück Delfine in freier Wildbahn sehen. Eine Destination voller Abenteuer. Südafrika – Wo Kinder Tiere in freier Wildbahn erleben können Während in Deutschland der Sommer und die Ferienzeit beginnt, herrscht in Südafrika Winter – die beste Zeit für Wildtierbeobachtungen. Die trockene Landschaft und wenigen Wasserstellen machen die beliebten Big Five (Löwe, Elefant, Nashorn, Büffel, Leopard) leicht sichtbar. Neben klassischen Safaris bieten viele Lodges kinderfreundliche Aktivitäten wie Junior-Ranger-Kurse oder Nachtwanderungen an, wie z.B. die NYATI Safari Lodge in Limpopo, die Thornybush Game Lodge in Mpumalanga oder das Mattanu Private Game Reserve im Northern Cape. Und die Pinguine in Boulders Beach im Western Cape sind ganzjährig eine Attraktion auch und besonders für Familien. Familienzeit neu gedacht in Südtirol Familienurlaub auf Premium-Niveau bietet das Falkensteiner Family Resort Lido in Südtirol, das seit Juli 2025 mit innovativen Suiten und dem neuen Fine-Dining-Konzept DODICI neue Maßstäbe setzt. Drei neu gestaltete Suiten, vom kompakten Smart Family Room bis zur exklusiven Spa Suite mit Whirlpool und Gaming-Zone, bieten maßgeschneiderte Rückzugsorte für Familien mit unterschiedlichen Bedürfnissen. Highlight für kleine Abenteurer: die Falkytent Suite mit Spielhöhle im Zeltstil. Im neuen Restaurant DODICI genießen Familien ein saisonales Drei-Gänge-Menü mit regionalen und mediterranen Einflüssen – in exklusiver Atmosphäre und dennoch kinderfreundlich. Dazu locken der hoteleigene Naturbadesee, das 2.000 Quadratmeter große Falky-Land und ein eigener Zug ins Skigebiet Kronplatz. Ein Resort, das Familienurlaub völlig neu denkt. Bancal Hotel & Spa – Wo Kinder toben und Eltern entspannen können Im BANCAL Hotel & Spa kommen alle Gäste auf ihre Kosten: Nicht nur Erwachsene, sondern auch Kinder können in den Wellnessbereichen entspannen, denn es gibt einen eigenen Kids SPA-Bereich. Zusätzlich stehen zwei kindgerechte Planschbecken bereit. Drei Pools für Erwachsene runden das Angebot ab. Familienfreundliche Zimmer bieten den perfekten Rückzugsort. Im Hotel finden sich Bereiche für Kinder jeden Alters: Der Saal “Tierra y Fuego” für Kinder zwischen 4 und 11 Jahren bietet neben dem Hauptbereich auch einen kleinen Kino- und Theatersaal. Der Saal “Aire” für Kinder zwischen 12 und 16 Jahren verfügt über einen Tischtennistisch und einen Kicker. Im Außenbereich laden ein moderner Spielplatz und ein hauseigener Gemüsegarten zum Toben und Lernen ein. An Orten wie dem Garten „El Bosque“ können Kinder Pflanzen und Insekten entdecken und so die Bedeutung von Umweltschutz hautnah erfahren. So verbindet das BANCAL Hotel Naturerlebnisse mit einem verantwortungsvollen Familienurlaub. Fort Myers – Islands, Beaches and Neighborhoods: Ausflüge für Groß & Klein Im Urlaub auf Zeitreise zu gehen, ist immer spannend: In den Edison and Ford Winter Estates kann die ganze Familie auf den Spuren der Erfinder Thomas Alva Edison und Henry Ford wandeln. In den kommentierten Touren hören die Kinder \"Thomas Edison\" und \"Henry Ford\" beim Geschichtenerzählen zu und können Geschichte so spielerisch erleben. Für zusätzlichen Spaß sorgt eine Schnitzeljagd mit Jerry, dem Pelikan, der eines von Edisons Haustieren war und an mehreren Stellen auf dem Gelände versteckt ist. Eine andere Jagd voller Adrenalin können Familien im SunSplash Family Waterpark in Cape Coral erleben. Unzählige Rutschen und Attraktionen laden zu unvergesslichen Erlebnissen ein. Ein weiteres Highlight ist der Key West Express , der ganzjährig von Fort Myers Beach nach Key West fährt. Mit dieser Jet-Katamaranfahrt wird Sightseeing zu einem spektakulären Tagesausflug für die ganze Familie. Philadelphia – Exponate zum Anfassen und begehbare Herzen Die US-amerikanische Stadt Philadelphia hält für Kinder einige Abenteuer bereit. Eines der Highlights und ein Klassiker ist das Please Touch Museum , in dem Anfassen ausdrücklich erlaubt ist. Hier lädt ein Märchengarten zum Eintauchen in die Kulissen der Lieblingsgeschichten ein und im Raketenraum, können sich die Kids sogar als Astronauten versuchen und die Planeten von oben betrachten. Eine gute Adresse für kleine Wissenschaftler ist auch das Franklin Institute . Hier kann der Nachwuchs durch ein großes, menschliches Herz spazieren oder die vorherseherischen Fähigkeiten seines Gehirns testen. Das Institut gehört zu den ersten Wissenschaftsmuseen Amerikas und bringt seine Besucher mit Live-Demonstrationen und jeder Menge Interaktion zum Staunen. Über global communication experts Global Communication Experts GmbH (GCE) ist eine der führenden deutschen Repräsentanz-, Marketing- und Kommunikationsagenturen im Bereich Tourismus. Zu den Kunden der Agentur mit Hauptsitz in Frankfurt und einer Dependance in München gehören unter anderen die Tourismus-Organisationen, Kreuzfahrt-Unternehmen, Kunden aus dem Reisevertrieb und Mobilität sowie der Luxus-Hotellerie. Global Communication Experts GmbH ist Mitgründer und Gesellschafter der europäischen Agentur International Tourism Group ITG sowie Mitglied des Deutschen Reiseverbands (DRV), des Travel Industry Club und der touristischen Nachhaltigkeitsinitiative Futouris e.V. Global Communication Experts GmbH Hanauer Landstr. 184 60314 Frankfurt p: +49 69 17 53 71-00 f: +49 69 17 53 71-011 m: mail@gce-agency.com w: www.gce-agency.com www.facebook.com/GCEagency www.instagram.com/GCE_agency Geschäftsführer: Dorothea Hohn, Ralf Engelhardt Firmensitz: Frankfurt", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/102577/6085137", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach camping", + "created_at": "2025-08-19T10:05:54.949236", + "word_count": 1226 + }, + { + "id": "e284564835ff0baa0e9e95a1ce9d33c6", + "title": "Maximale Flexibilität trifft volle Power: Intelligente Tiefenreinigung ohne Kabel mit der PURE ONE S Serie von Tineco", + "date": "Tue, 12 Aug 2025 09:00:13 +0200", + "summary": "ECOVACS GLOBAL PTE. LTD.: Neuss (ots) - Endlich vorbei mit der Suche nach der nächsten Steckdose: Die PURE ONE S Serie von Tineco bietet vier leistungsstarke Akkustaubsauger, die mit intelligenter Saugtechnologie, flexibler Handhabung und starker Saugleistung überzeugen. ...", + "text": "ECOVACS GLOBAL PTE. LTD. [ Newsroom ] Neuss (ots) - Endlich vorbei mit der Suche nach der nächsten Steckdose: Die PURE ONE S Serie von Tineco bietet vier leistungsstarke Akkustaubsauger, die mit intelligenter Saugtechnologie, flexibler Handhabung und starker Saugleistung überzeugen. ... Lesen Sie hier weiter... Original-Content von: ECOVACS GLOBAL PTE. LTD., übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/158602/6094967", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil", + "created_at": "2025-08-19T10:05:56.502494", + "word_count": 55 + }, + { + "id": "a09539e807d8f0437f63ccd06a6f07d5", + "title": "Urlaub mit dem Wohnmobil: Was tun bei Panne oder Unfall", + "date": "Thu, 07 Aug 2025 09:00:11 +0200", + "summary": "HUK-COBURG: Coburg (ots) - Freiheit pur: Urlaub mit dem Wohnmobil - Missgeschicke im Urlaub: Unfall oder Panne, welche Versicherung hilft - Wohnmobil - Haushalt auf vier Rädern: Hausrat ist auch außer Haus versichert - Passgenauer Versicherungsschutz spart ...", + "text": "HUK-COBURG [ Newsroom ] Coburg (ots) - Freiheit pur: Urlaub mit dem Wohnmobil - Missgeschicke im Urlaub: Unfall oder Panne, welche Versicherung hilft - Wohnmobil - Haushalt auf vier Rädern: Hausrat ist auch außer Haus versichert - Passgenauer Versicherungsschutz spart ... Lesen Sie hier weiter... Original-Content von: HUK-COBURG, übermittelt durch news aktuell", + "tags": [], + "status": "Online", + "link": "https://www.presseportal.de/pm/7239/6091976", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil", + "created_at": "2025-08-19T10:05:56.802411", + "word_count": 52 + }, + { + "id": "3bbed4f8df37473a6898edf97fee9d73", + "title": "EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher", + "date": "Wed, 06 Aug 2025 17:53:09 +0200", + "summary": "Dr. Stoll & Sauer Rechtsanwaltsgesellschaft mbH: Der Europäische Gerichtshof hat am 1. August 2025 erneut eine Grundsatzentscheidung im Diesel-Abgasskandal gefällt. Käufer manipulierter Fahrzeuge erhalten künftig einen einheitlichen Anspruch auf Entschädigung – unabhängig vom Besitz, ...", + "text": "Dr. Stoll & Sauer Rechtsanwaltsgesellschaft mbH [ Newsroom ] Der Europäische Gerichtshof hat am 1. August 2025 erneut eine Grundsatzentscheidung im Diesel-Abgasskandal gefällt. Käufer manipulierter Fahrzeuge erhalten künftig einen einheitlichen Anspruch auf Entschädigung – unabhängig vom Besitz, ... Lesen Sie hier weiter...", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/105254/6091837", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil", + "created_at": "2025-08-19T10:05:57.362059", + "word_count": 42 + }, + { + "id": "897946cff6c62a1c36ba85da5247b58c", + "title": "Trotz Camper-Hype: Der Pkw ist die unangefochtene Nummer 1 für Sommerreisen", + "date": "Thu, 24 Jul 2025 13:14:33 +0200", + "summary": "kfzteile24 GmbH: Berlin (ots) - - Klarer Favorit: Acht von zehn befragten Kunden* verreisen im Sommer 2025 mit dem Auto - Campingurlaub? Für mehr als die Hälfte (55,8 %) nicht vorstellbar - Pkw als unverzichtbarer Reisebegleiter: Flexibilität (82,4 %) und ...", + "text": "kfzteile24 GmbH [ Newsroom ] Berlin (ots) - - Klarer Favorit: Acht von zehn befragten Kunden* verreisen im Sommer 2025 mit dem Auto - Campingurlaub? Für mehr als die Hälfte (55,8 %) nicht vorstellbar - Pkw als unverzichtbarer Reisebegleiter: Flexibilität (82,4 %) und ... Lesen Sie hier weiter... Original-Content von: kfzteile24 GmbH, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/116585/6083456", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil", + "created_at": "2025-08-19T10:05:57.995770", + "word_count": 56 + }, + { + "id": "2005f6a657f214a1e628a3b985108c93", + "title": "Doppelfolge am 24. Juli \"Oksana & Family - Alles auf Anfang\": Abwasserprobleme, Jobsuche und Tonstudiobesuch", + "date": "Thu, 24 Jul 2025 09:00:13 +0200", + "summary": "RTLZWEI: München (ots) - - Abwasseralarm im Wohnmobil und Songaufnahme mit der Familie - Doppelfolge am Donnerstag, den 24. Juli 2025, um 20:15 Uhr bei RTLZWEI und vorab auf RTL+ Auf ihrem abenteuerlichen Roadtrip steuern die Kolenitchenkos einen ...", + "text": "RTLZWEI [ Newsroom ] München (ots) - - Abwasseralarm im Wohnmobil und Songaufnahme mit der Familie - Doppelfolge am Donnerstag, den 24. Juli 2025, um 20:15 Uhr bei RTLZWEI und vorab auf RTL+ Auf ihrem abenteuerlichen Roadtrip steuern die Kolenitchenkos einen ... Lesen Sie hier weiter... Original-Content von: RTLZWEI, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/6605/6083013", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil", + "created_at": "2025-08-19T10:05:58.255021", + "word_count": 53 + }, + { + "id": "d2d113b8b419140a9d0aa2b60f0720e4", + "title": "Neue Folge \"Oksana & Family - Alles auf Anfang\": Zwischen Camping-Chaos und einer schweren Entscheidung", + "date": "Thu, 17 Jul 2025 09:30:00 +0200", + "summary": "RTLZWEI: München (ots) - - Chaotische Vorbereitungen: Der Urlaub startet mit unerwarteten Hürden. - Milan vor einer großen Entscheidung: Fußball oder Filmrolle? - Am Donnerstag, den 17. Juli 2025 um 20:15 Uhr, bei RTLZWEI und sieben Tage vorab auf RTL+ ...", + "text": "RTLZWEI [ Newsroom ] München (ots) - - Chaotische Vorbereitungen: Der Urlaub startet mit unerwarteten Hürden. - Milan vor einer großen Entscheidung: Fußball oder Filmrolle? - Am Donnerstag, den 17. Juli 2025 um 20:15 Uhr, bei RTLZWEI und sieben Tage vorab auf RTL+ ... Lesen Sie hier weiter... Original-Content von: RTLZWEI, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/6605/6078446", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil", + "created_at": "2025-08-19T10:05:58.509818", + "word_count": 55 + }, + { + "id": "fd927aa7c87099dc2a6c17fe3aa9db64", + "title": "Umfrage: Mehrheit will mehr Freiheiten für Wohnmobile und Camper", + "date": "Wed, 16 Jul 2025 10:00:41 +0200", + "summary": "AutoScout24: Umfrage: Mehrheit will mehr Freiheiten für Wohnmobile und Camper Jeder Vierte für komplette Liberalisierung von Campingfahrzeugen im öffentlichen Raum / 20 Prozent würden mehr Übernachtungen im eigenen Fahrzeug zulassen / Minderheit will ...", + "text": "16.07.2025 – 10:00 AutoScout24 Umfrage: Mehrheit will mehr Freiheiten für Wohnmobile und Camper Ein Dokument AutoScout24_MI_Mehrh~ile und Camper .pdf PDF - 148 kB Umfrage: Mehrheit will mehr Freiheiten für Wohnmobile und Camper Jeder Vierte für komplette Liberalisierung von Campingfahrzeugen im öffentlichen Raum / 20 Prozent würden mehr Übernachtungen im eigenen Fahrzeug zulassen / Minderheit will Campern hingegen selbst das Parken verbieten Grünwald, 16. Juli 2025. Deutschlands Autofahrer sprechen sich in ihrer Mehrheit für liberalere Regeln beim Campen und Übernachten in Wohnmobilen im öffentlichen Raum aus. So würde fast jeder Zweite den Reisenden mehr Freiheiten einräumen: 26 Prozent sind für die komplette Aufhebung von Campingverboten, 21 Prozent würden zumindest mehr Übernachtungen auf öffentlichen Plätzen im eigenen Fahrzeug gestatten. Das geht aus einer aktuellen, repräsentativen Umfrage von AutoScout24 unter Autohaltern in Deutschland* hervor. Demnach ist ein Großteil der Befragten mit der aktuellen Gesetzeslage einverstanden. Eine Minderheit fordert hingegen drastische Einschränkungen für freistehende Camper. Auch wenn der Boom seit der Coronakrise nachgelassen hat: Das Reisen in Campervan und Wohnmobil ist weiterhin extrem beliebt in Deutschland. So überstieg der Bestand an zugelassenen Reisemobilen hierzulande im April dieses Jahres erstmals die Millionengrenze. Doch so frei wie manche meinen, ist man mit Bulli & Co. keineswegs. Denn Wildcampen darf man mit den Fahrzeugen hierzulande nicht auf öffentlichen Plätzen. Es ist allenfalls erlaubt, eine Nacht im Wohnmobil zu verbringen, um damit die Fahrtüchtigkeit wiederherzustellen. Campingstühle und dergleichen dürfen dabei nicht rausgestellt werden. Doch sind diese Regeln im Herzland der Reisemobilisten überhaupt noch zeitgemäß? Sieht man sich die Ergebnisse der AutoScout24-Umfrage an, darf man daran seinen Zweifel haben. So vertritt jeder Vierte (26 Prozent) die Ansicht, dass es den Reisenden jederzeit und unbeschränkt gestattet sein sollte, mit ihren Fahrzeugen im öffentlichen Raum zu stehen und dort auf Wunsch auch zu campieren. Weitere 21 Prozent sind zwar dagegen, dass Stühle und Tische auf Stellplätzen aufgebaut werden, sie finden aber, es sollte erlaubt sein, auch mehrere Nächte im eigenen Fahrzeug zu übernachten. Damit sprechen sich 47 Prozent der deutschen Autohalter für liberalere Regeln beim Motorcamping im öffentlichen Raum aus. Für 39 Prozent der Befragten haben sich die geltenden Regeln hingegen bewährt: Eine Übernachtung zur Wiederherstellung der Fahrtüchtigkeit ist okay, aber mehr Freiheiten für Camper sind aus ihrer Sicht nicht wünschenswert . Die Umfrage verdeutlicht aber auch, dass Womos nicht nur Fans in Deutschland haben. So würden 2 Prozent der Befragten auch die eine erlaubte Übernachtung auf öffentlichen Plätzen am liebsten streichen – Wiederherstellung der Fahrtüchtigkeit hin oder her. Und 4 Prozent würden sogar noch einen Schritt weitergehen: Aus ihrer Sicht sollte nicht nur das Übernachten im Van untersagt werden, es sollte auch ein generelles Parkverbot für Wohnmobile im öffentlichen Raum geben. Was sich absurd anhört, ist mancherorts durchaus Realität: Mit Verbotsschildern und Höhenbegrenzungen wird Reisemobilen die Zufahrt zu Parkplätzen verwehrt. Jüngere für freies Campen, Ältere für Status quo Vor allem jüngere Befragte unter 40 Jahren sind für einen liberaleren Umgang bei dem Thema: 34 Prozent sprechen sich für ein komplett freies Camping aus, weitere 27 Prozent würden zumindest die Beschränkung auf nur eine Übernachtung zur Wiederherstellung der Fahrtüchtigkeit kippen . Unter dem Strich sind damit 61 Prozent in diesem Alterssegment für weniger Vorschriften beim Motorcampen. Auf der anderen Seite ist es die Gruppe der 50- bis 65-Jährigen , in der verstärkt für die Beibehaltung des Status quo argumentiert wird: 46 Prozent sind der Ansicht, die aktuelle Regelung habe sich bewährt und wollen daher alles so lassen , wie es ist. In der gleichen Alterskohorte finden sich aber auch überproportional viele, die dem wilden Campertreiben deutlichere Grenzen setzen würden. Insgesamt 7 Prozent der 50- bis 65-Jährigen fordern so ein Parkverbot für Wohnmobile im öffentlichen Raum. Allerdings spricht einiges dafür, dass sich die restriktiven Forderungen bei einigen der älteren Hardliner schon in wenigen Jahren in ihr Gegenteil verkehren werden. Denn eines der liebsten Hobbys der Deutschen im Ruhestand ist schließlich das Reisen im eigenen Wohnmobil – ein Zufahrtsverbot für den Parkplatz am See ist dann natürlich das letzte, was man sich wünscht. * Für die Umfrage hat AutoScout24 gemeinsam mit Innofact vom 4. bis zum 10. Juni dieses Jahres eine repräsentative Gruppe von 1.001 Autohaltern in Deutschland zwischen 18 und 65 Jahren befragt. Die Ergebnisstabelle finden Sie unten zum Download. Über AutoScout24 AutoScout24 ist mit über 2 Millionen Fahrzeuginseraten und rund 30 Millionen monatlichen Nutzern europaweit der größte Online-Automarkt. Neben Deutschland ist die AutoScout24 Gruppe auch in den europäischen Kernmärkten Belgien, Luxemburg, Niederlande, Italien, Frankreich, Österreich, Norwegen, Dänemark, Polen und Schweden vertreten. Durch gezielte Akquisitionen im B2B- und B2C-Bereich hat AutoScout24 sein Leistungsportfolio in den vergangenen Jahren maßgeblich erweitert. Mit der Übernahme von LeasingMarkt.de im Jahr 2020 wurde Deutschlands größter Marktplatz für Leasingangebote integriert. Seit 2022 gehört auch AutoProff , eine der am schnellsten wachsenden B2B-Plattformen für den digitalen Autohandel in Europa, zur AutoScout24 Familie. Mit der Übernahme der kanadischen Trader Corporation , Betreiber der Marktplätze AutoTrader.ca und AutoHebdo.net , erweiterte die Gruppe Ende 2024 ihre Präsenz schließlich auch nach Übersee. Als einer der führenden globalen Online-Automarktplätze beschäftigt die AutoScout24 Gruppe rund 2.000 Mitarbeitende und arbeitet mit mehr als 45.000 Händlern in 19 Ländern zusammen. Weitere Informationen finden Sie unter www.autoscout24.de Pressekontakt: Julia Gremmo I Public Relations I Fon +49 89 444 56-1185I presse@autoscout24.de ------------------------------------------------------------------------ AutoScout24 GmbH Tölzerstr. 16, 82031 Grünwald Geschäftsführer: Peter Brooks-Johnson, Biliana Alabatchka, Michael Luhnen Handelsregister: Amtsgericht München, HRB 128701 Sitz der Gesellschaft: Grünwald | USt-IdNr. DE 207254100 ------------------------------------------------------------------------ http://www.autoscout24.de", + "tags": [], + "status": "Online", + "link": "https://www.presseportal.de/pm/13984/6077676", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil", + "created_at": "2025-08-19T10:05:59.107304", + "word_count": 891 + }, + { + "id": "e65f2a2e03f62303cfb202f1ac43ee5b", + "title": "Urlaub mit Wohnmobil: erhöhte Unfallgefahr", + "date": "Tue, 15 Jul 2025 10:40:00 +0200", + "summary": "R+V Infocenter: Wiesbaden (ots) - Reisen mit dem Wohnmobil sind sehr beliebt. Doch wer nur selten mit einem so großen Fahrzeug unterwegs ist, sollte sich gut vorbereiten. Der Camper \"tickt\" in vielen Verkehrssituationen anders als ein Pkw. Darauf macht das ...", + "text": "R+V Infocenter [ Newsroom ] Wiesbaden (ots) - Reisen mit dem Wohnmobil sind sehr beliebt. Doch wer nur selten mit einem so großen Fahrzeug unterwegs ist, sollte sich gut vorbereiten. Der Camper \"tickt\" in vielen Verkehrssituationen anders als ein Pkw. Darauf macht das ... Lesen Sie hier weiter... Original-Content von: R+V Infocenter, übermittelt durch news aktuell", + "tags": [], + "status": "Online", + "link": "https://www.presseportal.de/pm/63400/6076962", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil", + "created_at": "2025-08-19T10:05:59.387537", + "word_count": 56 + }, + { + "id": "2bb2d39a4c649293b8524420eab1abf2", + "title": "Hundefreundliche Campingplätze: Top 10 von Ostsee bis NRW entdecken - T-Online", + "date": "2025-08-19T07:13:13Z", + "summary": "2, Stover Strand Camping, Drage ; 3, Campingplatz Ecktannen, Waren ; 4, Campingpark Kalletal, Lippe ; 5, Südsee-Camp, Wietzendorf ...", + "text": "2, Stover Strand Camping, Drage ; 3, Campingplatz Ecktannen, Waren ; 4, Campingpark Kalletal, Lippe ; 5, Südsee-Camp, Wietzendorf ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.t-online.de/leben/reisen/deutschland/id_100871658/hundefreundliche-campingplaetze-top-10-von-ostsee-bis-nrw-entdecken.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2MLwYap5S4s8YXemp9_4B7", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:02.916939", + "word_count": 20 + }, + { + "id": "e1dc6cbadc08e0168b2b7b3493da8552", + "title": "Go's und No-Go's auf dem Husumer Campingplatz - SHZ", + "date": "2025-08-19T05:06:05Z", + "summary": "Es ist mitten in der Urlaubssaison, auf dem Husumer Campingplatz „Regenbogen“ am Dockkoog stehen derzeit so einige Wohnmobile, Wohnwagen und Zelte ...", + "text": "Es ist mitten in der Urlaubssaison, auf dem Husumer Campingplatz „Regenbogen“ am Dockkoog stehen derzeit so einige Wohnmobile, Wohnwagen und Zelte ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.shz.de/lokales/husum/artikel/gos-und-no-gos-auf-dem-husumer-campingplatz-49140857&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2QF6COS0JJi1OJck-Moqnc", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:03.162820", + "word_count": 22 + }, + { + "id": "807545b7f424277288bc6e1725f2c346", + "title": "Camping: Grenzüberschreitung! Gäste greifen zu harten Maßnahmen - moin.de", + "date": "2025-08-18T21:33:27Z", + "summary": "Die Community ist fassungslos – und diskutiert hitzig über richtiges Verhalten auf dem Campingplatz! Der Newsletter von MOIN.DE mit dem ...", + "text": "Die Community ist fassungslos – und diskutiert hitzig über richtiges Verhalten auf dem Campingplatz ! Der Newsletter von MOIN.DE mit dem ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.moin.de/norddeutschland/camping-platz-nachbarn-was-tun-voll-verrueckt-plaetze-id300643691.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3yKD6zM5C0GGtXMIRQ476n", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:03.429480", + "word_count": 22 + }, + { + "id": "106602e3fd2a5c32de58ef0c1109c893", + "title": "Camping erobert neue Zielgruppen | Trends - Counter vor9", + "date": "2025-08-18T21:08:35Z", + "summary": "Campingplatz Barco Reale. Nicht nur Zelte: Der Campingplatz Barco Reale in Lamporecchio, Montalbano, Italien. Mit fast 43 Millionen Übernachtungen ...", + "text": "Campingplatz Barco Reale. Nicht nur Zelte: Der Campingplatz Barco Reale in Lamporecchio, Montalbano, Italien. Mit fast 43 Millionen Übernachtungen ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.countervor9.de/trends/camping-erobert-neue-zielgruppen&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw25FhwEFlV2_J6vE622fq-G", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:03.678520", + "word_count": 20 + }, + { + "id": "26a7bb1acc8a6662f065d3f1751eca49", + "title": "Liveschalte - Vom DDR-Intercamping zum modernen Campingplatz Berlin | rbb - rbb24", + "date": "2025-08-18T19:41:44Z", + "summary": "Der Platz, in DDR-Zeiten als „Intercamping am Krossinsee“ bekannt, wurde am 01. April 2010 unter dem Namen Campingplatz Krossinsee 1930 GmbH ...", + "text": "Der Platz, in DDR-Zeiten als „Intercamping am Krossinsee“ bekannt, wurde am 01. April 2010 unter dem Namen Campingplatz Krossinsee 1930 GmbH ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.rbb-online.de/der-tag/ort/schmoekwitzwerder-camping-am-krossinsee.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2DBDdZLr3yZhvUrdhKDBMZ", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:03.912613", + "word_count": 22 + }, + { + "id": "823b0cd7fb5a7022fbf1767c937c73d3", + "title": "Verträge laufen aus – Steht der Dauercampingplatz in Karlstein am Main vor dem Aus?", + "date": "2025-08-18T18:25:29Z", + "summary": "Seit Wochen sorgt der Campingplatz am Großwelzheimer Weißsee in Karlstein für Schlagzeilen. Die Gemeinde will den traditionsreichen Platz mit mehr ...", + "text": "Seit Wochen sorgt der Campingplatz am Großwelzheimer Weißsee in Karlstein für Schlagzeilen. Die Gemeinde will den traditionsreichen Platz mit mehr ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.tvmainfranken.de/mediathek/video/vertraege-laufen-aus-steht-der-dauercampingplatz-in-karlstein-am-main-vor-dem-aus/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1DnOUC_hBM-Pi_zSeQ-Agv", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:04.153398", + "word_count": 21 + }, + { + "id": "8f90724a995c1c4fee2e7b5cabe54562", + "title": "Urlaub mit Hund in Mecklenburg-Vorpommern: Hier sind Vierbeiner willkommen", + "date": "2025-08-18T17:17:33Z", + "summary": "Der Campingplatz in Kühlungsborn gilt als hundefreundlichster in ganz Deutschland. Urlaubsplanung mit Hund ist aber nicht immer einfach.", + "text": "Der Campingplatz in Kühlungsborn gilt als hundefreundlichster in ganz Deutschland. Urlaubsplanung mit Hund ist aber nicht immer einfach.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.ostsee-zeitung.de/mecklenburg-vorpommern/urlaub-mit-hund-in-mv-hier-sind-vierbeiner-willkommen-BRLVGYNE2VE6JCGSNWVMQ6MQ64.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw28_kG-NzvJuF08jgbQyzeZ", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:04.399929", + "word_count": 18 + }, + { + "id": "cc004a5c0f1e1797062721173f219f95", + "title": "Deutsche auf größtem Campingplatz der Welt: „Musst du in Therapie“ - news38.de", + "date": "2025-08-18T17:05:13Z", + "summary": "Zwei deutsche Ehepaare machen Urlaub auf einem Campingplatz in den USA. Doch die Enttäuschung kommt sofort.", + "text": "Zwei deutsche Ehepaare machen Urlaub auf einem Campingplatz in den USA. Doch die Enttäuschung kommt sofort.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.news38.de/panorama/promi-tv/article300594965/camping-bella-italia-rtl2-usa-fingerhuth.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1LclJVLbC4CWJ-Z13ITJAE", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:04.637701", + "word_count": 16 + }, + { + "id": "ce298eea7e0afa87b9f8f744ef9374c5", + "title": "Hitze mit 30 Grad und mehr: Tropensturm bringt Europa nochmal Spätsommer-Wetter", + "date": "2025-08-18T16:14:54Z", + "summary": "Hurrikan Erin könnte Tropenluft nach Europa pumpen – Deutschland erlebt vielleicht noch einmal Sommerhitze. Eine Wetter-Kolumne von Dominik Jung.", + "text": "Hurrikan Erin könnte Tropenluft nach Europa pumpen – Deutschland erlebt vielleicht noch einmal Sommerhitze. Eine Wetter-Kolumne von Dominik Jung.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/hitze-mit-30-grad-und-mehr-tropensturm-bringt-europa-nochmal-spaetsommer-wetter-zr-93887738.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw04IwICepfw_rAkj4MdEEpf", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:04.883366", + "word_count": 19 + }, + { + "id": "c84bd15256c149f5c01fd4616cd7acbe", + "title": "Urlaub vor der Haustür: Warum der Innenhof des Zschopauer Seniorenzentrums für zwei ...", + "date": "2025-08-18T16:04:39Z", + "summary": "Für zwei Tage wurde der Innenhof der Einrichtung zu einem Campingplatz, der unweigerlich Urlaubsgefühle aufkommen ließ. Neben drei Wohnwagen und ...", + "text": "Für zwei Tage wurde der Innenhof der Einrichtung zu einem Campingplatz , der unweigerlich Urlaubsgefühle aufkommen ließ. Neben drei Wohnwagen und ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.freiepresse.de/erzgebirge/zschopau/urlaub-vor-der-haustuer-warum-der-innenhof-des-zschopauer-seniorenzentrums-fuer-zwei-tage-zum-campingplatz-wurde-artikel13923271&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw18Q6crLrGxT2s5ouNzshac", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:05.178635", + "word_count": 22 + }, + { + "id": "90f48afd220911f0435bf0c2397d42b2", + "title": "A40: Vollsperrung zwischen Bochum und Essen kostet Nerven - PiNCAMP Magazin", + "date": "2025-08-18T15:43:27Z", + "summary": "... Autobahn. Finde deinen Traum-Campingplatz. Anreise. -. Abreise. -. Gäste. 2 Erwachsene. 0 Kinder. Angebote ansehen. Reisedaten. Gäste: 2. Erwachsene.", + "text": "... Autobahn. Finde deinen Traum- Campingplatz . Anreise. -. Abreise. -. Gäste. 2 Erwachsene. 0 Kinder. Angebote ansehen. Reisedaten. Gäste: 2. Erwachsene.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.pincamp.de/magazin/nachrichten/a40-vollsperrung-zwischen-bochum-und-essen-kostet-nerven&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1CIEQ13m8IuurSSpp6nZFO", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:05.414824", + "word_count": 22 + }, + { + "id": "479995034ac0ecff58def14c0e0deef4", + "title": "Surfer (85) am Chiemsee verschwunden: Großanlegte Suchaktion auch am Montag - Rosenheim24", + "date": "2025-08-18T15:35:12Z", + "summary": "... Campingplatz Übersee“, teilte die Polizeiinspektion Traunstein in einer Pressemitteilung zu dem Einsatz bislang mit. Bei dem Vermissten handelt es ...", + "text": "... Campingplatz Übersee“, teilte die Polizeiinspektion Traunstein in einer Pressemitteilung zu dem Einsatz bislang mit. Bei dem Vermissten handelt es ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.rosenheim24.de/rosenheim/polizeimeldungen/uebersee-polizei-und-wasserwacht-suchen-vermissten-surfer-am-chiemsee-bis-dato-ohne-erfolg-93887306.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2w_irRYdoJKzLR0X84Ad8e", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:05.657279", + "word_count": 21 + }, + { + "id": "e155999f8061b5f7aa3ef42eeccc7fd3", + "title": "Toter 13-Jähriger: Ermittler gehen von Unfall aus - DieSachsen.de", + "date": "2025-08-18T14:51:39Z", + "summary": "Die Umstände und Hintergründe des Todes eines 13-Jährigen in der Oberlausitz sind weiter unklar. Der Junge war von ...", + "text": "Die Umstände und Hintergründe des Todes eines 13-Jährigen in der Oberlausitz sind weiter unklar. Der Junge war von ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.diesachsen.de/unfall-und-verkehr/toter-13-jaehriger-ermittler-gehen-von-unfall-aus-3045700&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2lqwMLXlVEe-Tds0lRaXMi", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:05.893366", + "word_count": 19 + }, + { + "id": "52c77988129ccf267dd662de288e549d", + "title": "Angriff mit Yoga-Matten: Mutter mit zwei Kindern auf Campingplatz Langlau in Not", + "date": "2025-08-18T14:43:36Z", + "summary": "Pfofeld - Was eine Mutter mit zwei Kindern auf dem Langlauer Campingplatz erlebte, war nicht gerade schön. Erst kam das Gewitter, dann wurden die ...", + "text": "Pfofeld - Was eine Mutter mit zwei Kindern auf dem Langlauer Campingplatz erlebte, war nicht gerade schön. Erst kam das Gewitter, dann wurden die ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.nn.de/region/gunzenhausen/angriff-mit-yoga-matten-mutter-mit-zwei-kindern-auf-campingplatz-langlau-in-not-1.14800747&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ugUpG1IfTlR1FCFcgsHvG", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:06.146076", + "word_count": 25 + }, + { + "id": "4da3a058a1daa9efec5b52dc198909ca", + "title": "Übersee: 85-jähriger Surfer wird auf dem Chiemsee vermisst - Traunsteiner Tagblatt", + "date": "2025-08-18T14:12:04Z", + "summary": "Als er bis in die Abendstunden nicht zurückkehrte, wurden zahlreiche Rettungskräfte zum Campingplatz nach Übersee alarmiert. Neben einer Vielzahl ...", + "text": "Als er bis in die Abendstunden nicht zurückkehrte, wurden zahlreiche Rettungskräfte zum Campingplatz nach Übersee alarmiert. Neben einer Vielzahl ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.traunsteiner-tagblatt.de/region/landkreis-traunstein/uebersee_artikel,-85jaehriger-surfer-wird-auf-dem-chiemsee-vermisst-_arid,952723.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0dJa3tuybPxYdMYo3oV320", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:06.397206", + "word_count": 20 + }, + { + "id": "d7c8f35a7601bc3541443b1cf0c0417c", + "title": "Weinsberg CaraTour 600 ME im Test: Abenteuer auf vier Rädern? - IMTEST", + "date": "2025-08-18T14:08:48Z", + "summary": "Camping-Kastenwagen Weinsberg Weinsberg CaraTour 600 ME in seitlicher Ansicht auf einem Campingplatz. · Einblick ins Cockpit (mit Infotainment-Display) ...", + "text": "Camping-Kastenwagen Weinsberg Weinsberg CaraTour 600 ME in seitlicher Ansicht auf einem Campingplatz . · Einblick ins Cockpit (mit Infotainment-Display) ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.imtest.de/mobilitaet-reise/weinsberg-caratour-600-me-camping-van-kompakt-kastenwagen-test-ziemlich/424550&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3y4Gx77nyLDlu4T5QBAh_-", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:06.642649", + "word_count": 20 + }, + { + "id": "99c5b661fcce2f35e1c1d4018c513cad", + "title": "An Weilburger Tankstelle fliegen die Fäuste - Echo Online", + "date": "2025-08-18T14:01:27Z", + "summary": "Verlassener Campingplatz wird zu Lost Place und Müllkippe. Mehrere Jahrzehnte lebten auf dem Platz ganze Familien, doch im Dezember 2021 war ...", + "text": "Verlassener Campingplatz wird zu Lost Place und Müllkippe. Mehrere Jahrzehnte lebten auf dem Platz ganze Familien, doch im Dezember 2021 war ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/kreis-limburg-weilburg/weilburg/an-weilburger-tankstelle-fliegen-die-faeuste-4892024&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l7jUxG7664vJ69cHwv20M", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:06.878597", + "word_count": 22 + }, + { + "id": "1738787ebe5a9377046e001ef150eacb", + "title": "Ein spannendes Wochenende für kleine Abenteurer - BLICK aktuell", + "date": "2025-08-18T13:55:58Z", + "summary": "September um 15 Uhr verwandelt sich der Campingplatz im Eichenwald (57537 Mittelhof) in eine geheimnisvolle Dschungelwelt - voller spannender ...", + "text": "September um 15 Uhr verwandelt sich der Campingplatz im Eichenwald (57537 Mittelhof) in eine geheimnisvolle Dschungelwelt - voller spannender ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.blick-aktuell.de/Termine/Ein-spannendes-Wochenende-fuer-kleine-Abenteurer--636547.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0kVA76weLMICuiplUm9G5M", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:07.130889", + "word_count": 20 + }, + { + "id": "1351732007b9375b53a348b1da5b7ce9", + "title": "Woran ein Campingplatz-Experte des ADAC deutsche Urlauber direkt erkennt", + "date": "2025-08-18T13:36:11Z", + "summary": "Das ist auch das Erste, worauf ich achte, wenn ich auf einem Campingplatz ankomme“, berichtet ein Camping-Experte vom ADAC.", + "text": "Das ist auch das Erste, worauf ich achte, wenn ich auf einem Campingplatz ankomme“, berichtet ein Camping-Experte vom ADAC.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.lauterbacher-anzeiger.de/panorama/woran-ein-campingplatz-experte-des-adac-deutsche-urlauber-direkt-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw14jziy82R0xboz7sPEvmaR", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:07.387144", + "word_count": 19 + }, + { + "id": "1c7da660042000c4e8e395852b2d0d04", + "title": "Vermisster Junge bei Lohsa: Obduktion des toten 13-Jährigen abgeschlossen | Lausitzer Rundschau", + "date": "2025-08-18T13:14:37Z", + "summary": "13-Jähriger von Campingplatz verschwunden - Großeinsatz. Ein 13-jähriger Junge war von einem Campingplatz bei Lohsa verschwunden. Nach ...", + "text": "13-Jähriger von Campingplatz verschwunden - Großeinsatz. Ein 13-jähriger Junge war von einem Campingplatz bei Lohsa verschwunden. Nach ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.lr-online.de/lausitz/hoyerswerda/vermisster-junge-bei-lohsa-obduktion-des-toten-13-jaehrigen-abgeschlossen-78252705.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2bCvU4jnneGEZTl3uf48qo", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T10:06:07.624555", + "word_count": 18 + }, + { + "id": "c54ba93aa39280671ca65feb724977dc", + "title": "Jeep Cherokee als Camper – der einfache Weg zum autarken Urlaub - vanlifemag.de", + "date": "2025-08-18T21:16:57Z", + "summary": "Vanlife Serie · News · Vanlife Custom · Vanlife Dachzelt · Vanlife on Tour ... Meet and PeopleVanlife Custom. ·7 Minuten Lesedauer. Jeep Cherokee als ...", + "text": "Vanlife Serie · News · Vanlife Custom · Vanlife Dachzelt · Vanlife on Tour ... Meet and People Vanlife Custom. ·7 Minuten Lesedauer. Jeep Cherokee als ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/jeep-cherokee-als-camper/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0A-3nq90dUx96JAA9j2VYX", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305", + "source_name": "Google Alert – Vanlife", + "created_at": "2025-08-19T10:06:09.494382", + "word_count": 27 + }, + { + "id": "729ec04387fdd2e3ae502f3432b27f15", + "title": "RC-1 SEMA Build: Ein Show-Camper setzt neue Maßstäbe - vanlifemag.de", + "date": "2025-08-18T07:02:27Z", + "summary": "Ein Showfahrzeug mit Vanlife im Blut. Rogue Vans hat mit dem RC-1 SEMA Build eindrucksvoll bewiesen, dass auch ein Campervan ein echter Showstar sein ...", + "text": "Ein Showfahrzeug mit Vanlife im Blut. Rogue Vans hat mit dem RC-1 SEMA Build eindrucksvoll bewiesen, dass auch ein Campervan ein echter Showstar sein ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/rc-1-sema-build-ein-show-camper-setzt-neue-massstaebe/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0gYNfiVFof8MRF16Pp8QEt", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305", + "source_name": "Google Alert – Vanlife", + "created_at": "2025-08-19T10:06:09.733009", + "word_count": 25 + }, + { + "id": "eb8a92177de6d9d862f889eb34f25502", + "title": "Festival-Flair, Fachwissen und Musik – das bietet das Rahmenprogramm der CARAVAN und", + "date": "2025-08-18T06:04:09Z", + "summary": "Unternehmensgruppe NOZ/mh:n - Vier Tage Messe, Festival und Vanlife-Community in Rendsburg – mit ...✚ Mehr lesen.", + "text": "Unternehmensgruppe NOZ/mh:n - Vier Tage Messe, Festival und Vanlife -Community in Rendsburg – mit ...✚ Mehr lesen.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.presseportal.de/pm/179965/6098434&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw2Lv2GimqzrQfgtJIY7asee", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305", + "source_name": "Google Alert – Vanlife", + "created_at": "2025-08-19T10:06:09.965845", + "word_count": 17 + }, + { + "id": "a9de2c1a677f2dbcbb300cea0fc97bff", + "title": "San Hejmo Festival 2026: Datum, Line-up, Neuheiten, Fotos - Düsseldorf Tonight", + "date": "2025-08-18T20:20:02Z", + "summary": "Die Termine fürs San Hejmo 2026 stehen: Welche Headliner sind dabei? Was kosten die Tickets, wie teuer ist Camping und wie gelingt die Anfahrt?", + "text": "Die Termine fürs San Hejmo 2026 stehen: Welche Headliner sind dabei? Was kosten die Tickets, wie teuer ist Camping und wie gelingt die Anfahrt?", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.tonight.de/freizeit/san-hejmo-festival-2026-datum-line-up-neuheiten-fotos_150121.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw1oblZYw0b618LHsaVJWsDI", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856", + "source_name": "Google Alert – Camping Termine 2024", + "created_at": "2025-08-19T10:06:11.588353", + "word_count": 24 + }, + { + "id": "a90be9a2e94cbe4d9ace0b660181a17c", + "title": "Familie Ochsenknecht: Camping-Urlaub mit Jimi Blue | GALA.de", + "date": "2025-08-18T14:59:19Z", + "summary": "Nach dem Camping-Abenteuer steht für Jimi Blue Ochsenknecht ein Gerichtstermin an, der laut der "Tiroler Tageszeitung" am 22. August stattfinden ...", + "text": "Nach dem Camping -Abenteuer steht für Jimi Blue Ochsenknecht ein Gerichtstermin an, der laut der \"Tiroler Tageszeitung\" am 22. August stattfinden ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.gala.de/stars/news/familie-ochsenknecht--camping-urlaub-mit-jimi-blue-24437026.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw2sgq15V-Z-mJUEaEvTyAdQ", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856", + "source_name": "Google Alert – Camping Termine 2024", + "created_at": "2025-08-19T10:06:11.819871", + "word_count": 22 + }, + { + "id": "bf4569aa16b0d78869ded643a2fc5647", + "title": "Echo Open Air 2025 in Mindelheim (Westernach): Termin, Line-Up, Tickets, Bezahlung, Camping ...", + "date": "2025-08-18T14:33:33Z", + "summary": "Echo Open Air 2025 in Mindelheim (Westernach): Termin, Line-Up, Tickets, Bezahlung, Camping, Parken ... Bereits 2024 ...", + "text": "Echo Open Air 2025 in Mindelheim (Westernach): Termin , Line-Up, Tickets, Bezahlung, Camping , Parken ... Bereits 2024 ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.augsburger-allgemeine.de/mindelheim/echo-open-air-2025-mindelheim-westernach-am-wochenende-line-up-tickets-parken-camping-110529337&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw2QZff-JniMKd0gb3ZzaRQ0", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856", + "source_name": "Google Alert – Camping Termine 2024", + "created_at": "2025-08-19T10:06:12.061280", + "word_count": 19 + }, + { + "id": "29037d96e0aa59c0f15ae65b20b05c54", + "title": "Gamescom 2025: Aston Martin im Zenless Zone Zero-Design - Autozeitung", + "date": "2025-08-18T14:37:32Z", + "summary": "... Spielemesse. Zwar wird kurz vor dem Start der Messe (20. bis 24. August 2025) nicht bekannt gegeben, welcher Autohersteller offiziell an der Messe ...", + "text": "... Spielemesse . Zwar wird kurz vor dem Start der Messe (20. bis 24. August 2025 ) nicht bekannt gegeben, welcher Autohersteller offiziell an der Messe ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.autozeitung.de/gamescom-2025-messe-highlights-fuer-autofans-209057.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0FXrDgBBR2LkRWJXcWhY_P", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-19T10:06:13.926099", + "word_count": 27 + }, + { + "id": "c8de25e901c4109954c2a8f1b658278f", + "title": "Caravan Salon und Ed Sheeran zeitgleich: Droht ein Verkehrskollaps? | Regional - BILD.de", + "date": "2025-08-18T13:05:18Z", + "summary": "Heißt: Jeweils mehr als 100.000 Camping- und Musik-Fans wird es an dem Freitag, Samstag und Sonntag in den Norden der NRW-Landeshauptstadt ziehen. Der ...", + "text": "Heißt: Jeweils mehr als 100.000 Camping - und Musik-Fans wird es an dem Freitag, Samstag und Sonntag in den Norden der NRW-Landeshauptstadt ziehen. Der ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.bild.de/regional/duesseldorf/caravan-salon-und-ed-sheeran-zeitgleich-droht-ein-verkehrskollaps-689c5654149faf081095d6cc&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1SRpJIm3W_DbR7mUVWZ4WS", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-19T10:06:14.169651", + "word_count": 25 + }, + { + "id": "9160268e00eebf06ae16136e264081a1", + "title": "Neu bei Steam: Die gamescom 2025 wirft ihren Schatten voraus - GameStar", + "date": "2025-08-18T12:06:22Z", + "summary": "... Messe | Ort: Köln | Termin: 20. bis 24. August 2025. Diese Woche ist es ... Caravanners: Co-op Open World Camping (Early Access): Virtuelles Camping ...", + "text": "... Messe | Ort: Köln | Termin: 20. bis 24. August 2025 . Diese Woche ist es ... Caravanners: Co-op Open World Camping (Early Access): Virtuelles Camping ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.gamestar.de/artikel/neu-bei-steam,3437937.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2sHEDYfSnIyZwh9_ssIU_y", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-19T10:06:14.422019", + "word_count": 28 + }, + { + "id": "6b165d5c34ca0f9bdeb384a8cd94e8ef", + "title": "MEORGA MSR-Spezialmesse in Ludwigshafen - klamm.de", + "date": "2025-08-18T09:39:33Z", + "summary": "Die MEORGA veranstaltet am 10. September 2025 in der Friedrich-Ebert-Halle in Ludwigshafen eine Fachmesse für Mess-, Steuerungs- und Regeltechnik, ...", + "text": "Die MEORGA veranstaltet am 10. September 2025 in der Friedrich-Ebert-Halle in Ludwigshafen eine Fachmesse für Mess-, Steuerungs- und Regeltechnik, ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.klamm.de/news/meorga-msr-spezialmesse-in-ludwigshafen-4N1254481.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11VrqOODIm34SfZyc87aDJ", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-19T10:06:14.787423", + "word_count": 20 + }, + { + "id": "7a6acb0a306eccab094279057ee22ac0", + "title": "Akku leer: Gefahren beim Laden von E-Bikes", + "date": "Tue, 19 Aug 2025 10:20:00 +0200", + "summary": "R+V Infocenter: Wiesbaden (ots) - E-Bike-Akkus wieder aufladen: In den eigenen vier Wänden ist das kein Problem. Anders sieht es in gemeinschaftlich genutzten Räumen oder am Arbeitsplatz aus. Dort ist eine Erlaubnis notwendig. Darauf macht das Infocenter der ...", + "text": "R+V Infocenter [ Newsroom ] Wiesbaden (ots) - E-Bike-Akkus wieder aufladen: In den eigenen vier Wänden ist das kein Problem. Anders sieht es in gemeinschaftlich genutzten Räumen oder am Arbeitsplatz aus. Dort ist eine Erlaubnis notwendig. Darauf macht das Infocenter der ... Lesen Sie hier weiter... Original-Content von: R+V Infocenter, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/63400/6099613", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil", + "created_at": "2025-08-19T20:16:39.559235", + "word_count": 54 + }, + { + "id": "0e156dd4462d1d53b4c33d461492d1cc", + "title": "Winterthur: Campingplatz Schützenweiher kommt an die Urne - Tages-Anzeiger", + "date": "2025-08-19T16:25:21Z", + "summary": "Nun entscheidet die Winterthurer Bevölkerung über den Campingplatz Schützenweiher. Die IG Camping hat über 1500 Unterschriften gesammelt. Damit will ...", + "text": "Nun entscheidet die Winterthurer Bevölkerung über den Campingplatz Schützenweiher. Die IG Camping hat über 1500 Unterschriften gesammelt. Damit will ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.tagesanzeiger.ch/winterthur-campingplatz-schuetzenweiher-kommt-an-die-urne-637538306386&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0agfyAxzRqVvd3uX5bhaA-", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T20:16:46.788570", + "word_count": 20 + }, + { + "id": "e1f2dbd9ba6bcc54a89b956bf00ca38e", + "title": "Erste, worauf ich achte": Camping-Experte erkennt Deutsche sofort an einem Detail", + "date": "2025-08-19T15:44:59Z", + "summary": "Jede Nation hat ihre eigenen Vorlieben – auch beim Camping. Ein Experte verrät, woran er deutsche Urlauber auf einem Campingplatz erkennt.", + "text": "Jede Nation hat ihre eigenen Vorlieben – auch beim Camping. Ein Experte verrät, woran er deutsche Urlauber auf einem Campingplatz erkennt.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.focus.de/reisen/erste-worauf-ich-achte-camping-experte-erkennt-deutsche-sofort-an-einem-detail_b0ccac54-bb2b-4d0a-be65-f76fca52e00d.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0oZHkJrCJTQ2P3DjOmaMq1", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T20:16:47.679684", + "word_count": 21 + }, + { + "id": "40469f336d60d735ab2d0c3bb5f2a64e", + "title": "Woran ein Campingplatz-Experte deutsche Urlauber sofort erkennt", + "date": "2025-08-19T15:39:00Z", + "summary": "Das ist auch das Erste, worauf ich achte, wenn ich auf einem Campingplatz ankomme“, erklärt ein Camping-Experte vom ADAC.", + "text": "Das ist auch das Erste, worauf ich achte, wenn ich auf einem Campingplatz ankomme“, erklärt ein Camping-Experte vom ADAC.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/woran-ein-campingplatz-experte-deutsche-urlauber-sofort-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2bjSwJduCIDU44lYDuu22U", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T20:16:48.591816", + "word_count": 19 + }, + { + "id": "62c440deccbd30aad3c194f99100be54", + "title": "WTG-Insolvenz in Hooksiel: Investor für Campingplatz und Hallenbad gefunden", + "date": "2025-08-19T14:58:25Z", + "summary": "Der Campingplatz und Meerwasser-Hallenbad in Hooksiel sollen verkauft werden. Nach Abschluss des Interessenbekundungsverfahrens verhandelt die ...", + "text": "Die Verkaufsverhandlungen für den Campingplatz und das Meerwasser-Hallenbad in Hooksiel sind im Gange. Dies folgt dem Abschluss des Verfahrens zur Bekundung von Interesse.", + "tags": [ + "Campingplatz", + "Meerwasser-Hallenbad", + "Hooksiel", + "Verkaufsverhandlungen", + "Immobilienverkauf" + ], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.nwzonline.de/friesland/wtg-insolvenz-in-hooksiel-investor-fuer-campingplatz-und-hallenbad-gefunden_a_4,2,1744055285.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2NSatmqIKkGVEo26UyQfCS", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T20:16:49.480625", + "word_count": 23, + "rewritten_at": "2025-08-20T08:20:56.738946" + }, + { + "id": "e21969aa8c882a748c6457a5b394c5d9", + "title": "Nach Krisentreffen in Karlstein: Mögliche Rettung für die Dauercamper am Großwelzheimer Weißsee", + "date": "2025-08-19T12:51:47Z", + "summary": "Davon schreibt das Campingplatz-Gremium auch in einem Brief an die Großwelzheimer Dauercamper. Dieser mögliche Investor kann sich demnach vorstellen, ...", + "text": "Davon schreibt das Campingplatz -Gremium auch in einem Brief an die Großwelzheimer Dauercamper. Dieser mögliche Investor kann sich demnach vorstellen, ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.main-echo.de/region/stadt-kreis-aschaffenburg/nach-dem-krisentreffen-in-karlstein-moegliche-rettung-fuer-die-dauercamper-art-8562505&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0F7beKEClnDEQsNAUMuWIr", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T20:16:50.400023", + "word_count": 21 + }, + { + "id": "2190ed396edb115ff9487f4693ce401c", + "title": "Sassari: Polizei greift bei illegalem Camping zwischen Lake Baratz und Porto Ferro ein.", + "date": "2025-08-19T11:58:27Z", + "summary": "Für den kleinen Campingplatz fehlte eine Genehmigung und er entsprach nicht den gesetzlichen Hygiene- und Sicherheitsstandards . Die Stadtpolizei ...", + "text": "Für den kleinen Campingplatz fehlte eine Genehmigung und er entsprach nicht den gesetzlichen Hygiene- und Sicherheitsstandards . Die Stadtpolizei ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.unionesarda.it/de/sardinien/sassari-polizei-greift-bei-illegalem-camping-zwischen-lake-baratz-und-porto-ferro-ein-gb90frrb&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2uUKNIFkm1Rvv58CAVg2_U", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T20:16:51.284329", + "word_count": 20 + }, + { + "id": "7ae73aec7cf384171c5c690e07855ebf", + "title": "Camping am See in Brandenburg – 5 besonders schöne Plätze", + "date": "2025-08-19T11:52:04Z", + "summary": "Ein Campingplatz direkt am See ist die perfekte Kombination für den Sommer. B.Z. stellt die besten Campingplätze in Brandenburg vor.", + "text": "Ein Campingplatz direkt am See ist die perfekte Kombination für den Sommer. B.Z. stellt die besten Campingplätze in Brandenburg vor.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.bz-berlin.de/ratgeber/camping-in-brandenburg-am-see&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw28Yp1DHAiG7pUNIJF_tLkC", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T20:16:52.177950", + "word_count": 20 + }, + { + "id": "00bf563116da12cf7a1c055aa2f2edbd", + "title": "Lost Place im Odenwald: Verlassener Campingplatz lockt Menschen an - Echo Online", + "date": "2025-08-19T11:29:09Z", + "summary": "Ein verlassener Campingplatz im Odenwald wird zum Lost Place – und zur Müllkippe. Mehrere Jahrzehnte lebten auf dem Platz ganze Familien.", + "text": "Ein verlassener Campingplatz im Odenwald wird zum Lost Place – und zur Müllkippe. Mehrere Jahrzehnte lebten auf dem Platz ganze Familien.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/odenwaldkreis/oberzent-odenwaldkreis/lost-place-odenwald-verlassener-campingplatz-muellkippe-forum-oberzent-4805851&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw39nSnV29WHn7ytbY8s4wkI", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T20:16:53.078459", + "word_count": 21 + }, + { + "id": "3af22c4774f5ab01262eff463b34dfbb", + "title": "Sachsens Campingplätze: Hier können Naturliebhaber Urlaub machen", + "date": "2025-08-19T10:52:42Z", + "summary": "Am größten sächsischen See bietet der Campingplatz sowohl klassisches Camping im Zelt oder Wohnmobil, als auch Glamping im Safari-Zelt. Der Trend des ...", + "text": "Am größten sächsischen See bietet der Campingplatz sowohl klassisches Camping im Zelt oder Wohnmobil, als auch Glamping im Safari-Zelt. Der Trend des ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.saechsische.de/sachsen/sachsens-campingplaetze-hier-koennen-naturliebhaber-urlaub-machen-LISYQBT5XRCHDEHUZUU66IKT7Y.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3LZG2TbqgyYMDOING19TpS", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T20:16:53.984044", + "word_count": 23 + }, + { + "id": "47f9d2ce09acd3acb5fde56b8797a326", + "title": "Herford: Betrüger mit Machete auf Campingplatz verhaftet - WELT", + "date": "2025-08-19T10:01:00Z", + "summary": "Auf einem Campingplatz bei Herford konnte die Polizei einen international gesuchten Betrüger festnehmen. Im Caravan waren Schusswaffen, ...", + "text": "Auf einem Campingplatz bei Herford konnte die Polizei einen international gesuchten Betrüger festnehmen. Im Caravan waren Schusswaffen, ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.welt.de/regionales/duesseldorf/article118823818/Herford-Betrueger-mit-Machete-auf-Campingplatz-verhaftet.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1SrZmj-KpWRtFejPpNVBcw", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T20:16:54.871491", + "word_count": 18 + }, + { + "id": "ac987638621cd9643930d9e8fc4a5603", + "title": "Neuer Campingplatz in Niedersachsen eröffnet: Betreiber sind europaweit bekannt - HNA", + "date": "2025-08-19T09:07:20Z", + "summary": "Bad Sachsa entwickelt sich zu einem Magneten für Camper. Ein neuer Platz wurde eröffnet. Ein digitales System soll den Gästen mehr Flexibilität ...", + "text": "Bad Sachsa entwickelt sich zu einem Magneten für Camper. Ein neuer Platz wurde eröffnet. Ein digitales System soll den Gästen mehr Flexibilität ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.hna.de/niedersachsen/in-europa-wohlbekannt-neuer-campingplatz-in-niedersachsen-eroeffnet-betreiber-93885856.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0KfYM1g3v_ASkaG5-L4e1w", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T20:16:55.766259", + "word_count": 23 + }, + { + "id": "704a16e9489da28f12e54f66c367bc4c", + "title": "Effizient und umweltfreundlich: Campingplatz in Erden mit neuer LED-Beleuchtung", + "date": "2025-08-19T07:55:26Z", + "summary": "Neuee LED-Beleuchtung: Gemeinsam mit der Ortsgemeinde Erden hat Westenergie die Beleuchtung auf dem Campingplatz am Moselufer 1 modernisiert.", + "text": "Neuee LED-Beleuchtung: Gemeinsam mit der Ortsgemeinde Erden hat Westenergie die Beleuchtung auf dem Campingplatz am Moselufer 1 modernisiert.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://lokalo.de/artikel/376714/effizient-und-umweltfreundlich-campingplatz-in-erden-mit-neuer-led-beleuchtung/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2fXa6aZmE3BqkAsNbHCnwC", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T20:16:56.668508", + "word_count": 18 + }, + { + "id": "384457fb35f9a8a4fc9871b6d19a23c9", + "title": "Seit 60 Jahren Campingurlaub auf Usedom: Leipzigerin hat sich ihren Stammplatz in ...", + "date": "2025-08-19T03:07:05Z", + "summary": "Als Monika Becker 1965 das erste Mal ihr Zelt auf dem Ückeritzer Campingplatz aufschlug, regierte in der DDR noch Walter Ulbricht, in der Schule war ...", + "text": "Als Monika Becker 1965 das erste Mal ihr Zelt auf dem Ückeritzer Campingplatz aufschlug, regierte in der DDR noch Walter Ulbricht, in der Schule war ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.ostsee-zeitung.de/lokales/vorpommern-greifswald/usedom/seit-60-jahren-campingurlaub-auf-usedom-leipzigerin-hat-sich-ihren-stammplatz-in-ueckeritz-YWTEPQ3CHBFIDJQZLTYNTQG3DU.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw02dVQz4QETTNH0fLbVCXSy", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-19T20:16:58.478264", + "word_count": 26 + }, + { + "id": "dafb25b91a77de2a89ce9941c8250bf1", + "title": "Erste, worauf ich achte": Camping-Experte erkennt Deutsche sofort an einem Detail", + "date": "2025-08-19T15:44:59Z", + "summary": "Laut dem Statistischen Bundesamt erreichte der Campingtrend 2024 mit knapp 42,9 Millionen Gästeübernachtungen einen neuen Rekord. Thomas Reimann ...", + "text": "Laut dem Statistischen Bundesamt erreichte der Campingtrend 2024 mit knapp 42,9 Millionen Gästeübernachtungen einen neuen Rekord. Thomas Reimann ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.focus.de/reisen/erste-worauf-ich-achte-camping-experte-erkennt-deutsche-sofort-an-einem-detail_b0ccac54-bb2b-4d0a-be65-f76fca52e00d.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw0oZHkJrCJTQ2P3DjOmaMq1", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856", + "source_name": "Google Alert – Camping Termine 2024", + "created_at": "2025-08-19T20:17:08.247038", + "word_count": 19 + }, + { + "id": "fc082d7f623847d3566c399a06f57341", + "title": "Fahrzeugtechnik am Wohnmobil im Detail: Windschutzscheiben sind längst mehr als Glas", + "date": "Wed, 20 Aug 2025 06:00:00 +0200", + "summary": "

    Wir vertrauen der Windschutzscheibe, wenn man’s genau nimmt, unser Leben an und sind uns sicher, dass sie nie bricht. Dafür gibt es Gründe.

    ", + "text": "Auf den ersten Blick ist die Windschutzscheibe eines Campingbusses nur ein großes Stück Glas. Wer das so sieht, unterschätzt die Komponente jedoch deutlich. Denn moderne Windschutzscheiben sind längst Hightech-Produkte – weit entfernt von simplem Glas. Sie sind Lebensretter, Sichtfenster für die Kameras und Sensoren der Assistenzsysteme und natürlich Einflussfaktoren fürs Raumklima. Schutzschild vor Wind, Wetter und Steinschlag Die wichtigste Funktion von Windschutzscheiben bleibt auch an Campingbussen und Wohnmobilen der Schutz vor Fahrtwind, Gischt und Regen oder umherfliegenden Gegenständen. Deshalb müssen sie enorm stabil sein und viele Schläge abhalten können, ohne zu zerspringen. Sie bestehen deshalb aus gleich mehreren Schichten. In der Mitte steckt eine zäh elastische Kunststofffolie, die meistens aus Polyvinylbutyral (PVB) ist. Diese ist zwischen zwei Scheiben aus speziellem Verbundglas eingebettet. Der Trick: Bei einem Aufprall zerspringt das Glas zwar in viele Teile, doch die Splitter bleiben an der Folie haften – und so werden die Insassen vor Verletzungen geschützt. Aber das ist noch nicht alles. Je nach Modell steckt noch viel mehr drin: Tönung gegen Sonnenblenden, Heizelemente gegen Beschlag. Manche Scheiben können sogar schalldämmend wirken oder Sonnenstrahlen reflektieren, um den Innenraum kühl zu halten. Sichtfeld für Menschen und Sensoren Genauso wie für uns Menschen sind die Windschutzscheiben, auch die \"Sichtfenster\" für moderne Assistenzsysteme. Deren Infrarotsensoren und Kameras sitzen oft direkt hinter der Windschutzscheibe – meist im oberen Teil. Regensensoren erkennen durch Lichtreflexion, ob Wasser auf der Scheibe steht – und aktivieren automatisch die Scheibenwischer. Viele Transporter wie der Mercedes Sprinter, Fiat Ducato oder Ford Transit Custom nutzen Kameras hinter der Scheibe für Spurhalte- oder Notbremssysteme. Diese Kameras \"blicken\" durch einen exakt definierten Bereich der Frontscheibe – und sind extrem empfindlich gegenüber Verzerrungen oder Lichtbrechungen. Deshalb muss die Scheibe perfekt zu diesen Systemen passen. Einfach eine Glasscheibe in der passenden Form einzusetzen, geht nciht. Schon kleinste Abweichungen im Glas – etwa durch nicht originale Ersatzscheiben – können dazu führen, dass die Kamera die Fahrbahn nicht mehr richtig erkennt. Nach einem Tausch muss die Sensorik neu kalibriert werden, sonst drohen Fehlfunktionen bei sicherheitsrelevanten Systemen. Die Windschutzscheibe ist also längst nicht mehr nur ein Sichtfenster – sie ist ein funktionaler Bestandteil moderner Fahrzeugtechnik. Bei Schäden Windschutzscheibe tauschen Doch auch Hightech ist nicht unverwundbar: Ein kleiner Steinschlag reicht manchmal, und es entsteht ein feiner Riss. Dieser kann sich durch Erschütterungen oder Temperaturschwankungen schnell ausbreiten. Die Folge: eingeschränkte Sicht und ein Sicherheitsrisiko. Deshalb gilt: Bei einem Steinschlag möglichst schnell handeln! Kleine Schäden können oft noch repariert werden – vorausgesetzt, sie sind nicht im direkten Sichtfeld des Fahrers und nicht größer als etwa eine Zwei-Euro-Münze. Also: nicht abwarten, sondern die Werkstatt ansteuern.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/moderne-windschutzscheiben-mehr-als-nur-glas/", + "images": [], + "source": "https://www.promobil.de/rss/ratgeber", + "source_name": "ratgeber bei www.promobil.de", + "created_at": "2025-08-20T08:27:09.594421", + "word_count": 428 + }, + { + "id": "ed173e5a76d183f8c48be9c12aa40492", + "title": "Campingplatz Arendsee: Handlungsbedarf bei Dauercampern - AZ-Online", + "date": "2025-08-20T05:28:11Z", + "summary": "Im AZ-Interview spricht Stefan Zierke, Präsident des BVCD über seine Eindrücke vom Campingplatz am Arendsee.", + "text": "Im AZ-Interview spricht Stefan Zierke, Präsident des BVCD über seine Eindrücke vom Campingplatz am Arendsee.", + "tags": [], + "status": "Online", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.az-online.de/altmark/arendsee/campingplatz-arendsee-handlungsbedarf-bei-dauercampern-93891117.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3pMfHlZ-X_c1tydcMGsUKz", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-20T08:27:18.448435", + "word_count": 15 + }, + { + "id": "3b2aa107d09760cf00a6f640fe764e5f", + "title": "„Tante Henni“: Haslohs idyllischer Mini-Campingplatz an der A7 - Hamburger Abendblatt", + "date": "2025-08-20T05:02:49Z", + "summary": "... Campingplatz. Auf einem der kleinsten Campingplätze in Schleswig-Holstein: „Tante Henni“ liegt direkt an der A7 bei Hasloh und gehört Norbert ...", + "text": "... Campingplatz . Auf einem der kleinsten Campingplätze in Schleswig-Holstein: „Tante Henni“ liegt direkt an der A7 bei Hasloh und gehört Norbert ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.abendblatt.de/schleswig-holstein/norderstedt/article409752359/tante-henni-haslohs-idyllischer-mini-campingplatz-an-der-a7.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l1jr7kdJVDA3nrTWt9vaE", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-20T08:27:18.845648", + "word_count": 23 + }, + { + "id": "769e7a1829c56dbc2bfe481581b3fa8f", + "title": "Toter 13-Jähriger: Jetzt liegt das Obduktionsergebnis vor - MSN", + "date": "2025-08-19T20:43:42Z", + "summary": "August von einem Campingplatz bei Lohsa verschwunden und zwei Tage später tot aufgefunden worden. Danilo Dittrich © Danilo Dittrich. Der in der ...", + "text": "August von einem Campingplatz bei Lohsa verschwunden und zwei Tage später tot aufgefunden worden. Danilo Dittrich © Danilo Dittrich. Der in der ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/toter-13-j%25C3%25A4hriger-jetzt-liegt-das-obduktionsergebnis-vor/ar-AA1KIBko&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3WZAfu7i39_TT7qgG7OXgi", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-20T08:27:19.270955", + "word_count": 23 + }, + { + "id": "60f2e274af6f4ec1a175e07f96b70214", + "title": "Woran ein Campingplatz-Experte deutsche Urlauber direkt erkennt", + "date": "2025-08-19T20:28:53Z", + "summary": "Das ist auch das Erste, worauf ich achte, wenn ich auf einem Campingplatz ankomme“, verrät ein Camping-Experte vom ADAC.", + "text": "Das ist auch das Erste, worauf ich achte, wenn ich auf einem Campingplatz ankomme“, verrät ein Camping-Experte vom ADAC.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/woran-ein-campingplatz-experte-deutsche-urlauber-direkt-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3jJhVNzmOoLWdIEPL4NLUD", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-20T08:27:19.668465", + "word_count": 19 + }, + { + "id": "974a2be4fc1887bd8ea5abbc1926ceaa", + "title": "PicOli Light 2.0 im Praxistest: Vanlife-Grillaufsatz im Härtetest - Vanlifemag", + "date": "2025-08-20T02:58:54Z", + "summary": "Vanlife bedeutet Freiheit – aber in einem vollgepackten Camper zählt jeder Quadratzentimeter. Ein Grill für unterwegs muss daher klein, leicht und ...", + "text": "Vanlife bedeutet Freiheit – aber in einem vollgepackten Camper zählt jeder Quadratzentimeter. Ein Grill für unterwegs muss daher klein, leicht und ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/picoli-light-2-0-im-praxistest-vanlife-grillaufsatz-im-haertetest/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw1_sGi-W7VUoJmclmaolF5T", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305", + "source_name": "Google Alert – Vanlife", + "created_at": "2025-08-20T08:27:26.689217", + "word_count": 22 + }, + { + "id": "ea279103929d6ffc7e02e6ee44336399", + "title": "Einhell TE-COL 18/2 Li Kühlbox im Vanlife-Praxistest - vanlifemag.de", + "date": "2025-08-19T16:13:52Z", + "summary": "Vanlife-Fans kennen das Szenario: Man parkt den Camper am Ufer, will mit dem Boot hinaus oder am Strand liegen, aber wie bleiben die Getränke kühl?", + "text": "Vanlife -Fans kennen das Szenario: Man parkt den Camper am Ufer, will mit dem Boot hinaus oder am Strand liegen, aber wie bleiben die Getränke kühl?", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/einhell-te-col-18-2-li-kuehlbox-im-vanlife-praxistest/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw3Pcz_ZggLAFD6QGjl_LVMd", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305", + "source_name": "Google Alert – Vanlife", + "created_at": "2025-08-20T08:27:28.118595", + "word_count": 26 + }, + { + "id": "c943206eacf319e86fc3319c16bc326f", + "title": "Toyota Hilux mit Eigenbau-Wohnkabine - vanlifemag.de", + "date": "2025-08-19T06:40:18Z", + "summary": "Vanlife Serie · News · Vanlife Custom · Vanlife Dachzelt · Vanlife on Tour ... Meet and PeopleVanlife Custom. ·7 Minuten Lesedauer. Toyota Hilux mit ...", + "text": "Vanlife Serie · News · Vanlife Custom · Vanlife Dachzelt · Vanlife on Tour ... Meet and People Vanlife Custom. ·7 Minuten Lesedauer. Toyota Hilux mit ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/toyota-hilux-mit-eigenbau-wohnkabine/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw3EAfLd1L-OC7rE84KQDRCE", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305", + "source_name": "Google Alert – Vanlife", + "created_at": "2025-08-20T08:27:28.993662", + "word_count": 27 + }, + { + "id": "823d283e0a3d67e8e395a7029a10ea99", + "title": "Opel Corsa GSE Vision (2025): Elektro-Studie auf Lambo-Niveau - Autozeitung", + "date": "2025-08-19T23:20:27Z", + "summary": "Camping Life · Elektroautos · Motorsport · Neuheiten · Tuning · Test ... Schon kurz nach der Messe im September 2025 (hier alle Infos zur IAA ...", + "text": "Camping Life · Elektroautos · Motorsport · Neuheiten · Tuning · Test ... Schon kurz nach der Messe im September 2025 (hier alle Infos zur IAA ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.autozeitung.de/opel-corsa-gse-vision-gran-turismo-2025-elektro-studie-209130.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1HzJt6GJ0DkRsbYPmlqUee", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-20T08:27:32.818096", + "word_count": 27 + }, + { + "id": "3286bb2c672f7dd8a5ed82d1eed769f2", + "title": "IFA 2025: Jackery mit Solarneuheiten - Presseportal fair-NEWS", + "date": "2025-08-19T23:13:22Z", + "summary": "... Camping, auf Festivals oder bei Outdoor-Aktivitäten wünschen. Zugleich ... Wörtlich: Denn die neue Location direkt neben der Messe punktet ...", + "text": "... Camping , auf Festivals oder bei Outdoor-Aktivitäten wünschen. Zugleich ... Wörtlich: Denn die neue Location direkt neben der Messe punktet ...", + "tags": [], + "status": "Online", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.fair-news.de/3797899/ifa-2025-jackery-mit-solarneuheiten&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0dSlwjcVA83vgTV2l9TZ5-", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-20T08:27:33.268999", + "word_count": 22 + }, + { + "id": "238a279ff9dde4dec397a6b9bc4433be", + "title": "Gamescom 2025 in Köln: Harte Zeiten für die Spaßbranche - DER SPIEGEL", + "date": "2025-08-19T19:28:37Z", + "summary": "In Köln startet diesen Mittwoch die weltgrößte Spielemesse. Präsentiert werden Hunderte neue Games, doch die glitzernde Fassade täuscht: Viele ...", + "text": "In Köln startet diesen Mittwoch die weltgrößte Spielemesse . Präsentiert werden Hunderte neue Games, doch die glitzernde Fassade täuscht: Viele ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.spiegel.de/netzwelt/games/gamescom-2025-in-koeln-harte-zeiten-fuer-die-spassbranche-a-8c9bf6ff-7c79-4b41-a258-a8b0fe60c4f7&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3WHPfdQA9_GLb7dunmnB1a", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-20T08:27:33.707200", + "word_count": 21 + }, + { + "id": "2251e3248080e82de9e55a94c04386a9", + "title": "Videospiel-Messe in Köln: Gamescom 2025 – Parkplätze, Toiletten, Verpflegung", + "date": "2025-08-19T19:22:52Z", + "summary": "Videospiel-Messe in Köln: Gamescom 2025 – Parkplätze, Toiletten, Verpflegung ... Alternativ werden auch immer öfter Camping-Stühle mit aufs Gelände ...", + "text": "Videospiel- Messe in Köln: Gamescom 2025 – Parkplätze, Toiletten, Verpflegung ... Alternativ werden auch immer öfter Camping -Stühle mit aufs Gelände ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://rp-online.de/digitales/games/gamescom/videospiel-messe-in-koeln-gamescom-2025-parkplaetze-toiletten-verpflegung-v1_aid-24360691&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0gvygeAFwk9oOITrE1LeGY", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-20T08:27:34.185116", + "word_count": 22 + }, + { + "id": "874181c5247f0b46ce74e7adac501bd0", + "title": "Das sind die Spiele der gamescom 2025 - Fragster", + "date": "2025-08-19T17:02:04Z", + "summary": "Ubisoft (Halle 6). In Halle 6 wird Ubisoft mit dem Game Anno 117: Pax Romana vertreten sein, das ihr auf der Messe auch ausprobieren könnt. Die ...", + "text": "Ubisoft (Halle 6). In Halle 6 wird Ubisoft mit dem Game Anno 117: Pax Romana vertreten sein, das ihr auf der Messe auch ausprobieren könnt. Die ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.fragster.de/das-sind-die-spiele-der-gamescom-2025/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3zb8d-Ga08YcvwVYYzFYlH", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-20T08:27:34.603225", + "word_count": 27 + }, + { + "id": "8293e15aa1fe849859204f53b390bdd0", + "title": "5 Buchtipps für Campingfans: Spannende und lustige Bücher rund ums Camping", + "date": "Fri, 22 Aug 2025 14:00:00 +0200", + "summary": "

    Lesen bildet und macht Spaß. Wie gut, dass es so viele Bücher über unsere liebste Reiseform gibt. Hier kommen 5 Buchtipps übers Camping.

    ", + "text": "Camping-Liebhaber, die auf der Suche nach einer passenden Lesung sind, können aus einer breiten Auswahl an Büchern wählen, die alle Aspekte des Campings abdecken, von humorvollen bis zu politisch unkorrekten Themen. \n\nDas Buch \"Nicht ohne meinen Wohnwagen\" von Frauke Vonk erzählt die Geschichte der Familie Gerber, die sich zwischen einem Campingausflug und einem Hotelaufenthalt entscheiden muss. Die Abenteuer, die sie erleben, sind vielseitig und mit viel Humor geschildert. Das Buch ist als Taschenbuch für 9,99 Euro und als E-Book für 2,99 Euro erhältlich.\n\nEin weiteres Buch, \"Der CaraWahn kommt selten allein\" von Micha H. Echt, handelt von Oberamtsrat Klaus Dipendenti, der sich mit seiner Frau Gertrude auf ein Campingabenteuer begibt. Es kostet ab 11,80 Euro.\n\nBernd Stelters \"Der Tod hat eine Anhängerkupplung\" ist ein Krimi, der auf einem Campingplatz in Holland spielt. \n\nZum 75. Jahrestag des VW Bulli ist \"Bulli – eine Ikone feiert Geburtstag\" von Arne Olerth, Christian Schlüter und Heiko P. Wacker erschienen. Dieses Buch zeichnet die Geschichte des legendären VW Bulli nach und kostet 39,75 Euro. \n\nFür Reisebegeisterte, die Deutschland auf ungewöhnliche Weise erkunden möchten, bietet der Reiseführer \"Guck mal: Verrückte Orte in Deutschland\" von Marco Polo eine Sammlung von 222 ungewöhnlichen Reisezielen. Das Buch ist für 19,95 Euro erhältlich.", + "tags": [ + "Camping", + "Buchempfehlungen", + "Reiseliteratur", + "VW Bulli", + "Deutschland Reiseführer" + ], + "status": "Online", + "link": "https://www.promobil.de/tipps/lesestoff-buch-tipps-camping-freizeit/", + "images": [], + "source": "https://www.promobil.de/rss/ratgeber", + "source_name": "ratgeber bei www.promobil.de", + "created_at": "2025-08-24T10:10:21.750203", + "word_count": 203, + "rewritten_at": "2025-08-24T10:20:31.816662", + "wp_upload_date": "2025-08-24T10:21:40.901242", + "wp_post_id": 3450 + }, + { + "id": "a918d66ffa6ccae238d6410872ec769f", + "title": "Campingplätze, Stellplätze und mehr finden : „Stellplatz-Radar“-App bekommt neue Funktionen", + "date": "Thu, 21 Aug 2025 17:00:00 +0200", + "summary": "

    Mit den neuen Funktionen des Stellplatz-Radar finden Sie europaweit noch einfacher Ihren Wunschstellplatz für Campervan, Wohnmobil oder Wohnwagen. Erfahren Sie alles über das aktuelle Upgrade.

    ", + "text": "Die promobil-Stellplatz-Radar-App, die kostenfrei für Android und iPhones verfügbar ist, bietet Wohnmobilisten und Campern europaweit einfachen Zugang zu über 30.000 Stell- und Campingplätzen. Sie enthält detaillierte Informationen und Bilder der Plätze und über 170.000 Bewertungen von Nutzern. Zusätzliche Funktionen wie Tourenplanung, erweiterte Suchfilter, ein Offline-Modus und eine Favoriten- und Notizfunktion erweitern das Nutzererlebnis.\n\nIm August 2025 wird die App um zwei neue Funktionen erweitert. Der Active Camper Club ist ein Belohnungssystem, das Nutzer für ihre Beiträge zur App belohnt, wie das Melden neuer Stellplätze, das Verfassen von Bewertungen oder das Hochladen von Fotos. Ein neues personalisiertes Push-Benachrichtigungssystem versorgt die Nutzer gezielt mit relevanten Informationen.\n\nZusätzlich ist nun der Dark Mode verfügbar und die App ist auch auf Englisch und Französisch verfügbar. Durch eine Kooperation mit Energie-Rath können Nutzer nun auch Orte zum Gasflaschen-Tausch in der App finden. Eine neue Funktion ermöglicht es Nutzern, individuelle Camping-Touren zu erstellen und zu speichern.\n\nDie App bietet eine gewaltige Datenbank mit über 30.000 europaweiten Plätzen, die ständig aktualisiert wird. Alle Plätze werden von der promobil-Redaktion geprüft und erweitert. Die App präsentiert umfangreiche Beschreibungen der Stellplätze und bietet eine integrierte Suchfunktion, Karte und Ergebnisliste auf einer Seite.\n\nDie Basisfunktionen der App sind kostenlos, aber ein Plus-Abo für 2,99 Euro pro Monat oder 9,99 Euro pro Jahr bietet zusätzliche Funktionen wie erweiterte Suchfilter, Favoritenfunktion, Notizfunktion, Offline-Nutzung und werbefreie Nutzung.\n\nMit den erweiterten Suchfiltern können Nutzer ihre Suche personalisieren und die favorisierten Sucheinstellungen im Profil speichern. Die Favoritenfunktion ermöglicht es Nutzern, einzelne Plätze zu speichern und Notizen zu erstellen. Mit der Offline-Funktion haben Nutzer vollen Zugriff auf die Stellplatz-Datenbank, auch in Gebieten mit schlechtem Empfang oder im Ausland.", + "tags": [ + "Camping-App", + "Stellplatz-Suche", + "Tourenplanung", + "Belohnungssystem", + "Offline-Nutzung" + ], + "status": "Online", + "link": "https://www.promobil.de/tipps/download-stellplatz-radar-app-kostenlos/", + "images": [ + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:243/rt:fill/w:430/plain/2232522.jpg", + "alt": "Stellplatz-Radar-App", + "caption": "Stellplatz-Radar-App", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/download-stellplatz-radar-app-kostenlos/", + "width": 430, + "height": 243, + "title": "Stellplatz-Radar-App" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2232520.jpg", + "alt": "Stellplatz-Radar-App", + "caption": "Stellplatz-Radar-App", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/download-stellplatz-radar-app-kostenlos/", + "width": 430, + "height": 241, + "title": "Stellplatz-Radar-App" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2232521.jpg", + "alt": "Stellplatz-Radar-App", + "caption": "Stellplatz-Radar-App", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/download-stellplatz-radar-app-kostenlos/", + "width": 430, + "height": 241, + "title": "Stellplatz-Radar-App" + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2132175.jpg", + "alt": "Mit der Touren-Funktion können Sie Ihre ganz persönliche Reiseroute gestalten und Stell- und Campingplätze entlang der Route hinzufügen.", + "caption": "Mit der Touren-Funktion können Sie Ihre ganz persönliche Reiseroute gestalten und Stell- und Campingplätze entlang der Route hinzufügen.", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/download-stellplatz-radar-app-kostenlos/", + "width": 430, + "height": 241, + "title": "Mit der Touren-Funktion können Sie Ihre ganz persönliche Reiseroute gestalten und Stell- und Campingplätze entlang der Route hinzufügen." + }, + { + "url": "https://img.promobil.de/_/bg:FFFFFF/f:best/h:241/rt:fill/w:430/plain/2132222.jpg", + "alt": "Einfache Suche - entweder direkt über die Karte mit Preisorientierung durch verschiedene Farben oder in der Listenansicht mit mehr Details.", + "caption": "Einfache Suche - entweder direkt über die Karte mit Preisorientierung durch verschiedene Farben oder in der Listenansicht mit mehr Details.", + "copyright": "Unbekannt", + "copyright_url": "https://www.promobil.de/tipps/download-stellplatz-radar-app-kostenlos/", + "width": 430, + "height": 241, + "title": "Einfache Suche - entweder direkt über die Karte mit Preisorientierung durch verschiedene Farben oder in der Listenansicht mit mehr Details." + } + ], + "source": "https://www.promobil.de/rss/ratgeber", + "source_name": "ratgeber bei www.promobil.de", + "created_at": "2025-08-24T10:10:22.248640", + "word_count": 271, + "rewritten_at": "2025-08-24T10:20:56.786151", + "wp_upload_date": "2025-08-24T10:21:57.170006", + "wp_post_id": 3451 + }, + { + "id": "d24dd1ee8a2fd0d6109562216ef8b0c0", + "title": "Fast jeder Zweite träumt vom Van-Life / HEM-Umfrage zeigt: Das Fahrzeug wird immer häufiger zur mobilen Unterkunft", + "date": "Thu, 21 Aug 2025 10:00:11 +0200", + "summary": "Deutsche Tamoil GmbH: Hamburg (ots) - Für viele Menschen ist das Auto mehr als nur ein Fortbewegungsmittel. Es dient als Frühstücksplatz, als Rückzugsort für ruhige Momente oder als mobiles Stück Freiheit im Alltag. In Kombination mit Camper, Wohnmobil oder ...", + "text": "Deutsche Tamoil GmbH [ Newsroom ] Hamburg (ots) - Für viele Menschen ist das Auto mehr als nur ein Fortbewegungsmittel. Es dient als Frühstücksplatz, als Rückzugsort für ruhige Momente oder als mobiles Stück Freiheit im Alltag. In Kombination mit Camper, Wohnmobil oder ... Lesen Sie hier weiter... Original-Content von: Deutsche Tamoil GmbH, übermittelt durch news aktuell", + "tags": [], + "status": "Online", + "link": "https://www.presseportal.de/pm/67955/6101192", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil", + "created_at": "2025-08-24T10:10:27.600267", + "word_count": 56 + }, + { + "id": "5575dc4642083c14905572349ad2eec8", + "title": "TÜV-Verband: Neues Merkblatt zum Anbau von Solaranlagen an Wohnmobilen", + "date": "Wed, 20 Aug 2025 08:30:00 +0200", + "summary": "TÜV-Verband e. V.: Berlin (ots) - Konkrete Anforderungen an technische und elektrische Sicherheit: Das Merkblatt 769 bietet Orientierung für den sicheren Einbau nachgerüsteter Photovoltaikanlagen an Wohnmobilen. Hinweise für Selbstbauer und eine einheitliche ...", + "text": "20.08.2025 – 08:30 TÜV-Verband e. V. TÜV-Verband: Neues Merkblatt zum Anbau von Solaranlagen an Wohnmobilen Berlin (ots) Konkrete Anforderungen an technische und elektrische Sicherheit: Das Merkblatt 769 bietet Orientierung für den sicheren Einbau nachgerüsteter Photovoltaikanlagen an Wohnmobilen. Hinweise für Selbstbauer und eine einheitliche Prüfgrundlage für Sachverständige. Selbstausbau ein Thema bei der Wohnmobilmesse \"Caravan Salon Düsseldorf 2025\". Ob an der Küste, in den Bergen oder mitten im Nirgendwo: Wohnmobile ermöglichen unabhängiges Reisen. Damit Licht, Kühlschrank oder Wasserpumpe ohne Stromanschluss zuverlässig funktionieren, setzen Halter:innen immer häufiger auf Solarenergie. \"Die Installation einer Photovoltaikanlage am Fahrzeug ist eine praktikable Lösung, um elektrischen Strom autark und emissionsfrei zu erzeugen - vorausgesetzt, sie wird fachgerecht montiert\", sagt Frank Schneider, Referent für Fahrzeugtechnik beim TÜV-Verband. \"Sachverständige begegnen in der Praxis immer wieder abenteuerlichen Konstruktionen Marke Eigenbau, die grundlegende Sicherheitsanforderungen missachten.\" So können sich unzureichend befestigte oder ungeschützte Bauteile bei Bremsmanövern lösen oder verrutschen. Schneider: \"Kritisch sind falsch dimensionierte Kabel, fehlende Sicherungen oder thermische Überlastung. Das führt im schlimmsten Fall zu Kurzschlüssen oder Bränden.\" Gerade beim nachträglichen Einbau ist viel technisches Know-how gefragt. Welche Kabel dürfen verwendet werden? Wie müssen Module befestigt oder Batteriesysteme abgesichert sein? Welche An- und Umbauten sind überhaupt zulässig? Und was könnte später bei der Hauptuntersuchung beanstandet werden? Antworten liefert das neue Merkblatt 769 \"Photovoltaikanlagen in/an Fahrzeugen \" , das der TÜV-Verband jetzt veröffentlicht hat. Auch als Hilfe für den fachgerechten Einbau geeignet Das Merkblatt richtet sich in erster Linie an Sachverständige, die mit Einzelbegutachtungen, Änderungsabnahmen oder der Fahrzeugprüfung im Rahmen der Hauptuntersuchung betraut sind. Darüber hinaus enthält es fundierte Hinweise, die auch Selbstausbauenden helfen können, PV-Systeme fachgerecht und sicher zu installieren. \"Wer sich am Merkblatt orientiert, reduziert die Wahrscheinlichkeit teurer Nachbesserungen und erhöht die Chance, dass Umbauten bei der Begutachtung auf Anhieb bestehen\", sagt Schneider. Die wesentlichen Inhalte des Merkblatts sind unter anderem: Anforderungen an die elektrische Sicherheit, zum Beispiel Leitungsdimensionierung, Sicherungen, Elektromagnetische Verträglichkeit (EMV) Vorgaben zur mechanischen Befestigung von Modulen, Energiespeichern und Reglern Hinweise zu Masseverteilung, Brandschutz, Reflexionsverhalten und Dachlast Technische Regeln zu Kabelschutz, Verbindungstechnik und Isolationsüberwachung Verweise auf relevante Normen wie DIN VDE 0100-721, DIN EN 50618, UN-Regelungen Ergänzt wird das Merkblatt durch Hinweise zu Cybersicherheit, Software-Aktualisierung und Prüfgrundlagen bei Lithiumbatterien oder Hochvoltsystemen. Neues Merkblatt online verfügbar Das neue TÜV-Verband Merkblatt 769 \"Photovoltaikanlagen in/an Fahrzeugen\" ist ab sofort als digitale Version im Onlineshop des TÜV-Verbands erhältlich und kostet 24,90 Euro: https://ots.de/OmC1wB Ergänzend dazu ist weiterhin das TÜV-Verband Merkblatt 740 \"Anforderungen an die Fahrzeugart Wohnmobil\" verfügbar. Es beschreibt grundlegende technische Anforderungen für den Um- und Ausbau von Wohnmobilen. Das Merkblatt 740 ist als PDF-Version ebenfalls im Online-Shop des TÜV-Verbands abrufbar und kostet 42,64 Euro: https://ots.de/UNb8Vr Bei der weltweit größten Wohnmobilmesse \"Caravan Salon Düsseldorf 2025\" ist der Selbstausbau ebenfalls ein wichtiges Thema. Die Messe findet vom 29.8. bis 7.9.2025 in den Düsseldorfer Messehallen statt. Über den TÜV-Verband: Als TÜV-Verband e.V. vertreten wir die politischen Interessen der TÜV-Prüforganisationen und fördern den fachlichen Austausch unserer Mitglieder. Wir setzen uns für die technische und digitale Sicherheit sowie die Nachhaltigkeit von Fahrzeugen, Produkten, Anlagen und Dienstleistungen ein. Grundlage dafür sind allgemeingültige Standards, unabhängige Prüfungen und qualifizierte Weiterbildung. Unser Ziel ist es, das hohe Niveau der technischen Sicherheit zu wahren, Vertrauen in die digitale Welt zu schaffen und unsere Lebensgrundlagen zu erhalten. Dafür sind wir im regelmäßigen Austausch mit Politik, Behörden, Medien, Unternehmen und Verbraucher:innen. Pressekontakt: Maurice Shahd Pressesprecher TÜV-Verband e. V. Friedrichstraße 136 | 10117 Berlin 030 760095-320, presse@tuev-verband.de www.tuev-verband.de | www.linkedin.com/company/tuevverband | www.x.com/tuevverband Original-Content von: TÜV-Verband e. V., übermittelt durch news aktuell", + "tags": [], + "status": "Online", + "link": "https://www.presseportal.de/pm/65031/6100268", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil", + "created_at": "2025-08-24T10:10:28.393900", + "word_count": 576 + }, + { + "id": "81910bea0e1aeeafba88d6ea1036a19f", + "title": "Camping auf Schloss Sigrön: Natururlaub mit Stil in Brandenburg - AUTO BILD", + "date": "2025-08-24T07:20:25Z", + "summary": "Svenja und Wolfgang Schwarte haben sich einen Lebenstraum erfüllt. Sie betreiben einen Premium-Campingplatz mit angeschlossenem Schlosshotel.", + "text": "Svenja und Wolfgang Schwarte haben sich einen Lebenstraum erfüllt. Sie betreiben einen Premium- Campingplatz mit angeschlossenem Schlosshotel.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.autobild.de/artikel/luxus-camping-auf-schloss-sigroen-28240471.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zNVAffLcLpjFYvlSTrl2J", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:33.138310", + "word_count": 17 + }, + { + "id": "58cf4e6b43850569474a49c39fcc1e9b", + "title": "Baden-Württemberg punktet mit einem der schönsten Wellness-Campingplätze - FNP", + "date": "2025-08-24T07:13:58Z", + "summary": "Ein idyllischer Campingplatz bringt Erholungssuchende und Naturfreunde ins Schwärmen. Was ihn so besonders macht, bleibt oft verborgen.", + "text": "Ein idyllischer Campingplatz bringt Erholungssuchende und Naturfreunde ins Schwärmen. Was ihn so besonders macht, bleibt oft verborgen.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.fnp.de/deutschland/wellness-campingplatz-schoenster-europas-baden-wuerttemberg-schwarzwaelder-hof-zr-93897610.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0B3Cmtfk2_cSBV9jpW2E29", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:33.682516", + "word_count": 17 + }, + { + "id": "e998a1d9032abed613030c32ae76073d", + "title": "Bleibt häufig unbemerkt: Problematischer Trend bei Schulausflügen breitet sich aus", + "date": "2025-08-24T06:08:48Z", + "summary": "Wir müssen genau hinschauen“: Bildungsexpertinnen schlagen Alarm wegen einer problematischen Entwicklung an deutschen Schulen.", + "text": "Wir müssen genau hinschauen“: Bildungsexpertinnen schlagen Alarm wegen einer problematischen Entwicklung an deutschen Schulen.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bleibt-haeufig-unbemerkt-problematischer-trend-bei-schulausfluegen-breitet-sich-aus-zr-93893032.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0gk8c4QL1MtBwuHQJQHYXL", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:34.216335", + "word_count": 14 + }, + { + "id": "83432be9d34fa9ac40ff4aa2d6bf5e68", + "title": "Falkensteiner Favorit - Containerdorf als Nächtigungskrösus Klagenfurts | krone.at", + "date": "2025-08-24T06:01:10Z", + "summary": "Ein großes Containerdorf ist der größte Nächtigungsbringer von Klagenfurt, trotz einiger Handicaps wird heuer am Campingplatz im Strandbad mit ...", + "text": "Ein großes Containerdorf ist der größte Nächtigungsbringer von Klagenfurt, trotz einiger Handicaps wird heuer am Campingplatz im Strandbad mit ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.krone.at/3876891&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1woffiV_WLFd90nrB2FkoT", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:34.711550", + "word_count": 20 + }, + { + "id": "3845519e77f66b40f1320322ed6ab24d", + "title": "Markanter Umschwung steht bevor – Am 27. August dreht sich das Wetter erneut", + "date": "2025-08-24T05:44:32Z", + "summary": "Im Süden prasselten enorme Regenmengen herab, doch schon bald kündigt sich landesweit Hitze statt Nässe an. Eine Wetter-Kolumne von Dominik Jung.", + "text": "Im Süden prasselten enorme Regenmengen herab, doch schon bald kündigt sich landesweit Hitze statt Nässe an. Eine Wetter-Kolumne von Dominik Jung.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/sich-das-wetter-erneut-naechster-markanter-umschwung-bevor-am-27-august-dreht-zr-93893449.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ML-ydsKFV3aAS_kW-OJoY", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:35.267824", + "word_count": 21 + }, + { + "id": "05f130760242e46d7a99bdceeaa8444a", + "title": "Reportage: Sommerparadies Bodensee - Camping in Gohren - SWR Aktuell", + "date": "2025-08-24T05:42:52Z", + "summary": "Den Alltagssorgen entkommen, ohne weite Reise - das genießen die Camper in Gohren. Eine Dokumentation über das Leben auf einem Campingplatz.", + "text": "Den Alltagssorgen entkommen, ohne weite Reise - das genießen die Camper in Gohren. Eine Dokumentation über das Leben auf einem Campingplatz .", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/sommerparadies-bodensee-dokumentation-vom-campingplatz-gohren-bei-kressbronn-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3dRHXspfNHNEiPRBrJOeLi", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:35.821875", + "word_count": 22 + }, + { + "id": "b0808a4fa0b30ec9e77e110bf2b92348", + "title": "Im Video: Wie Nadine Zappe Marmeladenglasmomente auf ihrem Campingplatz schafft", + "date": "2025-08-24T04:16:58Z", + "summary": "Mitten in Nordschleswig bei Fohl liegt der kleine Campingplatz „Hyggelake“ von Nadine Zappe. Was ihr wichtig ist, was die Gäste mitnehmen sollen ...", + "text": "Mitten in Nordschleswig bei Fohl liegt der kleine Campingplatz „Hyggelake“ von Nadine Zappe. Was ihr wichtig ist, was die Gäste mitnehmen sollen ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.nordschleswiger.dk/de/nordschleswig-hadersleben/im-video-wie-nadine-zappe-marmeladenglasmomente-ihrem-campingplatz&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0GFYeBShFgu1NUoM6G-5G_", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:36.379110", + "word_count": 23 + }, + { + "id": "7f6ad6659c1a44c13447cec63edd4ec7", + "title": "Hund bei Eisenhüttenstadt: Badestellen in der Region – wo Hunde erlaubt sind - MOZ.de", + "date": "2025-08-24T04:09:03Z", + "summary": "Hundefreundlicher Campingplatz am Schervenzsee. Die Betreiber sorgen ... „Wir haben hier am See viele schöne Buchten, die man vom Campingplatz aus in ...", + "text": "Hundefreundlicher Campingplatz am Schervenzsee. Die Betreiber sorgen ... „Wir haben hier am See viele schöne Buchten, die man vom Campingplatz aus in ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.moz.de/lokales/eisenhuettenstadt/hund-in-eisenhuettenstadt-badestellen-in-der-region-wo-hunde-erlaubt-sind-78262165.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0AJpWSxdJOcPug6TRkVtzZ", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:36.921360", + "word_count": 23 + }, + { + "id": "33de9b70798ddaf3fdeed4599c873b43", + "title": "Beliebtes Medikament löst Krebs aus – Forschende entschlüsseln rätselhaften Mechanismus", + "date": "2025-08-24T02:34:02Z", + "summary": "Das Brustkrebs-Medikament Tamoxifen kann – selten – Gebärmutterkrebs auslösen. Das haben Forschende der Berliner Charité festgestellt.", + "text": "Das Brustkrebs-Medikament Tamoxifen kann – selten – Gebärmutterkrebs auslösen. Das haben Forschende der Berliner Charité festgestellt.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/brustkrebs-medikament-loest-gebaermutterkrebs-forschende-entschluesseln-raetselhaften-mechanismus-93897055.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw29FN0GWoPTgcf0krxruWOo", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:37.474633", + "word_count": 16 + }, + { + "id": "c5e0bc2bb58c41606a891ba4d194d747", + "title": "Massive Unwetter an Adria-Küste: Sintflutartige Regenfälle, Hagel und Sturm über Italien ...", + "date": "2025-08-24T01:36:36Z", + "summary": "Heftige Gewitter und Starkregen sorgen am Mittelmeer für Chaos. Besonders Norditalien und Kroatien sind betroffen. Eine Wetter-Kolumne von Dominik ...", + "text": "Heftige Gewitter und Starkregen sorgen am Mittelmeer für Chaos. Besonders Norditalien und Kroatien sind betroffen. Eine Wetter-Kolumne von Dominik ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/und-sturm-ueber-italien-und-kroatien-massive-unwetter-an-adria-kueste-sintflutartige-regenfaelle-hagel-zr-93892020.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1nftLRtaIVhcLaTEABSHrB", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:37.980803", + "word_count": 20 + }, + { + "id": "3fcb40d40dc501e5afaec4329c389ac7", + "title": "Hurrikan Erin rast über Atlantik – Überreste bescheren Europa völlig neues August-Wetter", + "date": "2025-08-24T01:36:35Z", + "summary": "Hurrikan Erin sorgt für Schlagzeilen. Seine Überreste könnten das Wetter in Europa entscheidend beeinflussen. Eine Wetter-Kolumne von Dominik ...", + "text": "Hurrikan Erin sorgt für Schlagzeilen. Seine Überreste könnten das Wetter in Europa entscheidend beeinflussen. Eine Wetter-Kolumne von Dominik ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/ueberreste-bescheren-europa-voellig-neues-august-wetter-hurrikan-erin-rast-ueber-atlantik-zr-93891473.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3MwCg1CMlAsF_p3SDGs51a", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:38.630745", + "word_count": 19 + }, + { + "id": "6de9e7ba5a7fb8a81105060ddbd12e78", + "title": "Grabenstätt: Urlauberin verletzt sich bei Auffahrunfall - Bayernwelle", + "date": "2025-08-24T01:36:25Z", + "summary": "Eine 55-jährige Urlauberin wollte heute mit ihrem BMW von der Staatstraße 2096 bei Unterhochstätt in Richtung Campingplatz abbiegen.", + "text": "Eine 55-jährige Urlauberin wollte heute mit ihrem BMW von der Staatstraße 2096 bei Unterhochstätt in Richtung Campingplatz abbiegen.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.bayernwelle.de/grabenstaett-urlauberin-verletzt-sich-bei-auffahrunfall-181471/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zpwbOIg41UNO80I-NPAJa", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:39.345708", + "word_count": 18 + }, + { + "id": "9c4b55dce8b40f9bc14133d4c0c2a9d2", + "title": "Größter Campingplatz Europas knietief unter Wasser – Deutsche kennen ihn aus TV-Show", + "date": "2025-08-23T22:10:36Z", + "summary": "Heftige Gewitter haben Europas größten Campingplatz in Italien zeitweise überflutet. Straßen und Stellplätze standen unter Wasser.", + "text": "Heftige Gewitter haben Europas größten Campingplatz in Italien zeitweise überflutet. Straßen und Stellplätze standen unter Wasser.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/groesster-campingplatz-europas-knietief-unter-wasser-deutsche-kennen-ihn-aus-tv-show-93897475.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2oJIq2dgPq8t0LP0XDZdKi", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:39.991347", + "word_count": 16 + }, + { + "id": "b1f07af140efc6604b309880a9f40355", + "title": "Größter Campingplatz Europas knietief unter Wasser – Deutsche kennen ihn aus TV-Show", + "date": "2025-08-23T18:48:59Z", + "summary": "Das bewiesen auch die Urlauber auf dem Campingplatz Marina di Venezia als heftige Gewitter den größten Campingplatz Europas kurzzeitig in ein ...", + "text": "Das bewiesen auch die Urlauber auf dem Campingplatz Marina di Venezia als heftige Gewitter den größten Campingplatz Europas kurzzeitig in ein ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/welt/groesster-campingplatz-europas-knietief-unter-wasser-deutsche-kennen-ihn-aus-tv-show-93897439.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0jViaY7obKQso9Kan2s9bu", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:40.627693", + "word_count": 22 + }, + { + "id": "3dfc609c0dc9d469c7bff5ab8f075e68", + "title": "Kroatien: Unwetter nach spektakulärer Wolkenfront an Adria-Küste schocken Camper", + "date": "2025-08-23T17:54:13Z", + "summary": "Blitze, Überflutung, Stromausfall - die starken Unwetter in der Nacht auf Donnerstag haben einen Campingplatz in Kroatien beinahe verwüstet.", + "text": "Blitze, Überflutung, Stromausfall - die starken Unwetter in der Nacht auf Donnerstag haben einen Campingplatz in Kroatien beinahe verwüstet.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.wa.de/welt/unwetter-verwuesten-campingplaetze-in-kroatien-spektakulaere-wolkenfront-ueber-adria-kueste-sind-abgereist-93896644.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1A80We_i-8fwM_o4mV4XtR", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:41.124428", + "word_count": 19 + }, + { + "id": "2c34cb6ec948fdc63468b385c3915e9e", + "title": "Campingplatz am Nidda-Stausee mit guter sehr Auslastung - FNP", + "date": "2025-08-23T17:15:01Z", + "summary": "Wir haben in diesem Jahr eine sehr zufriedenstellende Auslastung«, sagt Platzwart Oliver Petermann. Der städtische Campingplatz am Nidda-Stausee ...", + "text": "Wir haben in diesem Jahr eine sehr zufriedenstellende Auslastung«, sagt Platzwart Oliver Petermann. Der städtische Campingplatz am Nidda-Stausee ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.fnp.de/lokales/wetteraukreis/campingplatz-am-nidda-stausee-mit-guter-sehr-auslastung-93896554.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2kxM3SOZlO-z81GBidTt9J", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:41.673070", + "word_count": 19 + }, + { + "id": "d880e9c03a550dd7923f3d8babfae686", + "title": "Ein beliebter DDR-Campingplatz auf Ostsee-Insel könnte verschwinden - Nordkurier", + "date": "2025-08-23T16:57:53Z", + "summary": "Jedes Jahr brechen meterweise Düne auf der Ostsee-Insel Usedom ab. Ein Campingplatz aus DDR-Zeiten ist jetzt in ernsthafter Gefahr.", + "text": "Jedes Jahr brechen meterweise Düne auf der Ostsee-Insel Usedom ab. Ein Campingplatz aus DDR-Zeiten ist jetzt in ernsthafter Gefahr.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.nordkurier.de/regional/usedom/dieser-beliebte-ddr-campingplatz-auf-ostsee-insel-koennte-verschwinden-3838218&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3O6pcTG4aS_ju-I0Zfu9Qo", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:42.295200", + "word_count": 19 + }, + { + "id": "eeb9a5e10f7ce41a4d2b73e0c3fed059", + "title": "Unfall auf Campingplatz bei Cavallino - jesolo-magazin.com", + "date": "2025-08-23T16:52:35Z", + "summary": "Unfall auf Campingplatz bei Cavallino. Ein Urlaubstag am Meer nahm für eine Familie in Cavallino eine dramatische Wendung. Am Samstagmittag.", + "text": "Unfall auf Campingplatz bei Cavallino. Ein Urlaubstag am Meer nahm für eine Familie in Cavallino eine dramatische Wendung. Am Samstagmittag.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://jesolo-magazin.com/unfall-auf-campingplatz-bei-cavallino/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw13Q4Q-rLFodoIaqrD3ZobU", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:43.016555", + "word_count": 20 + }, + { + "id": "25e8840a98191fcd67791f7897fb0dd4", + "title": "„Drei Nächte durchvisioniert“: Freystädter Paar verliebt sich in Campingplatz in Thüringen", + "date": "2025-08-23T14:58:41Z", + "summary": "Freystadt - Mit Eisbaden, Sauna und Wildcamping-Gefühl: Andreas aus Freystadt und Stella aus Österreich haben die Fellbergbaude in Thüringen ...", + "text": "Freystadt - Mit Eisbaden, Sauna und Wildcamping-Gefühl: Andreas aus Freystadt und Stella aus Österreich haben die Fellbergbaude in Thüringen ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.nn.de/region/neumarkt/drei-nachte-durchvisioniert-freystadter-paar-verliebt-sich-in-campingplatz-in-thuringen-1.14802417&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1vOac9UH70ipnEbOKDZ0De", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:43.542783", + "word_count": 20 + }, + { + "id": "9bfb59307bd05399d013e99cbf8221ab", + "title": "Schwimmbad und Campingplatz: Mieses Wetter, mieses Geschäft? - Badische Zeitung", + "date": "2025-08-23T14:11:47Z", + "summary": "Es ist ein richtiger Schaukelsommer: Mal superheiß, dann wieder lange Perioden mit Regenwetter. Was macht das, mit denen, die auf schönes Wetter ...", + "text": "Es ist ein richtiger Schaukelsommer: Mal superheiß, dann wieder lange Perioden mit Regenwetter. Was macht das, mit denen, die auf schönes Wetter ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.badische-zeitung.de/schwimmbad-und-campingplatz-mieses-wetter-mieses-geschaeft&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ztU82SEKVMrArG_bbQbUi", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T10:10:44.066716", + "word_count": 23 + }, + { + "id": "ff59b9d1a1fcb27e80e345259469b262", + "title": "In Düsseldorf schlägt das „Herz des Caravanings“ - Niederrhein Nachrichten", + "date": "2025-08-23T16:40:34Z", + "summary": "Dachzelte gehören zu den absoluten Top-Trends im Camping- und Caravaningbereich. 23. August 2025 Von NN-Online · Was läuft am Niederrhein. In ...", + "text": "Dachzelte gehören zu den absoluten Top-Trends im Camping - und Caravaningbereich. 23. August 2025 Von NN-Online · Was läuft am Niederrhein. In ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.niederrhein-nachrichten.de/nachrichten/in-duesseldorf-schlaegt-das-herz-des-caravanings-11957.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11bSejssd9woRFps5qaXVQ", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-24T10:10:49.311133", + "word_count": 23 + }, + { + "id": "2b741f52eb4a69912829f8bcb8fde1a9", + "title": "Wanderin stürzt in Inzigkofen in Felsspalte und verletzt sich schwer - SWR", + "date": "2025-08-24T09:56:44Z", + "summary": "Mit einer Seilwinde und einem Hubschrauber konnte die Frau geborgen werden. Sanitäter brachten die schwer Verletzte in ein Krankenhaus. Die 69-Jährige ...", + "text": "Mit einer Seilwinde und einem Hubschrauber konnte die Frau geborgen werden. Sanitäter brachten die schwer Verletzte in ein Krankenhaus. Die 69-Jährige ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/rettungseinsatz-verunfallte-wanderin-auf-gespaltenem-felsen-in-inzigkofen-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1gMED6SXGchOupYUXtrmm5", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T12:35:03.563054", + "word_count": 22 + }, + { + "id": "c249d33d9ba4bbeaaf4a4d7137358345", + "title": "Feuerwehr-Großeinsatz: Brand auf Campingplatz - Waldsee/Altrip - DIE RHEINPFALZ", + "date": "2025-08-24T09:55:03Z", + "summary": "Waldsee / Altrip Feuerwehr-​Großeinsatz: Brand auf Campingplatz. Ein Carport ist in der ...", + "text": "Waldsee / Altrip Feuerwehr-​Großeinsatz: Brand auf Campingplatz . Ein Carport ist in der ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.rheinpfalz.de/lokal/rhein-pfalz-kreis_artikel,-feuerwehr-gro%25C3%259Feinsatz-brand-auf-campingplatz-_arid,5805271.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1TSMKiXF4mmTlvxWL7YX5l", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T12:35:04.125673", + "word_count": 14 + }, + { + "id": "102121e46fffde7e044b9dd6da6da4b4", + "title": "Campingplatz Rheinblick in Baumberg: Beliebte Anlage stets ausgebucht - ANTENNE NRW", + "date": "2025-08-24T09:15:02Z", + "summary": "Der Campingplatz Rheinblick in Baumberg ist im Sommer heiß begehrt und bietet familienfreundliche Preise. Idyllische Anlage am Rhein.", + "text": "Der Campingplatz Rheinblick in Baumberg ist im Sommer heiß begehrt und bietet familienfreundliche Preise. Idyllische Anlage am Rhein.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://antenne.nrw/nrw/campingplatz-rheinblick-in-baumberg-beliebte-anlage-stets-ausgebucht/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2SXFc61ANwrL7rZl7c_Nfl", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T12:35:04.835998", + "word_count": 18 + }, + { + "id": "4cd714fb0cc8437c3def63c987195c12", + "title": "Bauernregeln für den September 2025: Prognose im 100-jährigen Kalender hat es in sich", + "date": "2025-08-24T09:10:43Z", + "summary": "Nach dem Sommer hoffen viele auf einen goldenen September. Bauernregeln und der 100-jährige Kalender haben konkrete Wetterprognosen.", + "text": "Nach dem Sommer hoffen viele auf einen goldenen September. Bauernregeln und der 100-jährige Kalender haben konkrete Wetterprognosen.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bauernregeln-fuer-den-september-2025-prognose-im-100-jaehrigen-kalender-hat-es-in-sich-93896711.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3Kgg_g2rdEMvf_9AOgPtGj", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T12:35:05.355973", + "word_count": 17 + }, + { + "id": "2dc35d950a53c567623dffc698037a16", + "title": "Kirche auf dem Campingplatz - Erzbistum Freiburg", + "date": "2025-08-24T06:01:06Z", + "summary": "Kirche auf dem Campingplatz. 24.08.2025 |. Es ist Urlaubszeit. Und so machen sich die Mitarbeiter der Kirche auf den Weg zu den Campingplätzen der ...", + "text": "Kirche auf dem Campingplatz . 24.08.2025 |. Es ist Urlaubszeit. Und so machen sich die Mitarbeiter der Kirche auf den Weg zu den Campingplätzen der ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.ebfr.de/detail/nachricht/id/227960-kirche-auf-dem-campingplatz/%3Fcb-id%3D12338393&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l9x3XKrza6eMUdU7OgV2Y", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T12:35:07.057253", + "word_count": 26 + }, + { + "id": "d0643ad00e504089ac7584fe71855001", + "title": "Letzter Ausweg Campingplatz - Flucht aus der Großstadt - Programme TV ce soir - Télérama", + "date": "2025-08-24T06:00:29Z", + "summary": "Großstadtflucht statt Dauerstress: Immer mehr Menschen tauschen Lärm und Unsicherheit gegen ein Leben als Dauercamper auf dem Campingplatz. Auf der ...", + "text": "Großstadtflucht statt Dauerstress: Immer mehr Menschen tauschen Lärm und Unsicherheit gegen ein Leben als Dauercamper auf dem Campingplatz . Auf der ...", + "tags": [], + "status": "Online", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://television.telerama.fr/tele/documentaire/letzter-ausweg-campingplatz-flucht-aus-der-gro-stadt-1-386085864.php&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0yphKSHd_DWg5hgH0yY59p", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T12:35:07.690889", + "word_count": 22 + }, + { + "id": "7074a4ca8418e0f5bd5902b8f25bbb29", + "title": "Campingfreunde: Schauspielkomödie im Theater Fabelhaft - Lübeck live", + "date": "2025-08-24T11:49:28Z", + "summary": "Doch leider hat er die Rechnung ohne den skrupellosen Baulöwen Sebastian von Falkenstein (Simon Hillebrand) gemacht. Der hat mit dem Campingplatz ...", + "text": "Doch leider hat er die Rechnung ohne den skrupellosen Baulöwen Sebastian von Falkenstein (Simon Hillebrand) gemacht. Der hat mit dem Campingplatz ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.hl-live.de/text.php%3Fid%3D174396&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw249DjhpXTHiYIncHlUdDPR", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T14:52:20.474592", + "word_count": 22 + }, + { + "id": "7b3d1ba80058f4c59305d3169f789fad", + "title": "„Unumgänglich“: Insolvenz zwingt beliebtes Nordsee-Bad zur Schließung – zwei weitere wackeln", + "date": "2025-08-24T10:45:07Z", + "summary": "In den kommenden Wochen soll ein tragfähiges Konzept entstehen, das dem Bad und dem angeschlossenen Campingplatz eine Zukunft sichert.", + "text": "In den kommenden Wochen soll ein tragfähiges Konzept entstehen, das dem Bad und dem angeschlossenen Campingplatz eine Zukunft sichert.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.hna.de/niedersachsen/schluss-trotz-insolvenz-nach-kosten-explosion-beliebte-baeder-an-der-nordsee-bangen-fuer-eins-ist-endgueltig-93897627.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0az_FaAh6V7hKPgd8NUW8L", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T14:52:21.259632", + "word_count": 19 + }, + { + "id": "dce734092d6e2f55b57deadebf1672c7", + "title": "Die Ruheoase im stillen Inselwinkel: So geht es auf dem ersten Campingplatz auf Mallorca zu", + "date": "2025-08-24T10:39:30Z", + "summary": "Wobei der Terminus Campingplatz für das, was angelegt wurde, etwas zu hochgegriffen ist: Toiletten gibt es nicht, einen Kiosk, eine Rasenfläche mit ...", + "text": "Wobei der Terminus Campingplatz für das, was angelegt wurde, etwas zu hochgegriffen ist: Toiletten gibt es nicht, einen Kiosk, eine Rasenfläche mit ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.mallorcamagazin.com/nachrichten/tourismus/2025/08/24/141169/die-ruheoase-stillen-inselwinkel-geht-auf-dem-ersten-campingplatz-auf-mallorca-zu.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3xWU_Q-zQrsTo6QcL_jTJN", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T14:52:21.772703", + "word_count": 23 + }, + { + "id": "eec2a6784ddaf34b33337000966463d9", + "title": "Geplanter Karten-Zwang sorgt für dicke Luft an der Ostsee - Nordkurier", + "date": "2025-08-24T10:14:45Z", + "summary": "... Campingplatz auf Ostsee-Insel könnte verschwinden. Akut gefährdet. Dieser beliebte DDR-Campingplatz auf Ostsee-Insel könnte verschwinden. q Zempin.", + "text": "... Campingplatz auf Ostsee-Insel könnte verschwinden. Akut gefährdet. Dieser beliebte DDR- Campingplatz auf Ostsee-Insel könnte verschwinden. q Zempin.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.nordkurier.de/regional/mecklenburg-vorpommern/geplanter-karten-zwang-sorgt-fuer-dicke-luft-an-der-ostsee-3864013&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1uwWy7IibmrXt4TIIcCHuT", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T14:52:22.301490", + "word_count": 18 + }, + { + "id": "f4a7aa8e51b6ca3570965088ebe1a5e7", + "title": "Loch Ness in Schottland: Kind auf Campingplatz sexuell missbraucht - MSN", + "date": "2025-08-24T10:11:02Z", + "summary": "Vor 3 Wo. Auf Campingplatz. Unbekannter missbraucht Urlauber-Kind am berüchtigten Loch Ness.", + "text": "Vor 3 Wo. Auf Campingplatz . Unbekannter missbraucht Urlauber-Kind am berüchtigten Loch Ness.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/loch-ness-in-schottland-kind-auf-campingplatz-sexuell-missbraucht/ar-AA1JLKJo&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1Jv92jULmjoLLuKh5FsN1C", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-24T14:52:22.825563", + "word_count": 13 + }, + { + "id": "7a579e6e85e2ac494008f2fde2bcfd0d", + "title": "Hörstein feiert 400 Jahre Pestwunder - Primavera24.de", + "date": "2025-08-24T09:43:31Z", + "summary": "Hörstein feiert 400 Jahre Pestwunder. 24.08.2025, 10:48 Uhr in Kreis Aschaffenburg. Symbolbild Heiliger. ALZENAU HÖRSTEIN. Vor genau 400 Jahren ...", + "text": "Hörstein feiert 400 Jahre Pestwunder. 24.08. 2025 , 10:48 Uhr in Kreis Aschaffenburg. Symbolbild Heiliger. ALZENAU HÖRSTEIN. Vor genau 400 Jahren ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.primavera24.de/aktuelles/news/hoerstein-feiert-400-jahre-pestwunder&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2ZPN_Php6BmAsnv-79P-zZ", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-24T14:52:32.784324", + "word_count": 22 + }, + { + "id": "5addbde3367ba80d9f3563fb191ca2ac", + "title": "VWN feiert 20 Jahre California \nBeach und zeigt Sondermodell", + "date": "Wed, 27 Aug 2025 00:00:00 +0200", + "summary": "Premiere: Sondermodell \n„California Energy“", + "text": "Volkwagen Nutzfahrzeuge (VWN) feiert 20 Jahre California Beach. Das Schweizer Taschenmesser der VW Bus-Welt ist ein Crossover aus Multivan und California. Perfekt auf den privaten wie geschäftlichen Alltag zugeschnitten und permanent in Stand-by für den Trip ins Wochenende oder gar um die halbe Welt. 2005 kam die erste Generation des Allrounders auf den Markt – zunächst unter der Bezeichnung Multivan Beach; seit 2007 wird er als California Beach angeboten. Heute ist die mittlerweile dritte Generation im Handel. Perfektes Timing: Zum Jubiläum der Reisemobil-Ikone wird Volkswagen Nutzfahrzeuge auf dem Caravan-Salon (29.08 bis 07.09.2025) in Düsseldorf eine besonders attraktive neue Version des Bestsellers vorstellen: das Sondermodell „Beach Camper Energy“ mit Serien-Features wie Standheizung, Markise, 17-Zoll-Leichtmetallrädern und einem Preisvorteil von bis zu 4.600 Euro . Hier sind alle Fakten zur Geschichte des „Beach“ und erste Details zum neuen Sondermodell, dessen Vorverkauf bereits im Rahmen des Caravan Salons starten wird: 2005 – „BEACH“ AUF BASIS DES T5 Endless-summer-Feeling: Im Sommer 2005 überraschte Volkswagen Nutzfahrzeuge die Bulli-Community mit ersten Fakten und Fotos zum neuen Multivan Beach. Die markante Optik des Weltpremieren-Fahrzeugs war selbst mit der dunkelsten Sonnenbrille unverkennbar: Eine umlaufende Folierung im leuchtenden „Sundown Orange“ auf der in „Offroad Grey Metallic“ lackierten Karosserie machte sofort Lust auf einen Abstecher an den nächsten Strand. Farblich und thematisch perfekt darauf abgestimmt waren die zwei Surfboards, die der Fotowagen auf dem Dachgepäckträger transportierte – das Spiegelbild einer automobilen Lebenseinstellung, die auch heute noch jeden Bulli umweht. Entscheidend war 2005, dass auch der Multivan Beach rein faktisch und funktional einlöste, war er optisch versprach: Mit einem bis in das kleinste Detail durchdachten Innenraum, in dem die Features eines multivariablen Alltagsautos und eines Reisemobils zu einer neuen Modellversion mit Kultpotenzial verschmolzen: dem Crossover aus Multivan und California als flexibler Einstieg in die Welt der Camper. Modularer Raum zum Reisen: Vorausgegangen waren dem Serienmodell zwei Fahrzeugstudien, die Volkswagen Nutzfahrzeuge auf dem Caravan-Salon 2004 vorgestellt hatte: California Beach und California Tramper – zwei Reisemobile mit konzeptioneller Nähe zum Multivan. Die im Rahmen der Messe und weiterer Marktstudien befragen Besucher respektive Bulli-Fahrer votierten eindeutig für die an Bord der California Beach-Studie realisierten Lösungen. „Diese Studie auf der Basis des Transporters mit Flachdach“, so Volkswagen im Jahr 2004, „greift einen konstruktiven Gedanken aus der Frühzeit der mobilen Freizeit auf: Schon Anfang der 50er Jahre wurde der VW Bus zusammen mit der herausnehmbaren Campingbox zum Inbegriff der Reisemobile.“ Das modular aufgebaute Interieur des Concept Cars griff genau diesen Konzeptansatz eines clever zum Camper erweiterten VW Bus auf und interpretierte ihn neu. Bereits im Folgejahr kam die Serienversion der heutigen Reisemobil-Ikone, wie skizziert zuerst als Multivan Beach, auf den Markt – mit durchschlagendem Erfolg. Clever durchdachter Camper: Der „Beach“ überzeugte auf Anhieb mit seinem konstruktiv konsequent durchdachten Interieur. Die Basis für den modularen Aufbau des Campers lieferte ein Schienensystem im Innenraumboden hinter den Vordersitzen. Dort arretiert war die aus dem California mit integrierter Küchenzeile bereits bekannte Rücksitzbank. Um sie in ein bequemes Bett für zwei Personen zu verwandeln, wurde die Zweierbank mit einem Griff nach vorn gezogen und die Lehne umgeklappt. Die einteilige Rücklehne der Bank ging dabei in die als Bettverlängerung konzipierte Laderaum-Abdeckung über. Auf der Beifahrerseite hatten die findigen Konstrukteure aus Hannover zudem einen Staukasten integriert, der ebenfalls mit einer Polsterfläche ausgestattet war. So entstand eine 2.000 mm lange Liegefläche, die bequem zwei Personen Platz bot. Das Bettzeug und Campingzubehör fand in den herausnehmbaren Boxen des Staukastens und der Rücksitzbank Platz. Ebenfalls serienmäßig: die fürs Wohnen im Auto unabdingbare Drehfunktion des Fahrer- und Beifahrersitzes. Optional ließ sich der „Beach“ über einen auf dem Schienensystem integrierbaren Einzelsitz im Fond zum Fünfsitzer ausbauen. Profilschienen und Privatsphäre: Eine ebenso clevere Lösung wie die Schienen im Boden waren die Profilschienen in den Seitenwänden und im Dachbereich. In der Seitenwand (Fahrerseite) konnte so ein Campingtisch verankert werden; der Tisch war gleichzeitig für den Außenbereich nutzbar. Zwei serienmäßige Falt-Campingstühle ermöglichten lange sommerliche Dinner-Nächte draußen neben dem „Beach“. Für die Privatsphäre im Innenraum sorgten per Magnet an den Karosserieflächen zu befestigende Vorhänge; im Fahrerhaus kamen Spanntücher zum Einsatz. Perfektioniert wurde das Reisen und Campen durch zwei seitliche Profilschienen im Dachhimmel, in die zwei große Multifunktionstaschen für Kleidung und Accessoires einhängt werden konnten. Weitere Utensilien nahm zudem ein Gepäcknetz im hinteren Dachhimmel auf. 2007 – DER „BEACH“ WIRD ZUM CALIFORNIA BEACH Aufstelldach für den Allrounder: Als Volkswagen Nutzfahrzeuge den Multivan Beach 2007 in California Beach umtaufte, war das nur konsequent. Denn von diesem Moment an war der Camper optional mit einem großen Aufstelldach samt Faltenbalg und dem 1.200 x 2.000 mm breiten Dachbett erhältlich. Das Aufstelldach bot (und bietet) zahlreiche Vorteile: Wer zu zweit reiste, stieg zum Schlafen einfach nach oben. Familien mit zwei oder drei Kindern konnten nun alle gemeinsam im „Beach“ übernachten. Und wenn das Dach samt dort integriertem Bett nach oben geklappt wurde, ergab sich im Wohnraum eine Stehhöhe, wie sie sonst nur in größeren Reisemobilen zu finden war. 2009 – GLOBETROTTER-SONDERMODELL UND EIN GROSSE FACELIFT Cape-2-Cape mit dem California Beach: Auf der Automobil International (AMI) in Leipzig präsentierte Volkswagen Nutzfahrzeuge 2009 auf der Basis des T5 das Sondermodell California Cape2Cape. Die Inspiration dafür lieferte eine Expedition des deutschen Extremsportlers Joachim Franz, der 2008 – begleitet von fünf gelb lackierten California Beach – in nur 60 Tagen die 24.000 Kilometer lange Distanz vom Nordkap in Norwegen bis in das südafrikanische Kapstadt zurücklegte. Das im auffälligen Gelb lackierte und besonders robust ausgeführte Sondermodell war eine Hommage an diese transkontinentale Reise und konsequenterweise an seinen großen „cape2cape“-Logos auf den Seitenpartien zu erkennen. Hier integriert: die Umrisse der von Franz durchquerten Teile Europas sowie der afrikanische Kontinent. Konzipiert für aktive Freizeitsportler und Globetrotter, war der California Cape2Cape optional mit Allradantrieb, Differenzialsperre, Höherlegung des Fahrwerks, Allterrain Reifen und einem Motorluftfilter für besonders staubreiche Regionen erhältlich. Großes Update des Generalisten: Da immer mehr Kunden das optionale Aufstelldach bestellten und die Vorteile derart überzeugten, nahm es Volkswagen Nutzfahrzeuge im Rahmen einer sogenannten „großen Produktpflege“ (GP) in die Serienausstattung des California Beach auf. Standardmäßig wurde das Aluminium-Aufstelldach manuell geöffnet und geschlossen, optional über eine automatisch arbeitende Elektrohydraulik. Vollverkleidungen der Seitenwände und integrierte Rollos verfeinerten den Innenraum. Die Kunden hatten nun zudem die Wahl zwischen der 3er-Sitzbank des Multivan oder der 2er-Sitzbank des California Trendline. Von diesen zwei Versionen übernahm der „Beach“ auch das clevere Konzept der in Reißverschluss-Fächern der Heckklappe verstauten Camping-Stühle. Antriebsseitig lösten leisere und sparsamere Common-Rail-Turbodieselmotoren (TDI) die zuvor eingesetzten Pumpe-Düse-Direkteinspritzer ab. Automatische Doppelkupplungsgetriebe (DSG) ersetzten parallel die Wandlerautomatik. Eine neue 4MOTION-Generation sorgte für noch bessere On- und Offroad-Eigenschaften. Darüber hinaus war eine neue Infotainment-Generation an Bord. 2015 – NEUE „BEACH“-GENERATION AUT BASIS DES T6 Generation 2 auf Basis der Generation 6: Zehn Jahre nach dem ersten „Beach“ debütierte im Sommer 2015 die zweite Generation des California Beach auf der Basis der umfangreich weiterentwickelten sechsten Generation des Transporters (T6). Sie war optisch an ihrer neu designten Frontpartie, einer noch geradlinigeren Heckpartie sowie neuen Scheinwerfern und Rückleuchten zu erkennen. Der California Beach profitierte ebenso vom neuen Design wie von den neuen Antriebs, Assistenz- und Infotainment-Systemen sowie einer ebenfalls neuen Cockpitlandschaft. Eine Neuheit war rein optischer Natur, wurde aber sofort zum Bestseller: Erstmals seit Jahrzehnten gab es wieder Zweifarblackierungen – eine Hommage an den T1 und T2. News gab es auch beim Faltenbalg des Ausstelldaches: Statt aus Baumwolle bestand er nun aus einem synthetischen Stoff, der wasserdichter und widerstandsfähiger war. Ab dem Folgejahr war der Faltenbalg alternativ zu Grau („Alpin Grey“) zudem auch in Rot („Strawberry Red“) und Blau („Glacier Blue“) erhältlich. 2019 – IM T6.1 ERHÄLT DER „BEACH\" OPTIONAL EINE MINIKÜCHE Maximale Ausbaustufe mit Miniküche: Einen großen Sprung machte der California Beach 2019 mit dem Debüt der optisch und technisch weiterentwickelten Transporter Generation T6.1. Erstmals gab es den „Beach“ nun in zwei Versionen: als „Beach Camper“ mit Wohnmobilzulassung und „Beach Tour“ mit Pkw-Zulassung. Das Highlight der neuen Ausstattungsversion California Beach Camper war eine komplett neu entwickelte Miniküche. Sie wurde zur Nutzung einfach aus der linken Seitenverkleidung zwischen der B- und C-Säule nach oben gezogen und herausgeklappt. Das Edelstahlelement bot auf der linken Seite einen einflammigen Gaskocher sowie rechts ein Arbeits- und Ablagenfeld. Über dem Gaskocher befand sich zudem eine Abdeckplatte, die hochgeklappt beim Kochen als Abschirmblech diente. Unterhalb der Koch- und Arbeitsplatte befanden sich an der Seitenwand ein großes, offenes Staufach und ein geschlossenes Fach für eine 1,8-kg-Gasflasche. Während der „Coast“ und „Ocean“ aufgrund der breiter bauenden Küchenzeile (inklusive zweiflammigem Gaskocher, Kühlschrank und Spüle) generell mit einer Zweiersitzbank im Wohnraum angeboten wurden, konnte auch der neue California Beach Camper dank der Miniküche weiterhin mit einer Dreiersitzbank bestellt werden – ein Plus für Familien mit drei Kindern. Alternativ wurde der Beach in der Version „Tour“ auch ohne die Miniküche angeboten. In diesem Fall konnte der Bulli nicht nur rechts, sondern erstmals auch links mit einer Schiebetür ausgestattet werden. Camper-Bedienteil für den T6.1 Camper: Ein weiteres Novum an Bord aller neuen California war das komplett neu entwickelte Camper-Bedienteil mit Touchscreen in der Dachkonsole. Über diesen Screen wurden erstmals im Beach alle Camper Funktionen wie etwa – je nach Ausstattung – das elektrohydraulische Aufstelldach, die Standheizung, die Landstromversorgung oder das Wohnraumlicht gesteuert. Zudem beinhaltete das Camper-Bedienteil eine elektronische Wasserwagen, über die der California auf dem Stellplatz genau waagerecht ausgerichtet werden konnten. Zu den weiteren generellen Highlights des T6.1 gehörten neue Assistenzsysteme wie ein Seitenwindassistent oder der „Trailer Assist“ (Anhängerrangierassistent) sowie eine komplett neue Schalttafel, die erstmals mit digitalen Instrumenten („Digital Cockpit“) geordert werden konnte. Ebenfalls neu: eine große Frontöffnung für den Faltenbalg, die per Reisverschluss komplett geöffnet werden konnte. Im California Ocean war dieses neue Aufstellfach inklusive drei Fenstern serienmäßig an Bord; für alle anderen Versionen stand das Panoramadach-Feature optional zur Verfügung. 2024 – MODERNSTER „BEACH“ ALLER ZEITEN AUF DER BASIS DES MQB „Beach“ auf neuer Multivan-Basis: 2024 brachte Volkswagen Nutzfahrzeuge den bis in das letzte Detail neu entwickelten California auf den Markt. Er basiert seitdem auf der Langversion des aktuellen Multivan – ein Bulli der siebten Generation. Angeboten wird der neue California als „Beach“, „Beach Tour“, Beach Camper“ mit Mini-Küche im Heck sowie als „Coast“ und „Ocean“ (letztere mit voller Küchenzeile). Fakt ist, dass die auf dem innovativen Modularen Querbaukasten (MQB) basierenden California Modelle geräumiger, smarter, durchdachter und vielseitiger wurden. Natürlich hielt Volkswagen Nutzfahrzeuge an typischen California Details wie dem Aufstelldach fest. Und selbstverständlich ist der „Beach“ auch in der neusten Version zugleich der VW Bus für den Alltag und der Camper fürs Reisen. All das gelingt mit den modernsten Antriebs-, Assistenz- und Infotainmentsystemen und einer neuen Reisemobilarchitektur nun noch besser. Zudem gilt: Erstmals gibt es alle California Versionen serienmäßig mit zwei Schiebetüren – damit erschließen sich noch vielseitigere Nutzungsmöglichkeiten. Darüber hinaus wird der California Beach durch den neuen optionalen und ersten Plug-in-Hybrid-Allradantrieb (eHybrid 4MOTION) dieser Klasse temporär zum Elektroauto, das gleichzeitig große Gesamtdistanzen ermöglicht. 20 Jahre nach seinem Debüt sieht das Modellprogramm des „Beach“ 2025 wie folgt aus: California Beach: Den Einstieg in das aktuelle Programm markiert der California Beach mit Pkw-Zulassung – im Grunde ist er konzeptionell ein Multivan mit manuellem Aufstelldach. Der California Beach bietet sechs Sitzplätze (2+2+2). Die herausnehmbaren Einzelsitze in der zweiten und dritten Reihe sind deutlich leichter als die Pendants des Vorgängers. Ebenfalls serienmäßig: zwei Schlafplätze im manuell mit einem einfach bedienbaren Mechanismus zu öffnenden und schließenden Aufstelldach. Das Dachbett ist 2.054 x 1.137 mm groß und mit einer bequemen Auflage samt Tellerfedern ausgestattet. California Beach Tour: Die zweite Ausbaustufe ist der California Beach Tour. Er ist serienmäßig mit einem drehbaren sowie in der Höhe einstellbaren Fahrer- und Beifahrersitz, zwei Camping-Stühlen in der Heckklappe, einem Camping-Tisch, einer Beleuchtung im Aufstelldach (inkl. Schwanenhalsleuchte und 45-Watt-USB Schnittstellen), Schiebefenstern in der linken und rechten Schiebetür sowie einer Camper-Bedieneinheit (Screen) in der C-Säule auf der Beifahrerseite ausgerüstet. Zudem hat der „Beach Tour“ eine zusätzliche Camper-Batterie an Bord (40 Ah LiFePo). Der fünfsitzige California Beach Tour ist im Fond mit drei Einzelsitzen ausgestattet; die Lehnen der zwei äußeren Fondsitze können – anders als im „Beach“ und Multivan – komplett zurückgeklappt werden. Damit wird die Voraussetzung geschaffen, dass im Wohnraum zwei weitere Schlafplätze entstehen. Dazu hat der California Beach Tour eine ausklappbare weitere Matratze (1.980 x 1.330 mm) an Bord, die auf den umgeklappten Einzelsitzen aufliegt und bei Nichtgebrauch kompakt gefaltet als Gepäckablage im Kofferraum untergebracht ist. Auch der „Beach Tour“ hat eine Pkw-Zulassung. California Beach Camper: Der California Beach Camper hat eine klassische Wohnmobil-Zulassung. Wie der „Beach Tour“ ist er ein Fünfsitzer, aber zusätzlich mit einer äußerst kompakt bauenden Miniküche und einem 230-Volt-Landstrom Anschluss ausgestattet. Die Küche mit Einflammen-Gaskocher, einer Besteckschublade und weiterem Stauraum befindet sich in einem fest installierten Modul im Laderaum. Zur Nutzung wird die Küche bei geöffneter Heckklappe (gleichzeitig Regenschutz) nach hinten herausgezogen. Die weitere Ausstattung entspricht dem California Beach Tour. 2025 – SONDERMODELL „ENERGY“ DEBÜTIERT AUF DEM CARAVAN-SALON Premiere in Düsseldorf: Mit dem Start des Caravan-Salons beginnt auch der Vorverkauf des gänzlich neuen und besonders attraktiv ausgestatteten Sondermodells „Energy“. Der Name sagt es: Das neue Modell basiert auf dem California Beach Camper, ist aber – bei einem Preisvorteil von bis zu 4.600 Euro – nochmals umfangreicher ausgestattet. Die erweiterte Ausstattung umfasst eine Markise (auf Beifahrerseite montiert, Markisenschienen auf beiden Fahrzeugseiten), die Camper-Standheizung inklusive Fernbedienung (plus Frontscheibenenteisung), die 3-Zonen-Klimaanlage „Air Care Climatronic“, ein Verdunkelungssystem mit Rollos und Thermomatten, den „Travel Assist“ (assistierte Quer- und Längsführung) und das Parkpaket Basic (mit Parklenkassistent „Park Assist“, Einparkhilfe im Front- und Heckbereich und Rückfahrkamera „Rear View“). Darüber hinaus gehört zur „Energy“ Ausstattung ein Lichtpaket. Es beinhaltet den Fernlichtassistent „Light Assist“, die dynamische Leuchtweitenregulierung, den Regensensor, das sogenannte Schlechtwetterlicht inklusive Abbiegelicht, einen automatisch abblendenden Innenspiegel und die ebenfalls automatische Tagfahrlichtschaltung samt „Coming home“- und „Leaving home“-Funktion. Gleichfalls Serie: der proaktive Insassenschutz, die Sitzheizung vorn und das beheizbare Multifunktions Lederlenkrad mit Schaltwippen und „Energy“-Logo. Außen individualisieren die 17 Zoll-Leichtmetallräder des Typs „Dundrod“ in Schwarz mit glanzgedrehten Oberflächen den „Beach Camper Energy“. Produktoffensive auf dem Caravan-Salon: Ebenfalls als Sondermodell „Energy“ werden auf dem Caravan-Salon die California Versionen „Coast“ und „Ocean“ debütieren. Darüber hinaus gilt: Volkswagen Nutzfahrzeuge wird mit seinem kompletten Reisemobil-Programm inklusive der neuen Grand California Modelle und des Caddy California präsent sein. Sie alle sind zu 100 Prozent Eigenentwicklungen, die komplett bei Volkswagen Nutzfahrzeug gefertigt werden.", + "tags": [], + "status": "Trash", + "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5939", + "images": [], + "source": "https://www.camping-news.de/rss/", + "source_name": "Camping-News", + "created_at": "2025-08-28T10:29:32.728961", + "word_count": 2337 + }, + { + "id": "9635294fe16689c035b7cd137f56cf8d", + "title": "Bliessteig im Saarland ist Deutschlands schönster Wanderweg", + "date": "Tue, 26 Aug 2025 00:00:00 +0200", + "summary": "46.000 Wanderfans aus ganz Deutschland haben abgestimmt", + "text": "Die Entscheidung ist gefallen: Bei der Publikumswahl „Deutschlands Schönster Wanderweg 2025“ haben über 46.000 Wanderfans aus ganz Deutschland ihre Stimme abgegeben. Insgesamt wurden mehr als 67.000 Häkchen in den Kategorien Tagestouren und Mehrtagestouren gesetzt – ein deutliches Zeichen für die große Begeisterung für das Wandern quer durch das Bundesgebiet. Der „Bliessteig“ im Saarland wurde in der Kategorie Mehrtagestouren mit 7.557 Stimmen zum Sieger gekürt. Der Fernwanderweg ist als „Langer Qualitätsweg Wanderbares Deutschland“ zertifiziert und trägt das Gütezeichen „Leading Quality Trails – Best of Europe“. Auf 108 Kilometern durchquert der Wanderweg das UNESCO-Biosphärenreservat Bliesgau. Die neun Etappen führen durch sanfte Hügel, entlang von Streuobstwiesen und buntsandsteinreichen Felsen bis hin zu waldreichen Gebieten. Besonders hervorzuheben ist die nachhaltige Ausrichtung der Route, die durch öffentliche Verkehrsmittel bequem zugänglich ist. Die Start- und Zielpunkte der Etappen sowie zahlreiche Zwischenstationen sind regelmäßig, auch am Wochenende, mit Bus und Bahn erreichbar.Das Saarland gehört zu einer der schönsten Wanderregionen in Deutschland und hat bereits mehrmals mit seinen Wanderwegen den begehrten Publikumspreis gewonnen. Wirtschafts- und Tourismusminister Jürgen Barke: „Der Bliessteig ist Deutschlands schönster Wanderweg 2025 – und das völlig verdient! Die Publikumswahl hat gezeigt, dass das Saarland zu den attraktivsten Wanderregionen der Republik gehört. Ich gratuliere dem Saarpfalz-Kreis, Landrat Frank John und der Saarpfalz-Touristik herzlich zu diesem Erfolg. Der Bliessteig verbindet Naturerlebnisse und Nachhaltigkeit auf besondere Weise – und zieht damit Menschen weit über die Landesgrenzen hinaus an. Die Investitionen der Landesregierung in die touristische Infrastruktur zahlen sich aus: Das Saarland ist so beliebt wie nie und gehört heute zu den Top-Kurzreisezielen für Wandern, Radfahren, Natur und Kulinarik.“ Die JURY Vor der Abstimmung, die vom 01. März 2025 bis zum 30. Juni 2025 lief, hatte eine Jury mit prominenten Persönlichkeiten der Wanderszene die aus über 100 Bewerbungen ausgewählten Wanderwege bewertet. Unter den Juroren waren Manuel Andrack, Wanderexperte und Autor; Kathrin Heckmann (alias Fräulein Draußen), Spiegel-Bestsellerautorin; Extremwanderer Thorsten Hoyer sowie der Chefredakteur des Wandermagazins. Ergänzt wurde das Gremium durch „Hegefire“, eine der reichweitenstärksten deutschen Outdoor-Influencer mit über 300.000 Followern.", + "tags": [], + "status": "Trash", + "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5937", + "images": [], + "source": "https://www.camping-news.de/rss/", + "source_name": "Camping-News", + "created_at": "2025-08-28T10:29:33.324062", + "word_count": 330 + }, + { + "id": "417a901404e26e10cb32739b5e18bf9b", + "title": "Hotspot der mobilen Freiheit", + "date": "Tue, 26 Aug 2025 00:00:00 +0200", + "summary": "CARAVAN SALON Düsseldorf 2025", + "text": "Zehn Tage lang wird Düsseldorf zum Hotspot für alle, die mobiles Reisen lieben – das Messegelände verwandelt sich zum CARAVAN SALON vom 29. August bis 7. September 2025 in das internationale Zentrum der Caravaning-Welt. Der CARAVAN SALON 2025 präsentiert alles, was das Herz der Caravaning-Community höherschlagen lässt, von den aktuellsten Fahrzeugmodellen über eine riesige Zubehörpalette bis hin zu den traumhaften Camping-Reisezielen. „Wir blicken voller Vorfreude auf den Jahreshöhepunkt der gesamten Branche. Wer Freiheit auf vier Rädern liebt, wer Flexibilität und Nähe zur Natur sucht, ist beim CARAVAN SALON genau richtig. In 15 Hallen und auf dem Freigelände des Düsseldorfer Messegeländes werden sich erstmals über 800 nationale und internationale Aussteller präsentieren – so viele wie niemals zuvor. Die Vielfalt an Marken, Modellen und Grundrissen ist in diesem Jahr noch einmal gewachsen. Nirgendwo sonst gibt es eine größere Auswahl rund um die mobile Freizeit – ergänzt durch ein inspirierendes Rahmenprogramm voller Innovationen, Ideen und dem puren Caravaning-Erlebnis“, sagt CARAVAN SALON Director Stefan Koschke. Bühne für Produktneuheiten und Branchentrends Daniel Onggowinarso, Geschäftsführer des Caravaning Industrie Verbandes (CIVD): Caravaning hat sich in den vergangenen Jahrzehnten weltweit zu einer tragenden Säule von Tourismus und Wirtschaft entwickelt. Diese Entwicklung spiegelt sich auch im CARAVAN SALON wider, der längst über seine Rolle als größte und wichtigste Bühne für Produktneuheiten und Branchentrends hinausgewachsen ist. Gemeinsam mit der Messe Düsseldorf arbeitet der CIVD kontinuierlich daran, die Messe auch als Forum für fachlichen Austausch weiterzuentwickeln. Einen wichtigen Beitrag dazu leistet das umfangreiche Rahmenprogramm für Fachbesucher, das Expertinnen und Experten aus unterschiedlichen Disziplinen zusammenführt und Themen aufgreift, die über unsere Branche hinausreichen. Auch in diesem Jahr freuen wir uns auf den Dialog mit Politik, Wirtschaft und Wissenschaft sowie auf wichtige Impulse, die nicht nur die Zukunft der Caravaningbranche, sondern auch die der Tourismusbranche insgesamt mitgestalten. Neben den Präsentationen der Aussteller erwartet die Besucher in den Messehallen und auf dem Freigelände ein vielfältiges Rahmenprogramm mit spannenden Sonderthemen rund um das mobile Reisen. „StarterWelt“ im Freigelände – perfekt für Neueinsteiger Caravaning erfreut sich einer stetig wachsenden Beliebtheit. Beim vergangenen CARAVAN SALON zählten 38 Prozent der Besucherinnen und Besucher zu den Neueinsteigern und nahmen erstmals an der Messe teil. Für diese Zielgruppe bietet ausschließlich der CARAVAN SALON mit der „StarterWelt“ ein in dieser Form einzigartiges Informations- und Beratungsangebot. Im Freigelände zwischen den Hallen 5 und 9 informieren erfahrene Expertinnen und Experten persönlich zu Themen wie der Wahl des passenden Fahrzeugmodells, dem zulässigen Gesamtgewicht oder technischen Details. Verschiedene Fahrzeugtypen können direkt vor Ort besichtigt werden und veranschaulichen praxisnah, für welche Einsatzbereiche sie besonders geeignet sind. Ergänzt wird das Angebot durch ein abwechslungsreiches Bühnenprogramm, das vielfältige Einblicke in die Welt des Caravanings vermittelt und den Einstieg in diese Urlaubsform nachhaltig erleichtert.. Verschiedene Fahrzeugtypen stehen direkt vor Ort bereit, um in der Praxis zu zeigen, für welche Zielgruppen sie sich besonders eignen. Ergänzend zur persönlichen Beratung sorgt ein abwechslungsreiches Bühnenprogramm für spannende Einblicke in die Vielfalt des Caravanings und erleichtert Einsteigern die Orientierung. Abenteuer Selbstausbau Das Interesse am fachgerechten Umbau des eigenen Freizeitfahrzeugs wächst stetig – viele suchen gezielt nach professioneller Unterstützung und fundiertem Expertenwissen. Die Erlebniszone „Abenteuer Selbstausbau“ in Zusammenarbeit mit dem explorer- und dem VANderlust-Magazin wird aufgrund der großen Nachfrage noch einmal vergrößert und inhaltlich vertieft. Im Freigelände direkt vor den Hallen 13 und 14 finden Interessierte vier selbstausgebaute Freizeitfahrzeuge, die einen Eindruck über die Bandbreite des Themas aufzeigen. Täglich finden praxisnahe Vorträge und Expertenfragerunden rund um Themen wie Projektmanagement; Nachhaltiges Ausbauen; Photovoltaik; Fenstereinbau; Elektroinstallation; Kleben, Dichten und Versiegeln; Toilettensysteme und Materialkunde statt. h Halle 7: Travel & Nature CONNECTED Der Tourismusbereich des CARAVAN SALON präsentiert sich in diesem Jahr in Halle 7 – direkt am Eingang Nord. Besucher erwartet hier eine große Auswahl an Traumzielen, attraktiven Camping- und Stellplätzen sowie perfekten Caravaning-Destinationen für Outdoor-Aktivitäten wie Wandern, Klettern oder Biken. Abgerundet wird das Angebot durch das abwechslungsreiche Programm auf der „Travel & Nature CONNECTED“-Bühne, das gleichermaßen zum Träumen wie zur konkreten Planung der nächsten Reise einlädt. Traumtouren-Kino und spektakuläre EOFT-Filme Im Traumtouren-Kino in Halle 1 / 1. OG (Raum 16) können Besucher auch in diesem Jahr faszinierende Caravaning-Destinationen entdecken. Die Reiseexperten Konstantin Abert und Uwe Hamm entführen das Publikum mit beeindruckenden Bildern in nahe und ferne Traumziele. Spektakuläre Aufnahmen und mitreißende Geschichten rund um den Globus gibt es bei folgenden Shows: Island & Färöer - ein Traum aus Feuer und Eis, Oman und Saudiland - neue Destinationen für das perfekte Überwintern mit dem Wohnmobil, Patagonien & Feuerland – im Camper zum südlichsten Zipfel der Welt, Viva México! – Mit dem Wohnmobil durch ein Land voller Magie, Maya, Mezcal und Meer, Faszination Norden – Vom Baltikum bis nach Norwegen sowie 1000 Gründe für ein Reisemobil – Europa von Spanien bis in den Kaukasus. Ein besonderes Highlight erwartet die CARAVAN SALON-Gäste zudem auf der Bühne „Travel & Nature CONNECTED“ in Halle 7: Am Freitag, 5. September, präsentiert die European Outdoor Film Tour (EOFT) von 17.30 Uhr bis 19.30 Uhr in einer kostenlosen Sondervorstellung die spektakuläre Welt des Outdoor- und Abenteuersports. Mal leise und nachdenklich, mal temporeich und mitreißend, aber immer mitten ins Herz. Starke Persönlichkeiten und beeindruckende Naturbilder sorgen für echtes Outdoor-Feeling und Gänsehaut-Momente. Musterstellplatz im Freigelände Praxisnah wird es auch auf dem CIVD-Musterstellplatz, der erneut im Freigelände zwischen Halle 10 und 17 zu finden ist. Dort präsentieren Hersteller und Dienstleister unter anderem technische Lösungen für den Betrieb und die Ausstattung moderner Reisemobilstellplätze. Interessierte können sich direkt vor Ort von Experten beraten lassen. Konferenzprogramm „Destination Zukunft“ Der CARAVAN SALON Düsseldorf ist nicht nur die weltgrößte Messe für mobiles Reisen, sondern entwickelt sich zunehmend zu der zentralen Plattform für die Destinationsentwicklung des Caravaning-Tourismus. Vom 1. bis 4. September 2025 veranstaltet die Messe Düsseldorf zum zweiten Mal das Fachprogramm „Destination Zukunft“. Diese Veranstaltung bietet Destinationsexperten, Touristikern, Unternehmen und politischen Entscheidungsträgern die Möglichkeit, sich über die Chancen des Caravaning- und Outdoor-Tourismus für Städte, Gemeinden und Regionen in Deutschland und Europa auszutauschen. Rund 30 Fachreferentinnen und -referenten stellen praxisnahe Projekte, Erfahrungen und Best-Practice-Beispiele vor, die den Teilnehmenden wertvolle Impulse für ihre Arbeit liefern. „Camper des Jahres 2025“ Der ADAC sucht auf dem CARVAN SALON den „Camper des Jahres 2025“. Das Finale des bundesweiten Wettbewerbs findet am Samstag, 6. September, von 10 bis 16 Uhr auf dem Freigelände vor Halle 10 statt. Wohnmobilisten aus ganz Deutschland haben sich in regionalen Vorrunden für das große Finale qualifiziert und müssen in verschiedenen Fahrdisziplinen sowie mehreren Spezialaufgaben nun erneut ihre Camping-Fähigkeiten unter Beweis stellen. Im Vordergrund steht beim „ADAC Camper des Jahres“ neben einer großen Portion Spaß vor allem die Verkehrssicherheit. Auf die Gewinner wartet eine Traum-Campingreise nach Kanada inkl. Flug im Wert von mehr als 8000 Euro. Die Plätze zwei und drei bekommen Zubehör-Gutscheine von AL-KO in Höhe von 2000 und 1000 Euro. E-Bike-Parcours Radfahren gehört für viele Caravaning-Enthusiasten einfach dazu – ob zur entspannten Erkundung der Umgebung oder als sportlicher Ausgleich unterwegs. Besonders E-Bikes liegen voll im Trend und sind längst zum beliebten Begleiter für die Wege zwischen Stellplatz und Ausflugsziel geworden. Wer die neuesten Modelle testen möchte, ist auf dem „E-Bike-Parcours“ im Freigelände vor Halle 15 genau richtig: Hier können Besucher in einem eigens eingerichteten Bereich die Fahreigenschaften von E-Bikes, E-Scootern und Elektro-Rollern live erleben und auf Herz und Nieren prüfen. Rallye für Kinder und Adventure Camp Der CARAVAN SALON ist ein Rundum-Erlebnis – mit einem vielfältigen Rahmenprogramm, das den Messebesuch perfekt abrundet. Auch für die jüngsten Gäste ist gesorgt: An den Wochenenden lädt das AdventureCamp im Freigelände zwischen den Hallen 10 und 16 Kinder und Jugendliche zum Toben und Spielen ein. In Halle 3 und Halle 7 veranstalten der Deutsche Wanderverband und die Messe Düsseldorf während der gesamten Messelaufzeit eine spannende Rallye, bei der Kinder an verschiedenen Ständen knifflige Rätsel lösen oder bei abwechslungsreichen Mitmachaktionen ihr Können unter Beweis stellen können. Das Freigelände zwischen den Hallen ist nicht nur Ausstellungsareal, sondern auch Erholungsoase und Cateringzone. Infostand von sonnigekarriere.de Am Info-Stand im Freigelände informiert der CIVD über Ausbildungs- und Karrieremöglichkeiten in der Caravaningbranche – insbesondere in der Fachrichtung Caravan- und Reisemobiltechnik. Unternehmen können sich ebenfalls über das Thema Ausbildung informieren. Goldmobil gewinnen Im April 2025 wurde in Deutschland erstmals die Marke von einer Million zugelassener Reisemobile überschritten – ein bedeutender Meilenstein und ein starkes Zeichen für die wachsende Beliebtheit des Caravanings als Urlaubsform. Um diesen Erfolg gebührend zu feiern, startete der CIVD eine bundesweite Kommunikationskampagne mit einem besonderen Blickfang: dem Goldmobil – ein vollständig in Gold foliertes Reisemobil, das im Rahmen einer großen Roadshow quer durch Deutschland tourte. Jetzt ist die Tour zu Ende – und das Goldmobil steht zum Abschluss auf dem CARAVAN SALON in Halle 17 (Stand A 06). Alle Interessierten können es dort aus nächster Nähe bewundern, sich über die Welt des Caravanings informieren und beim großen Gewinnspiel teilnehmen: Zu gewinnen gibt es das Goldmobil. Tickets und Preise zum CARAVAN SALON Düsseldorf 2025: Die Tageskarte kostet für Erwachsene am Wochenende 20 Euro, werktags 18 Euro; Ermäßigt (Schüler, Studenten, Club CARAVAN SALON & boot, ADAC) am Wochenende 18 Euro, werktags 16 Euro, für Kinder (6 bis 12 Jahre) beträgt das Tagesticket am Wochenende und werktags 6 Euro. Darüber hinaus wird von Montag bis Freitag ein Nachmittagsticket für 10 Euro angeboten (von 14 bis 18 Uhr). Die Preise für den Preview Day liegen für Erwachsene bei 39 Euro (ermäßigt 35 Euro), Kinder von 6 bis 12 Jahren zahlen 6 Euro. Der Preview Day am 29. August bietet mit begrenztem Ticketkontingent eine besonders entspannte Atmosphäre für alle, die die Neuheiten der Branche in Ruhe entdecken wollen. Die Tickets können nur online bestellt werden. Aktuelle Informationen und Neuigkeiten gibt es unter www.caravan-salon.de .", + "tags": [], + "status": "Trash", + "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5938", + "images": [], + "source": "https://www.camping-news.de/rss/", + "source_name": "Camping-News", + "created_at": "2025-08-28T10:29:33.610731", + "word_count": 1580 + }, + { + "id": "dd538a0ea4a550484605cd9dacabac94", + "title": "Aktuelle Trends auf dem CARAVAN SALON 2025", + "date": "Mon, 25 Aug 2025 00:00:00 +0200", + "summary": "Caravaning beliebter denn je", + "text": "Immer mehr Urlauber entdecken im Caravan oder Reisemobil ihre schönste Art des Reisens. Deutschland nimmt dabei eine besondere Doppelrolle ein: Als führender Industriestandort und größter Fahrzeugmarkt ist die Bundesrepublik nicht nur Zentrum der europäischen Branche, sondern zählt auch zu den beliebtesten Reisezielen für Caravaning-Fans aus dem In- und Ausland. Die Gründe für das anhaltend große Interesse am mobilen Urlaub sind vielfältig, wie Daniel Onggowinarso, Geschäftsführer des Caravaning Industrie Verbandes (CIVD), betont: „Die Wünsche und Ansprüche der Urlauber haben sich in den vergangenen Jahrzehnten grundlegend verändert. Heute legen Reisende in ihrer Freizeit mehr denn je Wert auf Individualität und Flexibilität, zugleich ist auch die Sehnsucht nach Naturerlebnissen noch größer geworden. Neben dem klassischen Sommerurlaub gewinnen auch Kurztrips und spontane Auszeiten zunehmend an Bedeutung bei den Urlaubern. Caravaning vereint all diese Bedürfnisse auf einzigartige Weise und eröffnet Freiräume, wie sie wohl kaum eine andere Urlaubsform bieten kann.“. Herausragende Produktvielfalt: Für jeden Urlaubstyp das passende Fahrzeug Vielfalt und Individualität prägen nicht nur die Reisegestaltung, sondern auch das Produktangebot der Branche. Die große Auswahl an Fahrzeuggrundrissen, Ausstattungsvarianten und Zubehör gilt als Markenzeichen der Caravaning-Industrie. Sie eröffnet Urlaubern die Möglichkeit, ihr Wunschfahrzeug ganz nach den eigenen Vorstellungen auszusuchen oder individuell zu konfigurieren: Caravans stehen für ein komfortables Reiseerlebnis mit großzügigem Raumgefühl und maximaler Freiheit am Zielort. Durch das Abkoppeln des Pkw lassen sich Einkäufe oder Ausflüge bequem erledigen, während das mobile Zuhause am Lieblingsstellplatz bleibt. Ob Modelle mit großem Stauraum, die auch reichlich Platz für Sportausrüstung bieten, oder kompakte Varianten für Paare – die Vielfalt der Caravan-Sparte spricht längst nicht mehr nur Familien an, sondern begeistert eine breite Zielgruppe. Auch das Angebot an Reisemobilen ist heute so vielfältig wie nie. Neben kompakten Kastenwagen mit oder ohne Bad, die in den letzten Jahren immer beliebter wurden, rücken inzwischen auch die klassischen Reisemobiltypen wie teilintegrierte und vollintegrierte Modelle wieder stärker ins Blickfeld der Kunden. Innenraum: Modern, komfortabel und flexibel Die Ansprüche der Kunden an das Interieur entwickeln sich kontinuierlich weiter. Besonders gefragt sind helle Farben, warme Holztöne sowie natürliche und nachhaltige Materialien, die eine wohnliche Atmosphäre schaffen und Komfort mit hochwertigem Design verbinden. Die stetig wachsende Auswahl an Gestaltungsvarianten eröffnet Reisenden zudem die Möglichkeit, ihren mobilen Wohnraum ganz nach den eigenen Vorstellungen individuell und stilvoll einzurichten. Einen besonderen Stellenwert haben flexible Raumlösungen: Klapp- und Hubbetten, verschiebbare Wände oder variable Arbeitsflächen ermöglichen eine optimale Nutzung des verfügbaren Platzes. So lassen sich Sitzecken im Handumdrehen in komfortable Schlafplätze verwandeln, während Bäder oder Stauraum bei Bedarf vergrößert werden können. Auch Sport- und Freizeitgeräte finden dank durchdachter Konzepte mühelos Platz. Zur modernen Ausstattung zählt heute außerdem smarte Bordtechnik: Über Tablet oder Smartphone lassen sich Klimaanlage und Heizung bequem steuern – auch aus der Ferne. Wasser- und Gasvorräte sind auch digital abrufbar. Auf diese Weise verbinden aktuelle Modelle stilvolles Design, clevere Raumkonzepte und digitale Innovation zu einem zeitgemäßen und komfortablen Reiseerlebnis. Autarkie: Freiheit ohne Grenzen Autarkes Reisen hat sich zu einem zentralen Trend unter Caravaning-Urlaubern entwickelt. Immer mehr Reisende suchen bewusst Orte abseits der großen Touristenzentren und bevorzugen naturnahe Stell- und Campingplätze. Der Wunsch nach Unabhängigkeit erhöht die Nachfrage nach moderner Ausstattung wie leistungsstarken Akkupaketen und Solarpanels, die längere Aufenthalte fernab klassischer Infrastruktur ermöglichen. Zudem wächst das Interesse an Reisemobilen mit Allradantrieb, die selbst entlegene Stell- und Campingplätze unabhängig von Bodenbeschaffenheit und Witterung sicher erreichbar machen. Damit werden die Fahrzeuge zur idealen Wahl für Urlauber, die Abenteuerlust, Flexibilität und Naturverbundenheit miteinander verbinden möchten. Die Entwicklung verdeutlicht, dass die Ansprüche an Caravans und Reisemobile kontinuierlich steigen. Die Branche reagiert darauf mit innovativen Lösungen, die Funktionalität, Komfort und moderne Technik vereinen und sowohl langjährige Caravaning-Fans als auch neue Generationen von Outdoor-Enthusiasten begeistern. Tickets und Preise zum CARAVAN SALON Düsseldorf 2025: Die Tageskarte kostet für Erwachsene am Wochenende 20 Euro, werktags 18 Euro; Ermäßigt (Schüler, Studenten, Club CARAVAN SALON & boot, ADAC) am Wochenende 18 Euro, werktags 16 Euro), für Kinder (6 bis 12 Jahre) beträgt das Tagesticket am Wochenende und werktags 6 Euro. Darüber hinaus wird von Montag bis Freitag ein Nachmittagsticket für 10 Euro angeboten (von 14 bis 18 Uhr). Die Preise für den Preview Day liegen für Erwachsene bei 39 Euro (ermäßigt 35 Euro), Kinder von 6 bis 12 Jahren zahlen 6 Euro. Die Tickets können ausschließlich online bestellt werden. Aktuelle Informationen und Neuigkeiten gibt es unter www.caravan-salon.de .", + "tags": [], + "status": "Trash", + "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5936", + "images": [], + "source": "https://www.camping-news.de/rss/", + "source_name": "Camping-News", + "created_at": "2025-08-28T10:29:33.893395", + "word_count": 707 + }, + { + "id": "db4ed5039438fa815131edfc2fe1f18d", + "title": "Neue Baureihen und Sondermodelle machen Caravaning noch attraktiver", + "date": "Fri, 22 Aug 2025 00:00:00 +0200", + "summary": "CARAVAN SALON DÜSSELDORF 2025", + "text": "Der CARAVAN SALON DÜSSELDORF, die weltgrößte Messe für die mobile Freizeit, zeigt vom 29. August bis 7. September 2025 die wichtigsten Innovationen der Caravaning-Branche. In 15 Hallen und im Freigelände präsentieren über 800 Austeller die neuesten Caravans, Reisemobile und Campervans sowie Zubehör, Ausbauteile, Zelte und Mobilheime. Auch Urlaubsdestinationen, Camping- und Reisemobilstellplätze erwarten die Besucher. Kaufinteressenten wird es freuen: Mit zahlreichen neuen Baureihen und Sondermodellen machen die Hersteller von Caravans und Reisemobilen den Einstieg in die Freizeitform Caravaning einfacher, attraktiver und preisgünstiger. Neben den Neuheiten im Einstiegssegment sind in der Mittel- und Oberklasse auch Autarkie und Komfort weiterhin im Fokus. Mehr Unabhängigkeit von Infrastruktur schaffen bei Reisemobilen der zunehmend beliebte Allradantrieb, Solaranlagen zur Stromerzeugung und Systeme zur Wasseraufbereitung. Bei den Ausstattungen moderner Freizeitfahrzeuge setzt sich die Vernetzung aller Systeme mit dem Smartphone unter dem Schlagwort Smart Caravaning auf breiter Front durch. Kaum ein Hersteller hat diese moderne Form der Steuerung nicht in Serie oder optional im Angebot. Das macht den Umgang mit dem Freizeitfahrzeug deutlich komfortabler. Manches Highlight wird traditionsgemäß erst am ersten Messetag enthüllt. Die Besucher des CARAVAN SALON 2025 können sich also noch auf manche Überraschung freuen – zusätzlich zu den folgenden 269 Premieren, die hier in alphabetischer Reihenfolge aufgeführt sind. Adria, Halle 10/A29 Der slowenische Hersteller Adria feiert 60jähriges Jubiläum und bringt daher in allen Baureihen Sondermodelle in „60Y“-Ausstattung nach Düsseldorf. Insgesamt sechs Modelle der Twin Matrix-, Coral- und Compact-Baureihen profitieren so von üppiger Ausstattung zum Vorzugspreis. Die Kastenwagenausbauten der Slowenen haben ab 2026 zwei neue Spitzenmodelle. Unter dem Namen Supertwin starten zwei Grundrisse auf Mercedes Sprinter mit Allradantrieb und gehobener Ausstattung. Zum Geburtstag präsentiert Adria außerdem die neue Teilintegrierten-Baureihe Compact Max auf Volkswagen Crafter. Drei Varianten davon bringen die Slowenen nach Düsseldorf. Bei den Caravans hat Adria seinen kompakten Klassiker Action komplett überarbeitet. Modernes Styling sowie ein Aufbau mit XPS Dämmung und GfK Boden werten den nur 5,94 Meter kurzen Touringcaravan auf. Zudem bringt Adria zwei Caravans der Altea-Baureihe als „60Y“ Sondermodell heraus: Den 502 UL für Paare und den 552 OPK für Familien. Ahorn Camp, Halle 11/A06 Ahorn Camp aus Speyer hat seine komplette Modellpalette überarbeitet und auf dem neuen Renault Master aufgebaut. Zudem werden alle Fahrzeuge nun in Italien im Laika-Werk in San Casciano gefertigt. Die Isolierung der Wohnkabinen erfolgt nun in GfK-Sandwichbauweise mit XPS-Isolierung. Der umfassende Neuaufbau der Modellplatte startet mit elf Modellen in den Aufbauformen Kastenwagenausbau, Teilintegrierte und Alkoven. Aquatec, Halle 3/A04 WM Aquatec zeigt mit der neuen UV-8 Steel eine kompakte UV-C-LED-Einheit für die chemiefreie Wasserdesinfektion mit UV-Licht in Freizeitfahrzeugen. Die Anlage eignet sich für alle Pumpensysteme und verarbeitet bis zu acht Liter Wasser pro Minute. Ein integrierter Durchflusssensor aktiviert das System, sobald Wasser entnommen wird. Batterium, Halle 13/F17 Unter dem Markennamen Ective präsentiert Batterium zahlreiche Komponenten für Solaranlagen in Reisemobilen und Caravans. Neu ist eine Markise, die mit flexiblen aufrollbaren Solarmodulen Strom erzeugt. Die biegsamen CGIS Module sind wie bei einer herkömmlichen Markise während der Fahrt in der Markisenkassette untergerbacht. Im ausgerollten Zustand fangen Sie die Sonnenstrahlen ein und produzieren laut Hersteller bis zu 4,5 kWh Strom pro Sonnentag. Benimar, Halle 10/A21 Die zur Trigano-Gruppe gehörende spanische Marke Benimar bringt mit dem Benimar Tessoro 425 ist ein neues Familienmodell in seiner Teilintegrierten-Baureihe. Der ungewöhnliche Grundriss hat serienmäßig zwei Etagenbetten im Heck und optional ein Hubbett für zwei über der geräumigen Sitzgruppe. Auch diese lässt sich zum Doppelbett umbauen. So könnten sogar sechs Personen im 7,20 Meter langen Tessoro 425 schlafen. Bürstner, Halle 6/B05 Bürstner stellt zum Modelljahr 2026 sein Reisemobilportfolio vollständig neu auf. In den drei Baureihen Papillon, Habiton und Signature werden zunächst vier Modelle neu vorgestellt, die in Zukunft nach und nach ergänzt werden. Der Kastenwagenausbau Papillon startet auf Citroën Jumper mit einem 6 Meter Modell, dessen Preisliste bei unter 40.000 Euro beginnen soll. Habiton ist ein Kastenwagenausbau auf Mercedes Sprinter, dessen Clou – ein verschiebbares Bad – Längseinzelbetten bei unter 6 Metern Gesamtlänge ermöglicht. Signature schließlich umfasst zwei teilintegrierte Modelle, eines mit Längseinzelbetten und eines mit Queensbett. Drei seiner bewährten Campervans und Teilintegrierten belässt Bürstner als „B66“ Sondermodelle mit erweiterter Ausstattung und Preisvorteil im Angebot. Auch bei den Caravans stellt Bürstner acht Modelle als „B66“ Sondermodell zur Wahl. Sie umfassen sowohl Grundrisse für Paare als auch Familien in der mittleren Größe zwischen 6,80 und 8 Metern Länge. Carado, Halle 6/A07 Carado zeigt mit dem Van V347 ein neues teilintegriertes Reisemobil mit Längseinzelbetten im Heck. Der Clou des V347 ist ein neuartiges Schwingbett das neben der Sitzgruppe im vorderen Wagenteil an der rechten Wand montiert ist. Bei Bedarf schwingt es mithilfe eines Stahlgestänges über die Sitzgruppe und bietet einen zusätzlichen Schlafplatz mit bis zu 100 Kilogramm Traglast. Carado nennt es Clever-Lift-Bett. Zudem zeigt Carado mit dem T 328 ein teilintegriertes Reisemobil mit fünf für die Fahrt zugelassenen Sitzplätzen und fünf Schlafplätzen: Zwei in den Längseinzelbetten im Heck, zwei weitere im Hubbett über der Sitzgruppe und einem in der umgebauten Sitzgruppe darunter. Bei den Kastenwagenausbauten zeigt Carado mit dem CV 541 pro einen ungewöhnlichen Grundriss auf einen 5,41 Meter kurzen Fiat Ducato. Das Fahrerhaus bleibt dabei komplett mit einer Wand abgetrennt. Betreten wird der Wohnraum durch die Schiebetür. Im Erdgeschoss stehen Koch-/Wohnbereich und Bad zur Verfügung. Eine Treppe führt hinauf zum Schlafplatz unter dem Klappdach. Caravelair, Halle 11/C44 Die zum französischen Trigano Konzern gehörende Marke Caravelair bringt mit dem Alba 462 einen neuen kompakten Touringcaravan auf den Markt. Bei 6,65 Metern Gesamtlänge ist der Wohnwagen nur 2,10 Meter breit und dadurch leichter durch Ortsdurchfahrten manövrierbar. Längseinzelbetten im Bug, Sitzgruppe für zwei und Sanitärraum im Heck sowie ein Küchenblock in der Mitte kennzeichnen den Grundriss. Carthago, Halle 4/A12 Carthago hat seine Chic C-Line-Baureihe einer gründlichen Überarbeitung unterzogen. Die sechs vollintegrierten Reisemobile sind nun wahlweise auf Fiat Ducato oder Mercedes Sprinter zu haben, jeweils mit AL-KO Tiefrahmenchassis. Das Außendesign ist durch eine neue Front dynamischer geworden. Im Innenraum wirken die Integrierten nun geradliniger und klarer. Mit Längen zwischen 7,39 und 8,78 Metern richten sich die Modelle an Kunden mit hohem Anspruch an Wohnkomfort. Challenger, Halle 10/C20 Die Trigano-Marke Challenger erweitert ihre S-Baureihe der schmalen teilintegrierten Reisemobile mit 2,10 Metern Breite um das neue Modell S 294. Hier finden vier Personen Platz. Zwei im Querdoppelbett im Heck und zwei auf dem serienmäßigen Hubbett über der Sitzgruppe im Bug des S 294. Chausson, Halle 11/A45 Auch Chausson, die Schwestermarke von Challenger aus der Trigano Gruppe, bringt den schmalen S 294 im Modelljahr 2026 neu heraus. Die beiden Schwestermodelle unterscheiden sich lediglich hinsichtlich Innen- und Außendekor, Ausstattung und Preis. Clever Mobile, Halle 12/B03 Die Marke Clever zeigt auf dem CARAVAN SALON den neuen Kastenwagenausbau 636 Active. Charakteristisch ist sein Längsdoppelbett im Heck, das elektrisch in der Höhe verstellt werden kann und so darunter viel Stauraum für sperrige Sportgeräte schafft. Basis des Ausbaus ist ein Citroën Jumper oder Fiat Ducato mit einer Länge von 6,36 Metern. Concorde Reisemobile, Halle 16/E24 Concorde hat seine Carver-Baureihe überarbeitet. Ebenfalls auf Iveco Daily bis 7,5 Tonnen gebaut, erhalten die sieben Liner-Modelle ein neues Cockpit mit einem Monitor mit 360 Grad Bird-View Ansicht zum leichteren Rangieren und einem zweiten Monitor für Navigation. Corigon, Halle 6/B07 Die Hymer Gruppe erweitert ihr Produktangebot gleich um eine neue Marke. Unter dem Namen Corigon sollen in Zukunft Reisemobile präsentiert werden, die sich auf das Wesentliche konzentrieren. Vier Baureihen mit insgesamt zwölf Modellen machen im Modelljahr 2026 den Anfang. Drei Kastenwagenausbauten gehen unter dem Namen Camper Van CV an den Start. Drei teilintegrierte Modelle umfasst die Slim-Baureihe auf Ford Transit, zwei weitere die „Pure“ genannten Teilintegrierten auf Fiat Ducato und vier Grundrisse bietet die Advanced-Baureihe ebenfalls auf Fiat Ducato. Dethleffs, Halle 6/D05 Dethleffs hat zum Modelljahr 2026 vier seiner beliebtesten Reisemobil-Baureihen als Sondermodell Active aufgelegt. Insgesamt 19 Modelle kommen als Trend Active, JustGo Active, Globebus Go Active und Globetrail Active auf den Markt. Reichlich Ausstattung mit großem Preisvorteil soll die Kunden von den teilintegrierten und integrierten Reisemobilen überzeugen. Bei den vollintegrierten Reisemobilen ergänzt Dethleffs einen in dieser Fahrzeugklasse eher selten zu findenden Grundriss: Ein Vollintegrierter für Familien. Bis zu fünf Personen finden im XL Family einen Schlafplatz. Dazu hat er zwei Längseinzelbetten im Heck, ein Hubbett über den Fahrersitzen und eine zum Bett umbaubare L-Sitzgruppe. Auch bei den Wohnwagen hat Dethleffs Active Sondermodelle zusammengestellt. Drei Vertreter der C’Joy-Baureihe und vier Varianten der C’Go-Serie kommen mit reichlich Ausstattung und attraktivem Preisvorteil zum CARAVAN SALON nach Düsseldorf. Dreamer, Halle 4/B01 Zwei neue Kastenwagenausbauten zeigt die Marke Dreamer der französischen Rapido Gruppe zur Saison 2026: Den Campervan Dreamer Fun D 68 mit 6,36 Metern Länge und Längseinzelbetten im Heck sowie den 5,41 Meter kurzen Dreamer Select D 43 Up mit Querdoppelbett im Heck. Eberspächer, Halle 13/A49 Die neuen Dachklimaanlagen der Breezonic Slim-Serie von Eberspächer sind mit 22 Zentimetern Höhe besonders flach und können dank integrierter Wärmepumpe nicht nur kühlen, sondern auch heizen. Eifelland, Halle 15/A09 Die junge Campervan-Marke Eifelland zeigt als drittes Modell ihres Portfolios zur Saison 2026 den Eifelland Relax Master auf Basis des Renault Master. Trotz 6,38 Metern Gesamtlänge verzichtet der Ausbau auf einen Sanitärraum und setzt dafür voll auf ein großes Längsdoppelbett und reichlich Stauraum darunter. Eriba, Halle 6/B07 Die Marke Eriba aus dem Hymer-Konzern hat für den CARAVAN SALON ihre Caravan-Baureihen Feeling und Novaline komplett überarbeitet. Drei Modelle der Feeling-Baureihe und sechs Varianten der Novaline-Serie stellen kompakte Abmessungen und niedriges Gewicht ins Zentrum der Entwicklung. Der Feeling hat ein Hubdach, das im angehobenen Zustand volle Stehhöhe herstellt. Die Novaline-Modelle haben stets volle Stehhöhe mit festem Dach. Außen- und Innengestaltung wurden erneuert und auch die technische Ausstattung mit einer App-Steuerung der Bordtechnik modernisiert. E-Trailer, Halle 13/F90 Mit seinem neuen Linked-System zur Integration von Fremdgeräten zeigt E-Trailer auf dem CARAVAN SALON 2025 erstmals die dritte Ausbaustufe seiner Smart Caravaning-Lösung zur Steuerung von Campingfahrzeugen per App. E-Trailer Linked kann nun über verschiedene BUS-Systeme zum Beispiel mit dem Kühlschrank oder der Klimaanlage kommunizieren, diese an- und ausschalten und steuern. Das Linked-System ist als OEM-Produkt für Reisemobil und Caravanhersteller konzipiert. Es wird in Abstimmung mit den Herstellern auf die Anforderungen der jeweiligen Fahrzeuge angepasst und ab Werk in Neufahrzeuge integriert. Etrusco, Halle 6/A01 Der italienische Hersteller Etrusco aus der Hymer-Gruppe bringt drei neue Modelle zum CARAVAN SALON. Zwei davon sind Alkoven Reisemobile auf Fiat Ducato mit vier Schlafplätzen und 6,99 Metern Gesamtlänge. Der A 6.9 DB und A 6.9 SB unterscheiden sich dabei nur durch die Anordnung der Betten im Heck – einmal als Querdoppelbett und einmal als Längseinzelbetten. Das dritte Modell ist der Kastenwagenausbau CV 600 SB auf Fiat Ducato mit Einzelbetten im Heck bei einer Gesamtlänge von knapp 6 Metern. Eura Mobil, Halle 10/C43 Mit der Baureihe Profila T Freestyle möchte Eura Mobil ein größeres Raumangebot in die Klasse der teilintegrierten Reisemobile bis 3,5 Tonnen bringen. Der Profila Freestsyle ist daher konsequent auf Leichtbau ausgerichtet. Zwei Grundrisse stehen im Modelljahr 2026 zur Auswahl: Der 726 EF mit Längseinzelbetten im Heck und der 726 QF mit Queensbett im Heck. Das Modell QF bietet mit stolzen 7,66 Metern Länge eine für die 3,5 Tonnen-Klasse bisher ungekannte Größe. Mit dem Integra Line GT 726 QF zeigt Eura Mobil den zweiten Vertreter der neuen Integrierten-Baureihe auf Mercedes Benz Sprinter erstmals dem Publikum. Das neue Modell 726 QF mit Queensbett im Heck ist mit 7,64 Metern Länge gut 17 Zentimeter länger als die bereits bekannte Einzelbett-Variante. Fendt Caravan, Halle 5/C03 Fendt Caravan erweitert seine Bianco-Baureihe um das Modell Bianco Selection 495 SG. Der Zwei-Personen-Caravan verfügt über eine Sitzgruppe im Bug und Längseinzelbetten im Heck. Dazwischen sind Bad, Küche und Schränke angeordnet. Zusätzlich nimmt Fendt zwei neue Activ-Grundrisse in der Baureihe Apero ins Programm. Der Apero Activ 560 SKM ist ein Familien-Caravan mit Stockbetten, der Apero Activ 390 FH ein kompakter Touringcaravan für Paare. Zudem präsentiert Fendt seine neue Marke Next (siehe unter N). Fleurette, Halle 4/D12 Die französische Marke Fleurette aus der Rapido-Gruppe stellt auf dem CARAVAN SALON den neuen Teilintegrierten Migrateur 69 LJG auf Fiat Ducato Basis vor. Längseinzelbetten im Heck, davor Küchenblock und Bad im Mittelteil sowie eine Sitzgruppe mit Face-to-Face-Sitzbänken und drehbaren Fahrerhaussitzen im Bug kennzeichnen den 6,99 Meter langen Grundriss. Unter dem Markennamen Florium bietet Fleurette zudem zwei neue Kastenwagenausbauten auf Fiat Ducato an. Der Black Pearl 59 LT und 63 LJ unterscheiden sich in Länge und Bettenanordnung im Heck. Während der 5,99 Meter lange 59 LT ein Quer-Doppelbett im Heck hat, wartet der 6,36 Meter lange 63 LJ mit Längseinzelbetten im Heck auf. Forster, Halle 10/C25 Forster stellt zur Saison 2026 die Kastenwagen-Baureihe Livin’up Pro mit drei Grundrissen auf Basis des Citroën Jumper vor. Mit Längen von 5,41 bis 6,36 Metern, solider Ausstattung und attraktivem Preis sollen vor allem Caravaning-Neueinsteiger gewonnen werden. Zudem präsentiert Forster mit den I 745 QF und I 745 EF zwei neue Vollintegrierte in der Einsteigerklasse. Der 745 EF setzt dabei auf Längseinzelbetten im Heck, der 745 QF auf ein zentrales Doppelbett. Davor befindet sich ein Raumbad mit Dusche und schließlich die Küche und die Sitzgruppe. Beide Vollintegrierten sind 7,45 Meter lang und bauen auf dem Fiat Ducato-Chassis auf. Frankia, Halle 17/B22 Der Next:Cruiser 7.6 L soll für Frankia die Keimzelle einer neuen Premium-Baureihe von autarken teilintegrierten Reisemobilen sein. Auf Basis des Mercedes Sprinter oder Fiat Ducato setzt der Next:Cruiser auf Stromspeicher mit bis 470 Ah und drei Solarpanele auf dem Dach. 180 Liter Frischwasser und eine ALDE-Warmwasserheizung sollen für Autarkie zu allen Jahreszeiten sorgen. Zusätzlich präsentiert Frankia anlässlich des 65 Jährigen Firmenjubiläums vier Sondermodelle namens Together. Die Together A 680 und Together A 740 als Alkoven-Variante und Together I 680 und I 740 als integrierte Version. Alle vier bauen auf dem Fiat Ducato auf und haben eine Rundsitzgruppe im Heck und Längsbetten im Alkoven beziehungsweise im Hubbett über den Fahrersitzen. Dazu eine großzügige Ausstattung mit Preisvorteil wie bei Sondermodellen üblich. Freedo, Halle 12/C81 Freedo ist die Tochtermarke des polnischen Kastenwagenausbauers Affinity. Zum CARAVAN SALON 2025 zeigt sie den M 599 auf Basis eines MAN TGE. Multifunktionalität steht im Mittelpunkt des Fahrzeugs. So kann die große Rundsitzgruppe im Heck nachts als Bett umgebaut werden und tagsüber als Sitzgruppe fungieren. Giottiline, Halle 11/D27 Der italienische Hersteller Giottiline ergänzt seine Auswahl von teilintegrierten Reisemobilen um drei neue Modelle. Die beiden Compact CX 60 und CX 66 mit 5,99 und 6,60 Metern Länge bieten ein optionales Hubbett über der Sitzgruppe und ermöglichen damit vier Schlafplätze. Der Teilintegrierte Siena 396 bringt auf 7,4 Metern Länge einen Familiengrundriss mit Etagenbetten im Heck und Hubbett über der Sitzgruppe im vorderen Wagenteil. Zusätzlich wird der Giottivan 64 G erstmals in Düsseldorf gezeigt: Ein 6,36 Meter langer Kastenwagenausbau mit Längseinzelbetten im Heck. Als Basisfahrzeug haben die Kunden dabei die Wahl zwischen Fiat Ducato, Citroën Jumper oder Peugeot Boxer. Der Giottiline Siena 485 schließlich ist ein neues Alkoven-Reisemobil mit 6,99 Metern Länge und Längseinzelbetten im Heck zusätzlich zum großen Alkovenbett über dem Fahrerhaus. Goldschmitt, Halle 14/D05 Goldschmitt erweitert die Steuerung seiner RHC-Zusatzluftfederungen um eine Wiegefunktion für die Hinterachse: Damit lässt sich das tatsächliche Gewicht der Hinterachse über die Smartphone-App ermitteln und anzeigen. Ein wichtiger Zugewinn an Sicherheit und Kontrolle zur Vermeidung von Überladung. Hymer, Halle 6/B07 Sowohl die Teilintegrierten B-MC T als auch die vollintegrierten Reisemobile B-MC I unterzieht der Traditionshersteller aus Bad Waldsee einem gründlichen Update. Neben dem neuen Design fällt besonders der neu gestaltete Badbereich mit großzügiger Dusche ins Auge sowie die smarte Hymer Connect App, durch die sich viele Funktionen vom Smartphone aus prüfen und schalten lassen. Zu Beginn stehen zwei teilintegrierte und zwei vollintegrierte Grundrisse auf Basis des Mercedes Sprinter zur Auswahl. Zudem zeigt Hymer eine neue Campervan-Baureihe auf Fiat Ducato unter dem Namen Columbia, die zunächst mit den zwei Modellen 600 und 601 startet. Itineo, Halle 4/C02 Itineo baut das teilintegrierte Reisemobil Cozi PS 740 zum Familienmobil um. Im Heck steht nun ein Etagenbett für zwei Kinder mit Sitzgruppe davor. Eine Schiebetür schließt das Kinderzimmer vom Rest des Wohnmobils ab. Die Eltern schlafen im Hubbett über der Sitzgruppe im vorderen Teil des Reisemobils. Ebenfalls neu ist das vollintegrierte Reisemobil Famili JC 740. Auf 7,42 Metern Länge hat es Platz für eine fünfköpfige Familie. Als Schlafstätten dienen dabei Längseinzelbetten im Heck, ein Hubbett über den Fahrerhaussitzen sowie ein Schlafplatz in der umbaubaren Sitzgruppe. Die Längseinzelbetten im Heck lassen sich elektrisch in der Höhe verstellen, um mehr Stauraum in der Heckgarage darunter zu schaffen. Karmann Mobil, Halle 15/E24 Im Heck des neuen Karmann Dexter 635 dominiert ein Längsdoppelbett den Raum, das elektrisch höhenverstellbar ist. Der opulente Stauraum darunter lässt sich so flexibel nutzen. Flexibilität ist auch die Devise beim Schwenkbad: Dank einer klappbaren Wand lässt sich das Bad als Dusche oder Toilette nutzen. Karoo Oy, Halle 7a/B18 Das finnische Designerteam von Karoo kündigt für den CARAVAN SALON 2025 einen neuen kompakten Touringcaravan mit unter 750 Kilogramm zulässigem Gesamtgewicht an. Er soll gerade einmal fünf Meter lang sein und 2,05 Meter breit. Ein Aluminiumchassis und ein leichter GfK-Aufbau sparen Gewicht. Der Wohnwagen ist besonders für E-Autos mit niedrigen Zuggewichten konzipiert. Knaus, Halle 1/A01 Knaus zeigt auf dem CARAVAN SALON 2025 die neue Campervan-Baureihe Boxtime. Die vier Modelle setzen beim Innenausbau vor allem auf Leichtigkeit. Bis zu 60 Kilogramm Gewichtsersparnis wurde aus dem Möbelbau der 5,41 bis 6,36 Meter langen Modelle herausgeholt. Ein neues Schwenkband mit Thetford Kassettentoilette lässt sich dank einer klappbaren Wand auch als Dusche nutzen. Bei den Caravans sortiert Knaus seine Südwind-Baureihe neu. Einige Grundrisse fallen weg, dafür werden drei neue Familien-Caravans 580 UF, 650 UK und 650 UDF ins Programm aufgenommen. Alle drei haben ein französisches Bett im Heck und einen daneben platzierten Sanitärraum. La Strada, Halle 15/D26 la strada Fahrzeugbau gönnt allen Modellen der Saison 2026 eine neue Smart Caravaning Elektronikausstattung. Am neuen digitalen Bedienpanel und per App auf seinem Smartphone kann der Kunde dann Füllstände, Temperatur und Fahrzeugneigung ablesen. Heizung, Kühlschrank, Wasserpumpe, Außenbeleuchtung und 12-Volt-Strom lassen sich auch per App ein- und ausschalten. Je nach Version geschieht das serienmäßig im Nahbereich um das Fahrzeug oder optional auch per Fernabfrage von überall auf der Welt. LMC Caravan, Halle 6/A04 Zum Modelljahr 2026 führt LMC die neue Tracer-Baureihe ein. Fünf teilintegrierte Reisemobile auf Basis des Fiat Ducato oder Citroën Jumper setzen vor allem auf Leichtbau, um mit Längen zwischen 6 und 7,3 Metern noch in der 3,5 Tonnen Klasse zu fahren. Leicht und günstig ist wohl auch das Motto der zwei neuen Caravan-Modelle in der LMC e:dero-Baureihe. Der 470 k ist mit vier Schlafplätzen für Familien konzipiert, der kompakte 400 c richtet sich an Paare. Malibu, Halle 4/B22 Zur Saison 2026 hat Malibu seine vollintegrierten Reisemobile rundum neu gestaltet. Mit fünf Grundrissen geht die Integrierten-Baureihe von Malibu dabei an den Start. Ein neues kantigeres Front- und Heckdesign verleiht den Modellen mehr Dynamik. Im Innenraum prägen klare Linien und konkave Hängeschranklappen ohne Griffe das Bild. Kunden können zwischen dem Fiat Ducato und dem Mercedes Sprinter als Basis wählen. Mit dem Relax 640 LE R zeigt Malibu zudem einen neuen Kastenwagenausbau, der den Grundstein für die neue Relax-Baureihe legen soll. Im 6,36 Meter langen Fiat Ducato baut Malibu dazu Längseinzelbetten im Heck ein, einen kompakten Küchenblock und ein für diese Fahrzeugklasse geräumiges Bad. Masuria, Halle 11/B07 Erstmals auf dem CARAVAN SALON vertreten ist die neue polnische Marke Masuria. Sie präsentiert zwei teilintegrierte Reisemobile auf Basis des Ford Transit. Sie unterscheiden sich vor allem durch die Bettenanordnung im Schlafbereich. Der 780 TL setzt auf Längseinzelbetten im Heck, der 790 TL auf ein Queensbett. Davor befindet sich jeweils ein Raumbad und der Koch-/Wohnbereich. Optional ist ein Hubbett über der Sitzgruppe als weitere Schlafstatt für zwei verfügbar. Megasat, Halle 13/C60 Der Hersteller für Satellitentechnik und Camping-TVs zeigt gleich acht Neuheiten auf dem CARAVAN SALON. Mit der tragbaren vollautomatische Sat-Anlage Campingman Portable 2 stellt Megasat erstmals eine Antenne mit integrierter Sat-Hold-Technologie vor. Das Gerät hält das Signal auch bei einer Signalstärkeänderung oder nach einem Stromausfall. Eine erneute Suche entfällt. Zusätzlich zeigt Megasat die neuen Empfangsgeräte Caravanman Kompakt 4, Traveller-Man 4 und Caravanman 55 Professional GPS. Dazu noch vier Smart-TV-Screens mit 19, 22, 24 und 27 Zoll Bildschirmgröße der neuen Royal Line V Smart-Serie. Mobilvetta, Halle 10/A18 Der italienische Reisemobil-Hersteller Mobilvetta hat zum Modelljahr 2026 seine Kea-Baureihe komplett überarbeitet. Vier Grundrisse teilen sich auf zwei Aufbauformen auf: Zwei als Integrierte Kea I und zwei als Teilintegrierte Kea P. Alle vier bauen auf Fiat Ducato auf und sind 7,47 Meter lang. Im Innenraum möchte Mobilvetta Design und Alltagstauglichkeit miteinander verbinden. Morelo, Halle 16/A04 Der Luxusmobile-Hersteller aus Franken hat seine Einsteiger Baureihe Home komplett überarbeitet. Auf Basis des Iveco Daily baut Morelo drei Grundrisse, die den Einstieg in die Welt der „Liner“ genannten Landyachten darstellen. Das leichteste und kürzeste Modell der Morelo-Familie ist zukünftig der Home 78 L, der mit 5,6 Tonnen zulässigem Gesamtgewicht und 7,81 Metern Länge noch mit der C1 Fahrerlaubnis zu fahren ist. Next, Halle 5/C03 Mit Next stellt Fendt Caravan eine neue Marke vor, die vor allem leichte und unkomplizierte Wohnwagen für kleine Zugwagen und E-Autos repräsentieren soll. Den Anfang macht auf dem CARAVAN SALON 2025 der Next 380. Er bietet drei Schlafplätze, Sitzgruppe, Küchenblock und Bad bei einer Gesamtlänge von nur 5,88 Meter und einem zulässigen Gesamtgewicht von 1.000 Kilogramm. Niesmann + Bischoff, Halle 6/C01 Der Hersteller von Luxusmobilen aus der Hymer-Gruppe ergänzt zum CARAVAN SALON 2025 die Arto-Baureihe um das neue Modell Arto 84. Der 8,45 Meter lange Arto 84 bildet nun die Mitte der drei Modelle in der Arto Baureihe auf Mercedes Sprinter. Die luxuriösen Liner bieten höchsten Wohnkomfort mit edlem Ambiente und hochwertiger technischer Ausstattung. Niewiadow, Halle 11/C03 Zum 50ten Jubiläum zeigt der traditionsreiche polnische Caravanhersteller seinen Erstling N126-D in einer farbenfrohen Gelato-Edition. Innen- und Außendesign heben sich durch die drei wählbaren Farbtöne Himbeere, Limone und Pistazie deutlich ab. Inspiriert wurde die Gestaltung vom italienischen Eismacherhandwerk. Der N126-D ist seit Firmengründung im Programm und hat sich seither technisch weiterentwickelt. Mit seinen kompakten Abmessungen von 4,5 Metern Gesamtlänge und 850 Kilogramm zulässigem Gesamtgewicht ist er inzwischen ein Klassiker der kompakten Touringcaravans. Zusätzlich präsentiert der polnische Hersteller mit dem neuen Villetta 780 seinen bisher größten Caravan. Im Stil eines Tiny Houses mit viel Holz eingerichtet, bringt der Doppelachser mit 9,37 Metern Gesamtlänge rund 2.700 Kilogramm Gesamtgewicht auf die Waage. Notin, Halle 4/A06 Neu im Programm des französischen Herstellers Notin sind die zwei teilintegrierten Reisemobile Victoria und Bruges. Victoria baut auf Fiat Ducato auf und ist 6,99 Meter lang, der ebenfalls knapp sieben Meter lange Bruges basiert auf einem Mercedes Sprinter. Outwell, Halle 3/C70 Unter dem Namen Road Trip Air zeigt der dänische Vorzelt- und Campingzubehör-Spezialist auf dem CARAVAN SALON 2025 drei Luftvorzelte für kompakte Campingbusse. Talladega, Daytona und Santa Monica heißen die frei stehenden Vorzelte in verschiedenen Größen für Campingbusse und Kastenwagenausbauten in unterschiedlichen Basisfahrzeugen. Panama, Halle 11/A57 Der Campingbus-Spezialist aus Spanien zeigt zwei neue Modelle auf Ford Transit Custom. Der P09 ist das neue Einstiegsmodell mit Fokus auf hoher Alltagstauglichkeit mit zwei Schiebetüren im Fond und zum Bett umbaubarer Rücksitzbank. Der P59+ mit langem Radstand bietet hingegen schon eine Heckküche und Banktoilette sowie eine Duschmöglichkeit. Phoenix, Halle 16/E04 Der neue Phoenix Maxi-Alkoven 7800 RSL verzichtet vollständig auf Gas als Brennstoff. Der 7,5 Tonner auf Iveco Daily heizt mit Diesel, kocht mit Induktion und kühlt die Lebensmittel mit Strom. Alkoven mit Längseinzelbetten, dahinter ein großes Raumbad mit separater Dusche, Küche und Schränke im Mittelteil und eine geräumige Rundsitzgruppe im Heck kennzeichnen den Grundriss des Premium-Reisemobils für zwei Personen. Pilote, Halle 17/A20 Der französische Reisemobil Hersteller Pilote erweitert seine Atlas-Baureihe auf Basis des Ford Transit um zwei weitere teilintegrierte Modelle. Der Atlas 630 G mit Querbett im Heck ist rund 6,3 Meter kurz, das Modell Atlas 670 Gj mit Längseinzelbetten bringt es auf 6,7 Meter Länge. Bei beiden steht optional ein Hubbett über der Sitzgruppe als zweite Schafstatt zur Wahl. Bei den Kastenwagenausbauten bringt Pilote mit dem neuen Vega 630S ein Modell auf Basis des Fiat Ducato, in dem im Heck zwei Doppelbetten übereinander Schlafplatz für vier Personen schaffen. Pioneer Electronics, Halle 13/A44 Ein Mediacenter mit 10,1 Zoll Bildschirm speziell für Reisemobile stellt Pioneer unter dem Namen SPH-EV0107DAB vor. Das Besondere: Das Modell gibt es als Ein- und Zwei-Schacht Variante und es lässt sich auf alle gängigen Basisfahrzeuge für Reisemobile anpassen: Fiat Ducato und die Stellantis-Schwestermodelle, Mercedes Sprinter, Ford Transit, Renault Master und Volkswagen Transporter. Pössl, Halle 12/A02 Der neue Pössl Summit 600 L ergänzt die Auswahl des Marktführers im Segment der Kastenwagenausbauten. Dabei bringt Pössl in einem 5,99 Meter langen Fiat Ducato Längseinzelbetten im Heck unter. Der Marktführer setzt dabei auf eine moderne Innenraumgestaltung und eine günstigen Einstiegspreis. Rapido, Halle 4/C05 Der französische Hersteller Rapido hat seine zwei vollintegrierten Reisemobile 850F und 80dF vollständig überarbeitet. Die neuen Modelle erhalten eine neue Front mit größerer Windschutzscheibe für bessere Sicht und bessere Geräuschdämmung. Der 80 dF erhält zudem auch ein neues Heckdesign. Basis der Vollintegrierten ist der Fiat Ducato. Reich, Halle 14/C07 Reich bringt zum 50 Firmenjubiläum gleich drei neue Produkte für das Wasserssystem in Freizeitfahrzeugen nach Düsseldorf. Der Myclean active ist ein externer Aktivkohlefilter zur Befüllung von Wassertanks, der dank Gardena-Anschlüssen schnell und einfach zwischen Einfüllstutzen und Schlauch montiert wird. Zusätzlich kann der neue Myclean water steril ergänzt werden, der für mikrobiologisch einwandfreies Wasser sorgt. Dazu feiert die neue Powerflow-Druckpumpe mit einer Förderleistung von 12 L/min und 2,7 bar Druck Premiere. Rimor, Halle 11/B60 Rimor nimmt zum Modelljahr 2026 umfassende Änderungen an seiner Modellpalette vor. Gleich sechs neue Alkoven-Reisemobile stellt Rimor auf dem CARAVAN SALON 2025 aus. Sarus nennt sich die neue Baureihe, zu der auch acht teilintegrierte Grundrisse gehören. Die Alkoven-Modelle zielen vor allem auf Familien und bieten entsprechend bis zu sieben Schlafplätze. Die Teilintegrierten sind eher für Paare oder bis zu vier Personen geeignet, je nach Einsatz eines Hubbettes über der Sitzgruppe im vorderen Wagenteil. Zudem baut Rimor seine beliebte Super-Brigg-Alkovenreihe nun auf Ford Transit mit Vorderradantrieb auf und unterzieht die vier Modelle einer gründlichen Überarbeitung des Interieurs. Die gleiche Behandlung erfahren die fünf Grundrisse teilintegrierten Sailer-Baureihe. Roller Team, Halle 10/B23 Mit dem Kronos 266 TL zeigt Roller Team einen neuen Teilintegrierten auf dem CARAVAN SALON: Queensbett im Heck, davor ein Raumbad und Koch-/Wohnbereich im Bug kennzeichnen das 7,45 Meter lange Reisemobil. Zudem zeigt Roller Team die neue Kastenwagen-Baureihe Livingston Go, die Einsteiger in vier Modellen mit umfangreicher Ausstattung und attraktiven Preisen überzeugen möchte. Als Basis dient dabei der Citroën Jumper mit Längen zwischen 5,41 und 6,36 Metern. Sprite Caravans, Halle 7a/A12 Der britische Hersteller Sprite bringt zehn überarbeitete Caravans der Saison 2026 mit nach Düsseldorf. Vier Modelle aus der Mondial-Baureihe und sechs Grundrisse aus der Cruzer-Modellpalette stehen zur Wahl. Die Grundrisse unterscheiden sich von den europäischen Modellen vor allem durch große Bäder mit Duschkabinen und die typisch britischen dreiteiligen Bugfenster. Sterckeman, Halle 11/B55 Die zur französischen Trigano-Gruppe gehörende Caravan Marke Sterckeman zeigt auf dem CARAVAN SALON 2025 den neuen Grundriss Sport Edition 492 LJ mit 6,65 Metern Gesamtlänge und lediglich 1.300 Kilogramm zulässigem Gesamtgewicht. Die Längseinzelbetten im Bug und die ebenfalls zum Bett umbaubare Rundsitzgruppe im Heck machen ihn für Paare oder sogar kleine Familien einsetzbar. Zudem hat Sterckeman seine Caravan-Baureihe Open Edition überarbeitet und präsentiert drei Grundrisse mit GfK Aufbau und XPS-Isolierung in Sandwich-Bauweise mit gehobener Oberklasse-Ausstattung. Dazu gehört auch eine optionale Smart Caravaning Steuerung, mit der Füllstände, Temperatur und weitere Informationen über eine Smartphone-App abrufbar sind. Tabbert, Halle 1/A01 Tabbert möchte mit den sechs Sondermodellen der Pantiga Finest Edition den Premiumanspruch der Caravan Marke neu aufleben lassen. Die zwischen 4,94 und 7,52 Metern langen Wohnwagen für Paare oder Familien sind mit reichlich Ausstattung zu einem erheblichen Preisvorteil kalkuliert. Thetford, Halle 14/B03 Der Marktführer für Campingtoiletten zeigte im vergangenen Jahr einen Prototypen einer Trockentrenntoilette. Auf dem CARAVAN SALON 2025 stellt Thetford nun die serienreife neue Trenntoilette der S-Serie vor sowie ein Umrüstkit der SK Serie für bereits eingebaute Wassertoiletten, die auf den Cassettentoiletten C220 und C260 basieren. Truma, Halle 14/B07 Warmwasser in Rekordzeit verspricht die neue Truma Heizung Combi Neo. Dabei soll sie nicht nur leistungsfähiger sein als das nun fast schon 20 Jahre im Markt befindliche Vorgängermodell, sondern zugleich auch kompakter und leichter. Zunächst wird sie Gas und Strom als Kraftstoff kombinieren, in späteren Varianten auch Diesel. Vario Mobil, Halle 16/C23 Perfect Assoluto nennt Vario Mobil sein neues Flaggschiff, das zeigen soll, was im Segment der Luxusliner möglich ist. 26 Tonnen bringt die 12 Meter lange Landyacht auf die Waage. Vier Slide-Outs vergrößern das mit rund 30 Quadratmetern schon im eingefahrenen Zustand großzügige Raumangebot. Sind sie ausgefahren, hat allein das Schlafzimmer zehn Quadratmeter Grundfläche. Natürlich befindet sich darunter eine PKW-Garage. Die Modelle werden nach Kundenwunsch gestaltet und ausgestattet. Nur feinste Materialien werden mit größter handwerklicher Sorgfalt verarbeitet. Nach der Individualisierung sind siebenstellige Preise wahrscheinlich, aber darüber herrscht Diskretion. Weinsberg, Halle 1/A01 Weinsberg ergänzt die CaraSuite-Baureihe im Modelljahr 2026 um zwei neue Grundrisse. Die beiden teilintegrierten Reisemobile unterscheiden sich vor allem im Schlafbereich: Der 650 MEG kommt mit Längseinzelbetten im Heck, der 700 DX mit einem mittig angeordneten Queensbett. Bei den Caravans hat Weinsberg seine CaraOne Baureihe innen grundlegend überarbeitet. Die elf Modelle, die das komplette Größenspektrum von Touring- bis zum Großraumwohnwagen abdecken, sind funktional und schnörkellos eingerichtet. So wollen sie in jeder Größenklasse vor allem preisbewusste Käufer ansprechen. Westfalia, Halle 15/E04 Auf dem Ford Transit Custom zeigt Westfalia den neuen kompakten Campingbus namens Kipling. Mit Hilfe von Karosserieverbreiterungen im Heck installiert Westfalia ein Querbett mit immerhin 1,90 Meter Länge und 1,30 Meter Breite im Heck des Ford. Zusätzlich sind zwei Schlafplätze unter dem Aufstelldach nutzbar. Daten und Fakten zum CARAVAN SALON DÜSSELDORF Der CARAVAN SALON DÜSSELDORF 2025 ist von Samstag, 30. August bis Sonntag, 7. September 2025 jeweils von 10 bis 18 Uhr geöffnet. Am Preview Day, Freitag, 29. August, ist die Ausstellung für Fachbesucher, Medienvertreter und eingeladene Gäste geöffnet. Die Tageskarte kostet für Erwachsene am Wochenende 20 Euro, werktags 18 Euro; Ermäßigt (Schüler, Studenten, Club CARAVAN SALON & boot, ADAC) am Wochenende 18 Euro, werktags 16 Euro), für Kinder (6 bis 12 Jahre) beträgt das Tagesticket am Wochenende und werktags 6 Euro. Darüber hinaus wird von Montag bis Freitag ein Nachmittagsticket für 10 Euro angeboten (von 14 bis 18 Uhr). Die Preise für den Preview Day liegen für Erwachsene bei 39 Euro (ermäßigt 35 Euro), Kinder von 6 bis 12 Jahren zahlen 6 Euro. Die Tickets können ausschließlich online bestellt werden. Aktuelle Informationen und Neuigkeiten gibt es unter www.caravan-salon.de .", + "tags": [], + "status": "Trash", + "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5935", + "images": [], + "source": "https://www.camping-news.de/rss/", + "source_name": "Camping-News", + "created_at": "2025-08-28T10:29:34.155078", + "word_count": 4993 + }, + { + "id": "743bd82985bc239c4b853d963d5a4066", + "title": "Mercedes trifft Innovation - der variable \nCampervan unter 6 Metern", + "date": "Fri, 08 Aug 2025 00:00:00 +0200", + "summary": "Bürstner Habiton 2026", + "text": "Patentiertes Schiebebad für maximale Flexibilität bei Tag und Nacht • Komfortabel reisen auf unter 6 Metern: zwei Einzelbetten, Halbdinette, Küche und Bad • Mercedes-Benz Sprinter als Basis – wahlweise mit Frontantrieb (ab 72.999 €) oder Allrad (ab 86.999 €) • Optimierter Innenraum mit klappbaren Betten, verschiebbarem Bad und cleverer Stauraumorganisation Mit dem neuen Habiton bringt Bürstner zur Saison 2026 einen innovativen Campervan auf Mercedes-Benz Sprinter-Basis an den Start – kompakt, alltagstauglich und technisch durchdacht. Unter 6 Meter lang, aber mit zwei echten Einzelbetten, optionalem Aufstelldach, patentierter verschiebbarer Nasszelle und großzügiger Halbdinette setzt der Habiton neue Maßstäbe in der Klasse der kompakten Premium-Campervans. Der Bürstner Habiton: Kompaktklasse mit Charakter Der Habiton positioniert sich klar im Segment der Mercedes-Campervans – aber mit einem klaren USP: Mehr Raum auf weniger Länge. Möglich macht das eine patentierte Nasszelle, die tagsüber nach vorne verschoben werden kann und so Platz in der Sitzgruppe schafft. Abends wird sie zurückgeschoben, sodass die zwei Einzellängsbetten vollständig ausgeklappt werden können. Auch die Küche ist mitgedacht: Sie ist mit Spüle, Gaskocher und Kompressor Kühlschrank ausgestattet – und bleibt dabei von außen zugänglich. So wird der Habiton auch im Alltag zum flexiblen Begleiter. Raumgefühl trifft Technik: Innen vielfältig, außen kompakt Ob im Zwei-Personen-Modus oder mit optionalem Aufstelldach für bis zu vier Schlafplätze – der Habiton überzeugt durch Vielseitigkeit. Die Halbdinette mit drehbaren Vordersitzen schafft zusammen mit der flexiblen Badlösung und den klappbaren Betten ein überraschend offenes Raumgefühl. Vielfältige Dekor- und Polsteroptionen bieten Individualisierung auf Serienniveau – und bleiben dennoch produktionsfreundlich, kalkulier- und bezahlbar. Aus der Produktion „Die Arbeit mit dem neuen Mercedes-Chassis war anspruchsvoll – besonders in Kombination mit unserer patentierten Schiebebad-Lösung. Aber genau diese Herausforderung hat uns angespornt. Wir wollten ein Fahrzeug, das vier Personen echten Wohnkomfort auf unter sechs Metern bietet – das gibt es so in der Branche nicht. Unsere größte Herausforderung war es, diese technische Innovation mit einer standardisierten, produktionsoptimierten Innenraumvielfalt und einem attraktiven Preis zu verbinden. Dass uns das gelungen ist, macht uns besonders stolz.“ — Felix Sturm, Director Operations & Production, Bürstner Positionierung im Modellportfolio Mit dem Habiton erweitert Bürstner seine Modellpalette um ein durchdachtes Mercedes-Van-Konzept im mittleren Preissegment. Im Gegensatz zu: • Papillon, der als Einstiegsmodell auf Preisbewusstsein setzt, und • Signature, der design- und komfortorientierte Käufer im Bereich unter 3,5 t anspricht, richtet sich der Habiton an mobile, aktive Reisende mit Mercedes-Affinität, die auf kompakter Grundfläche nicht auf Wohnkomfort verzichten wollen. Verfügbarkeit: Produktionsstart des Bürstner Habiton ist ab Jahresbeginn 2026 geplant. Er ist kurz danach bei allen Bürstner Fachhändlern erhältlich. Mehr auf https://www.buerstner.com", + "tags": [], + "status": "Trash", + "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5934", + "images": [], + "source": "https://www.camping-news.de/rss/", + "source_name": "Camping-News", + "created_at": "2025-08-28T10:29:34.486575", + "word_count": 419 + }, + { + "id": "90656d3e3633c1d51404504d9137b283", + "title": "Die neue Wellness Oim am Camping Resort Allweglehen", + "date": "Wed, 06 Aug 2025 00:00:00 +0200", + "summary": "Entspannung mit Weitblick", + "text": "Ein Wohlfühlort mit alpinem Herzschlag: Am Rande des Nationalparks Berchtesgaden lädt die neugestaltete und liebevoll benannte „WellnessOim“ am Camping Resort Allweglehen zu einem alpinen Lebensgefühl mit Rundumverwöhnung ein. Ursprünglichkeit und Regeneration verbinden sich hier auf besondere Weise. Wellness im neuen Glanz Erst kürzlich wurde sie grundlegend renoviert und umgestaltet. Holz, Naturelemente und liebevolle Details aus der regionalen Almkultur erzählen vom Leben in den Bergen, schaffen eine ursprüngliche Atmosphäre, in der man sehr gerne mal die Zeit vergisst und in dem man sofort zur Ruhe kommt. Mit einem eigens dafür fest engagierten Team bietet das Allweglehen vielseitige Massagebehandlungen an, individuell buchbar und abgestimmt auf die persönlichen Bedürfnisse. Das kommt bei den Gästen richtig gut an. Die Angebote wechseln regelmäßig und tragen bezeichnende Namen, die neugierig machen. „Gipfelstürmer, Ruf des Adlers, Bergsteigermassage oder Entspannung unterm Watzmann“ sind nur ein kleiner Ausschnitt und spiegeln die kraftvolle Umgebung wieder. Wohlfühlen mit Panoramablick In den frühen Abendstunden zwischen 17 und 21 Uhr wird die neue WellnessOim samt den weiteren Entspannungsorten am Allweglehen zum beliebten Anlaufpunkt, besonders an regnerischen Tagen oder nach aktiven Touren im Nationalpark Berchtesgaden. Umhüllt von sanfter Wärme schweift der Blick aus der Sauna heraus durch großzügige Panoramafenster auf Watzmann und den daneben liegenden Hochkalter. Der Saunagarten mit der 95 Grad Panorama- und 60 Grad Heusauna, einer Infrarotkabine sowie dem Ruheraum mit Teelounge bietet eine massiv entspannte Umgebung zum Loslassen und einen sanften Übergang zwischen Aktivität und wohltuendem Tagesausklang. Parallel dazu lädt draußen der im Winter bis 32 Grad beheizte Infinity-Pool zum Eintauchen und zu beruhigenden Schwimmzügen ein. Das warme Wasser, kombiniert mit der frischen Bergluft verleiht eine wohltuend befreiende Leichtigkeit. Feste Größe im Wellness-Angebot Zunehmend etabliert haben sich inzwischen in der Hauptsaison die Yoga-Einheiten am Donnerstag sowie Aqua-Gym am Dienstagmorgen – kraftvoll und doch ruhig geführte Bewegungsformen, die Körper wie Geist in Einklang bringen. Die Teilnahme erfolgt unkompliziert über Anmeldung an der Rezeption. Klar ist definitiv, die neue WellnessOim ist mehr als nur ein Ort zum Wohlfühlen und Regenerieren, vielmehr ist sie ein Erlebnis zwischen Ursprünglichkeit, Komfort, Bewegung und Ruhephase. Ein feines Zusammenspiel alpiner Verwurzelung und moderner Entspannung. Aktiv unterwegs im goldenen Herbst In perfekter Kombination dazu stehen die mit regionalen Partnern durchgeführten und ebenfalls direkt am Platz buchbaren Allweglehen Adventures. Zu Land, zu Wasser und in luftige Höhen geht es dabei auf Klettertouren, Wanderungen, Rafting, Canyoning und zu aussichtsreichen Tandemflügen, stets in Begleitung erfahrener Guides. Sind das nicht verlockende Aussichten gerade für den anstehenden Herbst inmitten der Berchtesgadener Bergwelt? Wenn diese sich von ihrer schönsten Seite zeigt, die frische Bergluft für klare Fernsichten sorgt und die behagliche Wärme der „Wellness-Oim“ das Wohlbefinden steigert, dann wird das Camping Resort zu einem echten Kraftort für aktive Entdecker ebenso wie für Ruhesuchende. Informationen über die neuen Wellness- und Aktiv-Angebote unter www.allweglehen.de", + "tags": [], + "status": "Trash", + "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5933", + "images": [], + "source": "https://www.camping-news.de/rss/", + "source_name": "Camping-News", + "created_at": "2025-08-28T10:29:34.739073", + "word_count": 457 + }, + { + "id": "d632c9951fd5849ffe94b0e495c55665", + "title": "Premiere des Modelljahrs 2026 auf diesjährigem Caravan-Salon", + "date": "Tue, 05 Aug 2025 00:00:00 +0200", + "summary": "Neue Evolutionsstufe des Grand \nCalifornia", + "text": "• Avantgardemodell : Neue Holzoptik verstärkt lounge-artige Atmosphäre im hellen und freundlichen Wohn- und Küchenbereich des Grand California • Neue Detaillösungen: Zusätzliche Gepäcknetze perfektionieren den Stauraum; Interieur-Esstisch kann erstmals auch im Außenbereich genutzt werden • Neues Verdunkelungsset: Passgenaue Thermomatten für die Scheiben im Fahrerhaus des Grand California sperren Hitze, Kälte und Blicke aus • Progressives Basisfahrzeug: Der Grand California basiert auf der neusten Version des Crafter; er hat modernste Assistenz- und Infotainmentsystem an Bord Er ist das Avantgardemodell unter den Reisemobilen: der Grand California auf der Basis des progressiven Crafter. Die neuste Evolutionsstufe des Campers wird Volkswagen Nutzfahrzeuge vom 29. August bis 07. September auf dem Caravan-Salon in Düsseldorf vorstellen. Zahlreiche optische und konstruktive Perfektionierungen verbessern den Wohnraum des weiterentwickelten Grand California. Alle neuen Features des in zwei Radständen angebotenen Reisemobils werden im Herbst dieses Jahres in die Baureihe einfließen. Parallel zum Update des Grand California wird Volkswagen Nutzfahrzeuge auf seinem Stand in der Messehalle 16 des Salons zahlreiche weitere neue Camper-Highlights präsentieren. Die Vorab-News zum Grand California des Modelljahres 2026 im Detail: Neue Lounge-Optik: Den Innenraum des Grand California kennzeichnet fortan das neue Dekor „Atami Bambus“, in dem die Tischplatte und die Arbeitsfläche der Küchenzeile ausgeführt sind. Die gleiche Oberflächenoptik besitzt auch der neue Bodenbelag (Küche, Dinette, Laderaum), der aus widerstandsfähigem PVC gefertigt wird. Ebenfalls neu designt wurde der nun schwarze Wasserhahn in der Küche. Gemeinsam mit der neuen Holzoptik setzen sie einen loungeartigen Kontrast zum weißen Interieur und hinterlassen einen fast schon mediterranen Yacht-Charakter. Perfektion im Detail: Der mobile Esstisch kann künftig zudem blitzschnell außen am Küchenblock arretiert werden, um die Mahlzeiten oder das abendliche Glas Wein unter freiem Himmel genießen zu können. Ebenfalls neu an Bord des California 600 (6,0 Meter, Querschläfer) und California 680 (6,8 Meter, Längsschläfer) sind Gepäcknetze in den Oberschränken, die das Verstauen der Kleidung und Utensilien jeglicher Art erleichtern. Zu den neuen optionalen Ausstattungen zählt ein passgenaues Thermomatten- und Verdunkelungsset für die Scheiben im Fahrerhaus. Innovatives Basisfahrzeug: Wie alle aktuellen Crafter, so sind auch die Grand California Modelle bereits seit Juli 2024 serienmäßig mit zusätzlichen neuen Details wie digitalen Instrumenten („Digital Cockpit Pro“), einem neuen Infotainmentsystem mit optisch freistehendem Touchscreen (26 cm, 10,4 Zoll Durchmesser, optional 32 cm und 12,9 Zoll) und Assistenzsystemen wie „Front Assist“ (Notbremsassistent inklusive Radfahrer- und Fußgängererkennung), „Lane Assist“ (Spurhalteassistent), einer Einparkhilfe (Front und Heck) sowie der Verkehrszeichenerkennung ausgestattet. Optional wird seitdem zudem der „Travel Assist“ angeboten, der die assistierte Längs- und Querführung ermöglicht. Gerade im Grand California besonders praktisch ist die elektronische Parkbremse, die über einen Schalter in der Instrumententafel betätigt wird: Da diese neue Lösung den klassischen Handbremshebel im Fußraum ersetzt hat, lässt sich der Fahrersitz nun noch einfacher und schneller in den Wohnraum drehen.", + "tags": [], + "status": "Trash", + "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5932", + "images": [], + "source": "https://www.camping-news.de/rss/", + "source_name": "Camping-News", + "created_at": "2025-08-28T10:29:35.027021", + "word_count": 448 + }, + { + "id": "4ebc6e182dae99dabf74b81e9387fec2", + "title": "Erfolgsmodell TRAIL 280S mit überarbeitetem Grundriss", + "date": "Mon, 04 Aug 2025 00:00:00 +0200", + "summary": "TISCHER Absetzkabine", + "text": "Wenn Ende August am Düsseldorfer Messegelände die Tore zum diesjährigen Caravan Salon (29.08.- 07.09.2025) aufgehen, ist man am Messestand der TISCHER Freizeitfahrzeuge GmbH (Halle 12/Stand B30) voll auf Innovation gepolt. Geschäftsführer Patrick Sauer und die gesamte Belegschaft des renommierten Mainfränkischen Manufaktur-Betriebs ruhen sich nicht auf vergangenen Erfolgsjahren aus. Vielmehr möchten sie das eigenständige Profil des Unternehmens mit spannenden Neuheiten schärfen und fokussieren: „Wie unsere Marktbeobachtung und vor allem zahlreiche konkrete Kundenanfragen zeigen, liegen kompakte Absetzkabinen als Krönung wendiger Pick-ups neuerdings auch bei jüngeren Zielgruppen, kleinen Familien und sportiven Camping-Fans im Trend. Für uns ist das der Anlass, bei Kabinenkonzepten noch familienfreundlicher und vor allem auch an jüngere Adventure-Fans zu denken. Ausgehend davon zeigen wir innovative Lösungen, die wir neu geschaffen, verfeinert und optimiert haben. Wichtig ist immer das Potenzial für individuelle, einzigartige und autarke Freizeitabenteuer.“ Erfolgsmodell TRAIL 280S: familienfreundlicher – auch für den VW T7 Mit den Kabinenmodellen TRAIL/BOX 280/280S konnte TISCHER schon vor Jahren das komfortabel mitfahrende Zuhause speziell für die Pritschenfahrzeuge VW T4, T5 und T6 vorstellen. Nun haben Entwickler und Konstrukteure nochmals konzentriert an Grundriss und Aufteilung gearbeitet, um die Modellvariante TRAIL 280S mit Seiteneinstieg noch familienfreundlicher zu machen. Dazu kommt als weitere Messe-News, dass die 280er-Kabinenvarianten auf Wunsch auch perfekt auf den neuen Pritschenwagen VW T7 passen. Er ist das Nachfolgemodell des VW T6 und lieferbar ab Jahresbeginn 2026. TISCHER Kabinenkonzept für Flatbed-Pick-ups Als Spezialist für Individual- und Sonderaufbauten nutzt TISCHER die vorhandene Kompetenz immer wieder für frappierende Weiterentwicklungen der verschiedenen Produktlinien. So geht nun bald auch eine neue Kabine speziell für Basisfahrzeuge mit Flachpritsche an den Start. Pick-ups dieses Typs werden in Deutschland häufig als Kommunal-Pritsche, Tray-Model oder UTE-Bed bezeichnet. Bei diesen Fahrzeugmodellen ist die Ladefläche hinter dem Fahrerhaus durchgehend flach sowie seitlich und hinten mit abklappbaren, abnehmbaren Bordwänden versehen. So steht viel Fläche für den Kabinengrundriss zur Verfügung. • Gedacht ist das neue TISCHER Kabinenkonzept insbesondere für Camping-Fans, die mit Pferde- oder Motorradanhänger verreisen möchten, für die gleichzeitig aber auch eine Anhängelast von 3,5 Tonnen relevant ist. • Eine exzellente Lösung kann sich damit auch für Familien mit 2 bis 3 kleineren Kindern ergeben. Dafür bietet TISCHER optional den Einbau eines bequemen Stockbetts mit an, so dass genügend Schlafplätze vorhanden sind. • Die neue Kabine eignet sich aber auch sehr gut für Camper mit teuren E-Bikes und Fahrrädern, die nicht außen am Fahrradträger hängen, sondern gut geschützt in einem Segment der Kabine transportiert werden sollen. Mehr auf www.tischer-pickup.com .", + "tags": [], + "status": "Trash", + "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5931", + "images": [], + "source": "https://www.camping-news.de/rss/", + "source_name": "Camping-News", + "created_at": "2025-08-28T10:29:35.311397", + "word_count": 405 + }, + { + "id": "b2c3c88e498e79526c52d7fafccc702a", + "title": "Aufblasbares Vorzelt für Wohnwagen-Camper", + "date": "Fri, 01 Aug 2025 00:00:00 +0200", + "summary": "Travel Comfort Air", + "text": "• Perfekt fürs Reisecamping mit hohem Komfort und vielen praktischen Funktionen • Stabiles Luftschlauch-System zum Aufpumpen, um das mobile Zuhause schneller zu errichten Für den diesjährigen Caravan Salon Düsseldorf (29.08. bis 07.09.2025) werden dwt Geschäftsführer Claus Winneknecht und sein Messe-Team am Stand (Halle 3/Stand-Nr. C89) mehrere Zeltmodelle komplett aufgebaut präsentieren. Gezeigt werden die Wohnwagen-Ganzzelte Ambassador III, Jubilee 40 und Polo exemplarisch für hochwertige dwt Gestängezelte. Dazu kommen mit dem Caravan-Ganzzelt Scala Air 280 und dem Wohnwagen-Teilzelt Space Air HQ zwei Air-In-Modelle. Ein Highlight wird am Stand das aufblasbare Wohnwagen-Ganzzelt Travel Comfort Air setzen. In ihm spielen Ästhetik und Funktionalität eng zusammen. Wie die anderen ausgestellten Modelle, so können Messebesucher auch dieses extra komfortable und geräumige Reisezelt von außen und innen erleben. Dabei lassen sich die verwendeten Zeltmaterialien ebenso begutachten und prüfen wie die vielen intelligenten Details. Wie dwt Geschäftsführer Claus Winneknecht erläutert, steht bei der reichen dwt Modellauswahl immer die sichere Wunscherfüllung für Kunden im Fokus: „Entscheidend ist im 1. Schritt immer, was sich der einzelne Kunde als persönlichen Traumurlaub vorstellt. Als Experten sind wir zusammen mit dem Fachhandel gerne da, um individuelle Wünsche und Anforderungen zu reflektieren, zu bündeln und dafür das passende Zelt zu empfehlen. Im Fall von Travel Comfort Air heißt das, seine herausragenden Vorzüge für aktive Reisecamper zu betonen. Ausstattung, Qualität und der vereinfachte Aufbau machen dieses Zelt zu einer wirklich guten Wahl für Reisecamper, die in punkto Komfort, Flexibilität und Raumangebot auf nichts verzichten möchten.“ Modell-Highlights auf einen Blick: • Robustes Air-In-System mit 10 cm starken TPU Luftschläuchen. Das sicher eingebettete Luftschlauch-System lässt sich mechanisch oder elektrisch aufpumpen. Zeitraubendes Sortieren und Auslegen von Zeltstangen entfällt. • Zelthaut gefertigt aus Texolan 150 HQ mit PU-Beschichtung. Das langlebige, abwaschbare Material kann Wind, Regen, Sonne und UV-Strahlung dauerhaft trotzen. • Effektives Rundum-Belüftungskonzept durch große Moskitofenster mit rollbaren Klappen und einseitig ausstellbaren Lüftungshauben für konstante Frischluft auch an feuchten oder regnerischen Tagen. • Luftiges Raumgefühl und flexible Gestaltungsmöglichkeiten mit optional wegrollbaren oder herausnehmbaren Elementen. • Höhenausgleichs-Blocks in Serienausstattung enthalten, um auch auf unebenem Gelände und bei Höhenunterschieden zwischen Zelt und Wohnwagen für ein harmonisches Ganzes zu sorgen. Technische Spezifikationen: • Zelttiefe ca. 240 cm + 20 cm Vordach • Zeltkonstruktion mit innenliegendem Air-In-System und stabilisierenden Dach- und Frontschläuchen • Erhältlich in 5 Größen für Umlaufmaße von ca. 906 bis 1.030 cm • Unverbindliche Preisempfehlung beginnt bei ca. 1.855 € für Größe 31 Mher Informationen auf https://dwt-zelte.de", + "tags": [], + "status": "Trash", + "link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5930", + "images": [], + "source": "https://www.camping-news.de/rss/", + "source_name": "Camping-News", + "created_at": "2025-08-28T10:29:35.607061", + "word_count": 397 + }, + { + "id": "c23153f2222bbc5a7bbae11367995e73", + "title": "Reisetipps für die letzten Ferienwochen: Dem schlechten Wetter davon fahren", + "date": "Tue, 26 Aug 2025 17:00:00 +0200", + "summary": "

    Schneller Wetter-Check für die beliebtesten Campingregionen Europas: Hier können Sie in den letzten Ferienwochen auf Sonne zählen.

    ", + "text": "Die letzten drei Wochen der Sommerferien in Bayern und Baden-Württemberg stehen vor der Tür. Viele Camperinnen und Camper überlegen jetzt spontan, wohin es gehen könnte – dafür lohnt ein Blick auf die Wetterlage. In Italien meldete man die vergangenen Wochen erneut extreme Wetterereignisse: Unwetter, Überschwemmungen und Stürme trafen unter anderem Venetien , Sizilien und die Toskana. Die Wetterlage hat sich dort zum Glück kurzfristig wieder beruhigt. Für Urlaubende mit Wohnmobil stellen Schlechtwetterfronten Planungsschwierigkeiten dar. Vor diesem Hintergrund haben wir Regionen zusammengestellt, die in den kommenden Wochen gute Wetterbedingungen erwarten lassen – ideal für spontane Campingtrips. Deutschland: Alpen, Mittelgebirge und Küsten im Überblick In Bayern und Baden-Württemberg bleibt das Wetter in den kommenden Wochen wechselhaft. Besonders in den Alpen und südlichen Mittelgebirgen können Gewitter und punktueller Starkregen auftreten, während andere Landesteile sommerlich warm bleiben. Beste Bedingungen für Urlauberinnen und Urlauber, dem schlechten Wetter an anderer Stelle zu entfliehen. Vielleicht sogar in Deutschland selbst? An der deutschen Nord- und Ostseeküste zeigen sich die letzten Sommerwochen von ihrer freundlichen Seite. Die Küstenregionen erleben meist stabiles Sommerwetter, nur einzelne Regenschauer trüben den Tag. Temperaturen zwischen 20 und 25 °C, kühler direkt am Wasser Hier zeigen wir die Top 10 Stellplätze an der Nordsee . Österreich & Schweiz: Stabiler Sommer für Outdoor-Fans In Wien und Graz bleibt es überwiegend trocken, die Temperaturen liegen angenehm im sommerlichen Bereich. Ab Ende August kann es vereinzelt zu etwas kühleren Abschnitten kommen, die Wetterlage bleibt aber mehrheitlich stabil. Wien : Tageswerte 27–29 °C, wenig Niederschlag Graz : mild 24–28 °C, einzelne Gewitter möglich Salzburg und Kärnten bieten zum Monatswechsel stabile, sonnige Tage mit sehr geringen Niederschlagsmengen – ideal für Camping und Outdoor-Aktivitäten. Beispielsweise an einem der 7 schönen Campingplätze am Millstätter See . Tageshöchstwerte 23–27 °C Zürich zeigt sich in den letzten Wochen der Sommerferien moderat warm und insgesamt trocken. Gelegentliche Regentage sind möglich, die Nächte fallen jedoch kühler aus. Tageshöchstwerte 20–25 °C, Nächte um 12 °C Graubünden und Tessin bieten familienfreundliches Sommerwetter mit stabiler Lage. Kaum Gewitter, und die Temperaturen bleiben angenehm. Temperaturen 21–27 °C Italien: Vom Gardasee bis Sizilien – wo das Wetter stimmt In Venetien und der Toskana zeigt sich das typische mediterrane Sommerwetter: warm, meist sonnig, Regen nur vereinzelt. Lokale Hitze- und Gewitterperioden können auftreten, sind aber kurzzeitig. Wie wär's mit einem Trip zu einem toskanischen Agricamping oder nach Friaul-Julisch in Venetien? Toskana : 28–31 °C tagsüber, 15–17 °C nachts, wenige Regentage Venetien : ähnliche Werte, kurze Gewitter möglich Süditalien , insbesondere Sizilien und Kalabrien , erlebt weiterhin sehr heißes, sommerliches Wetter. Die Wassertemperaturen sind hoch, Regen selten, die Sonne scheint täglich lange – ideal für Badeurlaub. Tageshöchstwerte 30–35 °C (Küste 27–31 °C), Nächte 20–24 °C Sonnenscheindauer bis 12 Stunden, kaum Regen Gardasee und Südtirol stabilisieren sich ab Ende August, perfekt für Outdoor-Aktivitäten wie Wandern, Radfahren oder Sightseeing. Temperaturen 26–30 °C, wenig Niederschlag Spanien & Frankreich: Sonne, Strand und mildes Klima An der Costa Brava , Costa Dorada sowie in Katalonien und Aragonien herrscht stabiles Sommerwetter, ideal für Strand- und Campingurlaub. Nur vereinzelte Wärmegewitter sind möglich. Schöne Campingplätze direkt am Meer sind beispielsweise der Camping El Templo del Sol oder der Camping Sangulí . Tageswerte 25–30 °C, geringe Niederschlagswahrscheinlichkeit In der Provence und an der Côte d’Azur zeigt sich die Sonne ebenfalls sehr häufig. Kurze Regenschauer treten vor allem in den Bergen auf. Tageshöchstwerte 28–32 °C Polen & Kroatien: Entspanntes Camping an der Ostsee und Adria Die Ostsee und Masuren in Polen bieten moderates, stabiles Wetter mit vielen Sonnenstunden – optimal für Strandtage oder Radtouren. Hier unsere Touren-Tipps für die Region . Temperaturen 20–25 °C, sehr wenig Niederschlag In Kroatien sind Istrien und Dalmatien weiterhin sonnig und warm, ideal für Strandferien, Wassersport und Camping. Temperaturen 27–33 °C, kaum Regen Quellenhinweis: Die Wetterprognosen für Ende August und Anfang September 2025 basieren auf aktuellen Vorhersagen offizieller Wetterdienste und Fachportale, darunter der Deutsche Wetterdienst (DWD), Wetter.de, Wetter.com, sowie regionale Klima- und Reisewetterseiten für internationale Regionen.", + "tags": [], + "status": "Trash", + "link": "https://www.promobil.de/weitere-ratgeber/sommerferien-endspurt-wohin-mit-dem-wohnmobil/", + "images": [], + "source": "https://www.promobil.de/rss/ratgeber", + "source_name": "ratgeber bei www.promobil.de", + "created_at": "2025-08-28T10:29:41.996070", + "word_count": 647 + }, + { + "id": "9f67bade03c8c72c2b043d85fea6100c", + "title": "Camping-Boom: Wohnmobil im Urlaub richtig absichern / Wie Sie im Urlaub typische Versicherungsfallen vermeiden", + "date": "Tue, 26 Aug 2025 09:35:00 +0200", + "summary": "Verti Versicherung AG: Berlin (ots) - Deutschland erlebt einen nie dagewesenen Camping-Boom. Doch viele, die mit dem Wohnmobil oder dem Wohnwagen in den Urlaub fahren, sind unzureichend abgesichert, denn Standardversicherungen greifen hier oft nicht. Ein Experte der Verti ...", + "text": "Verti Versicherung AG [ Newsroom ] Berlin (ots) - Deutschland erlebt einen nie dagewesenen Camping-Boom. Doch viele, die mit dem Wohnmobil oder dem Wohnwagen in den Urlaub fahren, sind unzureichend abgesichert, denn Standardversicherungen greifen hier oft nicht. Ein Experte der Verti ... Lesen Sie hier weiter... Original-Content von: Verti Versicherung AG, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/43258/6104183", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach camping", + "created_at": "2025-08-28T10:29:43.438069", + "word_count": 55 + }, + { + "id": "608509dfc6997b9dcee06767fcbeba9e", + "title": "\"Deutschlands Beste Online-Shops 2025\" / Renommierter E-Commerce-Award - Votum aus rund 70.000 Kundenmeinungen - Feierliche Preisverleihung", + "date": "Tue, 26 Aug 2025 09:00:06 +0200", + "summary": "DISQ Deutsches Institut für Service-Qualität GmbH & Co. KG: Berlin (ots) - Ob Mode, Technik oder Möbel - wer online einkauft, profitiert von großer Auswahl, flexibler Lieferung und komfortablen Rückgabemöglichkeiten. Kein Wunder, dass das Shopping im Netz boomt. Doch nicht alle Anbieter halten, was ...", + "text": "DISQ Deutsches Institut für Service-Qualität GmbH & Co. KG [ Newsroom ] Berlin (ots) - Ob Mode, Technik oder Möbel - wer online einkauft, profitiert von großer Auswahl, flexibler Lieferung und komfortablen Rückgabemöglichkeiten. Kein Wunder, dass das Shopping im Netz boomt. Doch nicht alle Anbieter halten, was sie ... Lesen Sie hier weiter... Original-Content von: DISQ Deutsches Institut für Service-Qualität GmbH & Co. KG, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/64471/6104130", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach camping", + "created_at": "2025-08-28T10:29:43.728527", + "word_count": 68 + }, + { + "id": "ad593eb7c57c94ceeb49df82517d80a9", + "title": "Neue Folge \"Bella Italia - Camping auf Deutsch\": Liebe, Abenteuer und große Überraschungen in den USA", + "date": "Mon, 25 Aug 2025 09:00:00 +0200", + "summary": "RTLZWEI: München (ots) - - Sascha und Nicole Fingerhuth heiraten in Las Vegas - Überraschungsausflug für Angelika - Neue Folge \"Bella Italia - Camping auf Deutsch\" am 25. August 2025, immer montags um 20:15 Uhr bei RTLZWEI und sieben Tage vorab auf RTL+ ...", + "text": "RTLZWEI [ Newsroom ] München (ots) - - Sascha und Nicole Fingerhuth heiraten in Las Vegas - Überraschungsausflug für Angelika - Neue Folge \"Bella Italia - Camping auf Deutsch\" am 25. August 2025, immer montags um 20:15 Uhr bei RTLZWEI und sieben Tage vorab auf RTL+ ... Lesen Sie hier weiter... Original-Content von: RTLZWEI, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/6605/6103157", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach camping", + "created_at": "2025-08-28T10:29:44.000018", + "word_count": 58 + }, + { + "id": "b39e1e356bae5d46d960baa7e58223f0", + "title": "66 Lovemobile in Niedersachsen - Zahl leicht gestiegen / Mehr als 80 Prozent der mobilen Bordelle in Niedersachsen auf drei Kreise verteilt", + "date": "Tue, 26 Aug 2025 05:00:00 +0200", + "summary": "Neue Osnabrücker Zeitung: Osnabrück (ots) - Die Zahl der Lovemobile an Niedersachsens Straßen ist in diesem Jahr leicht gestiegen. Aktuell gibt es 66 solcher Fahrzeuge, wie eine Abfrage der \"Neuen Osnabrücker Zeitung\" (NOZ) bei allen Kreisen und kreisfreien Städten ...", + "text": "Neue Osnabrücker Zeitung [ Newsroom ] Osnabrück (ots) - Die Zahl der Lovemobile an Niedersachsens Straßen ist in diesem Jahr leicht gestiegen. Aktuell gibt es 66 solcher Fahrzeuge, wie eine Abfrage der \"Neuen Osnabrücker Zeitung\" (NOZ) bei allen Kreisen und kreisfreien Städten ... Lesen Sie hier weiter... Original-Content von: Neue Osnabrücker Zeitung, übermittelt durch news aktuell", + "tags": [], + "status": "Trash", + "link": "https://www.presseportal.de/pm/58964/6104008", + "images": [], + "source": "https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 ", + "source_name": "Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil", + "created_at": "2025-08-28T10:29:46.104385", + "word_count": 56 + }, + { + "id": "3a8a1b6243fba59fd4ef2af096b0f4c2", + "title": "Brand auf Campingplatz in Otterstadt - Speyer-Kurier", + "date": "2025-08-28T06:18:50Z", + "summary": "Brand auf Campingplatz in Otterstadt. 28.08.2025 Blaulicht. Personen wurden keine verletzt. Otterstadt (ots). Aus bislang ungeklärter Ursache kam ...", + "text": "Brand auf Campingplatz in Otterstadt. 28.08.2025 Blaulicht. Personen wurden keine verletzt. Otterstadt (ots). Aus bislang ungeklärter Ursache kam ...", + "tags": [], + "status": "New", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.speyer-kurier.de/blaulicht/artikel/brand-auf-campingplatz-in-otterstadt&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw37x8Ph29lBv4K9sjZjZNlH", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:50.494296", + "word_count": 19 + }, + { + "id": "7e2f03b974e9a7689fb33be871dc93ff", + "title": "Zehn Jahre Stillstand: Letzter Versuch für geplanten Campingplatz? - Kusel - Die Rheinpfalz", + "date": "2025-08-28T06:14:23Z", + "summary": "Seit Jahren liegt das Gelände der SG Blaubach-Diedelkopf in Kusel brach. Jetzt will die Stadt das Gelände für den geplanten Campingplatz neu ...", + "text": "Seit Jahren liegt das Gelände der SG Blaubach-Diedelkopf in Kusel brach. Jetzt will die Stadt das Gelände für den geplanten Campingplatz neu ...", + "tags": [], + "status": "New", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.rheinpfalz.de/lokal/kreis-kusel_artikel,-zehn-jahre-stillstand-letzter-versuch-f%25C3%25BCr-geplanten-campingplatz-_arid,5806398.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw03Sz4h5yKhs00d4HecyABq", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:50.730462", + "word_count": 23 + }, + { + "id": "0de60a37f728ee74d9e08ebd3b16dbcb", + "title": "Landvergnügen: Statt Campingplatz, jede Nacht ein anderer Bauernhof - Kleine Zeitung", + "date": "2025-08-28T04:24:30Z", + "summary": "Statt Campingplatz, jede Nacht ein anderer Bauernhof. Das Konzept „Landvergnügen“ führt Reisende je für eine Nacht zu Gastgebern in Österreich ...", + "text": "Statt Campingplatz , jede Nacht ein anderer Bauernhof. Das Konzept „Landvergnügen“ führt Reisende je für eine Nacht zu Gastgebern in Österreich ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.kleinezeitung.at/lebensart/20031453/statt-campingplatz-jede-nacht-ein-anderer-bauernhof&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0Fnz1ORv1BbfIEZfTG432j", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:50.989071", + "word_count": 22 + }, + { + "id": "1980f292e4ebb870afec9440c5e681c8", + "title": "Rheinland-Pfalz & Saarland: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt", + "date": "2025-08-28T03:28:01Z", + "summary": "Am helllichten Nachmittag brennen auf einem Campingplatz mehrere Wohnwagen. Warum, ist noch völlig offen. Otterstadt/Ludwigshafen (dpa/lrs) - Aus ...", + "text": "Am helllichten Nachmittag brennen auf einem Campingplatz mehrere Wohnwagen. Warum, ist noch völlig offen. Otterstadt/Ludwigshafen (dpa/lrs) - Aus ...", + "tags": [], + "status": "New", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.n-tv.de/regionales/rheinland-pfalz-und-saarland/Sieben-Wohnwagen-bei-Feuer-auf-Campingplatz-beschaedigt-article25992761.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1d142-8q28VLBMt44GmQQm", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:51.235517", + "word_count": 19 + }, + { + "id": "c49d323b86bbc175dcdf7a0e9ecbf49c", + "title": "Klima-Ereignis könnte Europas Wetter radikal verändern und den Winter völlig auf den Kopf stellen", + "date": "2025-08-28T00:12:51Z", + "summary": "Ein Blick auf den Pazifik zeigt, warum das Wetter bald ganz anders verlaufen könnte. Experten warnen vor den Folgen. Eine Wetter-Kolumne von ...", + "text": "Ein Blick auf den Pazifik zeigt, warum das Wetter bald ganz anders verlaufen könnte. Experten warnen vor den Folgen. Eine Wetter-Kolumne von ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/veraendern-winter-voellig-auf-den-kopf-stellen-raetselhaftes-klima-ereignis-europa-wetter-radikal-zr-93889387.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw13FBKqr1NahvNwZSiFQUpS", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:51.495370", + "word_count": 23 + }, + { + "id": "5d296d6de97a620fee1ed01fca902581", + "title": "Lebensgefahr durch extreme Unwetter: Mittelmeer-Phänomen treibt Gefahr nun auch nach ...", + "date": "2025-08-27T23:42:49Z", + "summary": "Das warme Mittelmeer liefert Feuchtigkeit für gefährliche Unwetter – die Lage in Südeuropa ist nur der Anfang. Eine Wetter-Kolumne von Dominik ...", + "text": "Das warme Mittelmeer liefert Feuchtigkeit für gefährliche Unwetter – die Lage in Südeuropa ist nur der Anfang. Eine Wetter-Kolumne von Dominik ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/lebensgefahr-durch-extreme-unwetter-in-italien-warum-die-gefahr-nun-auch-nach-deutschland-schwappt-zr-93902987.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1iZO1swk8NP-QaytJ1i_fH", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:51.741625", + "word_count": 22 + }, + { + "id": "37047836ad4d40f1fe34a7e5786d6c87", + "title": "Sachschaden: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Rheinland-Pfalz", + "date": "2025-08-27T20:56:09Z", + "summary": "Am helllichten Nachmittag brennen auf einem Campingplatz mehrere Wohnwagen. Warum, ist noch völlig offen. Artikel teilen. Artikel teilen ...", + "text": "Am helllichten Nachmittag brennen auf einem Campingplatz mehrere Wohnwagen. Warum, ist noch völlig offen. Artikel teilen. Artikel teilen ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.rhein-zeitung.de/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_arid-4064379.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw39vzojQNhBpnUVvyBovqdG", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:51.994857", + "word_count": 19 + }, + { + "id": "20e782032e93bb2fb089a759a2665862", + "title": "Campingplatz steht unter neuer Leitung - Mühlacker Tagblatt", + "date": "2025-08-27T19:39:59Z", + "summary": "Von Volker Henkel Knittlingen-Freudenstein. Aus dem „Stromberg Camping“ wird der „Campingpark Stromberg“, und die neue Bezeichnung geht mit einem ...", + "text": "Von Volker Henkel Knittlingen-Freudenstein. Aus dem „Stromberg Camping“ wird der „Campingpark Stromberg“, und die neue Bezeichnung geht mit einem ...", + "tags": [], + "status": "New", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.muehlacker-tagblatt.de/Knittlingen/Campingplatz-steht-unter-neuer-Leitung-404285.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3ohQMvQLwZB15jBj2h_aGm", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:52.251368", + "word_count": 20 + }, + { + "id": "c80be32c43658d16bf506caebc0dcc92", + "title": "Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Saarbrücker Zeitung", + "date": "2025-08-27T18:53:10Z", + "summary": "Otterstadt/Ludwigshafen · Am helllichten Nachmittag brennen auf einem Campingplatz mehrere Wohnwagen. Warum, ist noch völlig offen. 27.08.2025 , 18:55 ...", + "text": "Otterstadt/Ludwigshafen · Am helllichten Nachmittag brennen auf einem Campingplatz mehrere Wohnwagen. Warum, ist noch völlig offen. 27.08.2025 , 18:55 ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.saarbruecker-zeitung.de/saarland/blickzumnachbarn/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_aid-133771593&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1lKkodrkZcnrbfts2GayPR", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:52.531755", + "word_count": 20 + }, + { + "id": "073634bbe5c2896217086a84a0abcf70", + "title": "Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - MSN", + "date": "2025-08-27T17:51:54Z", + "summary": "Aus zunächst ungeklärter Ursache sind auf einem Campingplatz in Otterstadt im Rhein-Pfalz-Kreis zwei Wohnwagen vollständig ausgebrannt.", + "text": "Aus zunächst ungeklärter Ursache sind auf einem Campingplatz in Otterstadt im Rhein-Pfalz-Kreis zwei Wohnwagen vollständig ausgebrannt.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/sieben-wohnwagen-bei-feuer-auf-campingplatz-besch%25C3%25A4digt/ar-AA1Ll6Lo&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2OKEXFNNohu7Fa2qjUumRZ", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:52.898469", + "word_count": 16 + }, + { + "id": "c8ee7736835d656e0ac79fb5919e469a", + "title": "Rhein-Pfalz-Kreis – Brand auf einem Campingplatz - MRN-News.de", + "date": "2025-08-27T17:27:38Z", + "summary": "... Campingplatz in Otterstadt. Hierbei brannten zwei Wohnwägen vollständig aus und fünf weitere wurden durch Feuer und Hitzeeinwirkung zum Teil ...", + "text": "... Campingplatz in Otterstadt. Hierbei brannten zwei Wohnwägen vollständig aus und fünf weitere wurden durch Feuer und Hitzeeinwirkung zum Teil ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.mrn-news.de/2025/08/27/rhein-pfalz-kreis-brand-auf-einem-campingplatz-600056/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1gcVfYYMPsTSp0-8Fh1ov1", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:53.157433", + "word_count": 21 + }, + { + "id": "146fc80441ebb47cee942e51c7e1edcd", + "title": "Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Trierischer Volksfreund", + "date": "2025-08-27T17:25:51Z", + "summary": "Am helllichten Nachmittag brennen auf einem Campingplatz mehrere Wohnwagen. Warum, ist noch völlig offen.", + "text": "Am helllichten Nachmittag brennen auf einem Campingplatz mehrere Wohnwagen. Warum, ist noch völlig offen.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.volksfreund.de/region/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_aid-133771597&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2sDVmOAKfpSHhFZvLdbm_5", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:53.422723", + "word_count": 14 + }, + { + "id": "16b416971a7b08b595bc1b54f997359f", + "title": "FAQ: Alles Wichtige zum Wasser mit Geschmack Festival 2025 in Heubach - Gmünder Tagespost", + "date": "2025-08-27T17:25:00Z", + "summary": "... Campingplatz. In unseren FAQ findest du alle wichtigen Infos auf einen Blick: wann, wo, wer, wie und warum. Wann und wo findet das Festival statt ...", + "text": "... Campingplatz . In unseren FAQ findest du alle wichtigen Infos auf einen Blick: wann, wo, wer, wie und warum. Wann und wo findet das Festival statt ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.gmuender-tagespost.de/ostalb/rosenstein/heubach/wasser-mit-geschmack-festival-2025-musik-kunst-gemeinschaft-93892202.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l9cgUIrS9AjBrhtVSwwib", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:53.663311", + "word_count": 28 + }, + { + "id": "53e54f88cd9649a983f15d03eaef9cbf", + "title": "Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Borkener Zeitung", + "date": "2025-08-27T17:24:11Z", + "summary": "Am helllichten Nachmittag brennen auf einem Campingplatz mehrere Wohnwagen. Warum, ist noch völlig offen. Von dpa. 27.08.2025.", + "text": "Am helllichten Nachmittag brennen auf einem Campingplatz mehrere Wohnwagen. Warum, ist noch völlig offen. Von dpa. 27.08.2025.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.borkenerzeitung.de/welt/in-ausland/panorama/Sieben-Wohnwagen-bei-Feuer-auf-Campingplatz-beschaedigt-663729.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1L3D8uGuPKbB4qBB-8a8I3", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:53.917331", + "word_count": 17 + }, + { + "id": "1bed652ee77f7ef75b068536cb021393", + "title": "POL-PPRP: Brand auf einem Campingplatz - freenet.de", + "date": "2025-08-27T17:17:05Z", + "summary": "Aus bislang ungeklärter Ursache kam es am Nachmittag des 27.08.2025 zu einem Brand auf einem Campingplatz in Otterstadt.", + "text": "Aus bislang ungeklärter Ursache kam es am Nachmittag des 27.08.2025 zu einem Brand auf einem Campingplatz in Otterstadt.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.freenet.de/polizeimeldungen/rheinland-pfalz/pol-pprp-brand-auf-einem-campingplatz_6105496-40501654.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0Pns94-kd2inHfns451qxb", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:54.205549", + "word_count": 18 + }, + { + "id": "0f11abc3b36924d6cb05dfc36fc39dcf", + "title": "Brand auf einem Campingplatz - aktuell mit der meinestadt.de", + "date": "2025-08-27T17:14:58Z", + "summary": "Aus bislang ungeklärter Ursache kam es am Nachmittag des 27.08.2025 zu einem Brand auf einem Campingplatz in Otterstadt. Hierbei brannten zwei ...", + "text": "Aus bislang ungeklärter Ursache kam es am Nachmittag des 27.08.2025 zu einem Brand auf einem Campingplatz in Otterstadt. Hierbei brannten zwei ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://aktuell.meinestadt.de/rhein-pfalz-kreis/polizeimeldungen/5690769&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1fAhNsv2Uiz0FUuFmtx4U1", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:54.474512", + "word_count": 22 + }, + { + "id": "433e42de8aff2d321ccebdbf02d0fcd8", + "title": "Sachschaden: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt | STERN.de", + "date": "2025-08-27T17:05:24Z", + "summary": "Otterstadt/Ludwigshafen (lrs) - Aus zunächst ungeklärter Ursache sind auf einem Campingplatz in Otterstadt im Rhein-Pfalz-Kreis zwei Wohnwagen ...", + "text": "Otterstadt/Ludwigshafen (lrs) - Aus zunächst ungeklärter Ursache sind auf einem Campingplatz in Otterstadt im Rhein-Pfalz-Kreis zwei Wohnwagen ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.stern.de/gesellschaft/regional/rheinland-pfalz-saarland/sachschaden--sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt-36007106.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3ln89AKet0fsmPLwqvKSRZ", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:54.733973", + "word_count": 18 + }, + { + "id": "bf865af200b2e154262373f6816df567", + "title": "Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - TV Mittelrhein", + "date": "2025-08-27T17:02:48Z", + "summary": "Am helllichten Nachmittag brennen auf einem Campingplatz mehrere Wohnwagen. Warum, ist noch völlig offen.Otterstadt/Ludwigshafen (dpa/lrs) - Aus ...", + "text": "Am helllichten Nachmittag brennen auf einem Campingplatz mehrere Wohnwagen. Warum, ist noch völlig offen.Otterstadt/Ludwigshafen (dpa/lrs) - Aus ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.tv-mittelrhein.de/mediathek/news/25450/Sieben_Wohnwagen_bei_Feuer_auf_Campingplatz_beschaedigt.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0he2tUV25IuvO5osNw1xgo", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:54.986278", + "word_count": 18 + }, + { + "id": "b6d9558875ac17588367f5ebbdc63055", + "title": "Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Mittelhessen", + "date": "2025-08-27T17:01:55Z", + "summary": "Am helllichten Nachmittag brennen auf einem Campingplatz mehrere Wohnwagen. Warum, ist noch völlig offen. ... Otterstadt/Ludwigshafen (dpa/lrs) - . Aus ...", + "text": "Am helllichten Nachmittag brennen auf einem Campingplatz mehrere Wohnwagen. Warum, ist noch völlig offen. ... Otterstadt/Ludwigshafen (dpa/lrs) - . Aus ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.mittelhessen.de/lokales/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt-4919360&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2wXuKqnmu2I73TfXwRGof4", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "source_name": "Google Alert – Campingplatz", + "created_at": "2025-08-28T10:29:55.247935", + "word_count": 21 + }, + { + "id": "6660d50ec20104435c0c847f41c23f88", + "title": "VanCraft Waypoint XL: Vanlife in Übergröße aus den USA - vanlifemag.de", + "date": "2025-08-27T13:08:53Z", + "summary": "Vanlife steht für Freiheit und Abenteuer auf vier Rädern – mit dem ausgebauten Camper dem Sonnenuntergang entgegen. Der Van Craft Waypoint XL ...", + "text": "Vanlife steht für Freiheit und Abenteuer auf vier Rädern – mit dem ausgebauten Camper dem Sonnenuntergang entgegen. Der Van Craft Waypoint XL ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/van-craft-waypoint-xl-vanlife-in-uebergroesse-aus-den-usa/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw1BVz5EAVRoCLYXzxYhRJfy", + "images": [], + "source": "https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305", + "source_name": "Google Alert – Vanlife", + "created_at": "2025-08-28T10:29:57.026295", + "word_count": 23 + }, + { + "id": "4e1e9019d478ef56aa880eb5fcd345e7", + "title": "Rendsburger Herbst 2025: Das müssen Besucher zum Stadtfest wissen - SHZ", + "date": "2025-08-27T16:55:23Z", + "summary": "Messe für Camping-Fans: Was Besucher auf der Caravan und Co. in Rendsburg erwartet. ADVERTORIAL_Caravan und CO. Die Besucher können sich auf ...", + "text": "Messe für Camping -Fans: Was Besucher auf der Caravan und Co. in Rendsburg erwartet. ADVERTORIAL_Caravan und CO. Die Besucher können sich auf ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.shz.de/lokales/rendsburg/artikel/rendsburger-herbst-2025-das-muessen-besucher-zum-stadtfest-wissen-49189798&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3Q0vDLWiKVxjzAHNaBAL9Q", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-28T10:30:00.261326", + "word_count": 23 + }, + { + "id": "875f559e6343a02f03cdca5405280a81", + "title": "Messebesuch planen: Das sind die besten Tage für einen Besuch auf dem Caravan Salon 2025", + "date": "2025-08-27T15:13:39Z", + "summary": "So reisen Sie entspannt zur Camping-Messe. Park- und Stellplätze sind ... Die Messe findet vom 30. August bis 8. September 2025 statt. Am ...", + "text": "So reisen Sie entspannt zur Camping - Messe . Park- und Stellplätze sind ... Die Messe findet vom 30. August bis 8. September 2025 statt. Am ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.promobil.de/weitere-ratgeber/messebesuch-planen-caravan-salon-2025/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1GqhXPxrlBChDZ5bo-u9xR", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-28T10:30:00.719086", + "word_count": 27 + }, + { + "id": "989e6e92c21bc62baa6b0cf73dbb3825", + "title": "Caravan Salon: Dieser Fiat 616N Retro-Umbau wird der Hingucker der Messe! - Promobil", + "date": "2025-08-27T10:10:21Z", + "summary": "Auf dem Caravan Salon Düsseldorf 2025 wird die 616N Retro Edition erstmals als modernes Wohnmobil präsentiert. ... Mountain biker coming back to camping ...", + "text": "Auf dem Caravan Salon Düsseldorf 2025 wird die 616N Retro Edition erstmals als modernes Wohnmobil präsentiert. ... Mountain biker coming back to camping ...", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.promobil.de/neuheiten/caravan-salon-dieser-fiat-616n-retro-umbau-wird-der-hingucker-der-messe/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw05o4wpeT1ZYzAngJCJ5rbe", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-28T10:30:00.962051", + "word_count": 24 + }, + { + "id": "8b88bde8f44852c2fd538c8c34cb8a9c", + "title": "Welche Aktien von Luxusmarken sollten Anleger im Blick behalten? - Shots Magazin", + "date": "2025-08-27T08:37:13Z", + "summary": "Beitrags-Navigation. Reisemobile. Wow. Caravan Salon Düsseldorf 2025 - Top-Messe für Reisemobile und Camping. Exklusive Inhalte.", + "text": "Beitrags-Navigation. Reisemobile. Wow. Caravan Salon Düsseldorf 2025 - Top- Messe für Reisemobile und Camping . Exklusive Inhalte.", + "tags": [], + "status": "Trash", + "link": "https://www.google.com/url?rct=j&sa=t&url=https://www.shots.media/accessoires/2025/welche-aktien-von-luxusmarken-sollten-anleger-im-blick-behalten/109756&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0qlDEuhncZhWTz-dL6IaNA", + "images": [], + "source": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "source_name": "Google Alert - Camping Messe 2025", + "created_at": "2025-08-28T10:30:01.194625", + "word_count": 17 } ] \ No newline at end of file diff --git a/data/feeds.json b/data/feeds.json index e1d263e..eaac8a5 100644 --- a/data/feeds.json +++ b/data/feeds.json @@ -1,3 +1,42 @@ [ - "https://www.camping-news.de/rss/" + { + "url": "https://www.camping-news.de/rss/", + "name": "Camping News" + }, + { + "url": "https://www.promobil.de/rss/news", + "name": "Promobil News" + }, + { + "url": "https://www.promobil.de/rss/ratgeber", + "name": "Promobil Ratgeber" + }, + { + "url": "https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ", + "name": "Presseportal Camping" + }, + { + "url": "https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 ", + "name": "Presseportal Wohnmobil" + }, + { + "url": "https://caravan-news.de/rss/schlagzeilen.php", + "name": "Caravan News" + }, + { + "url": "https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294", + "name": "Google Campingplatz" + }, + { + "url": "https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305", + "name": "Google VanLife" + }, + { + "url": "https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856", + "name": "Google Camping Termine" + }, + { + "url": "https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493", + "name": "Google Camping Messe 2025" + } ] \ No newline at end of file diff --git a/docs/AUTOMATION.md b/docs/AUTOMATION.md new file mode 100644 index 0000000..8008857 --- /dev/null +++ b/docs/AUTOMATION.md @@ -0,0 +1,190 @@ +# Automatischer Pipeline-Betrieb + +## Überblick + +Das System läuft vollautomatisch und benötigt nur noch gelegentliche Telegram-Interaktion. + +``` +N8N (2× täglich, 08:00 + 16:00 Uhr) + └─► POST /api/n8n/pipeline (X-API-Key Header) + ├── RSS Ingestion (alle aktivierten Feeds) + ├── Relevanz-Score per GPT (0–100) + │ ├── Score ≥ 80 → Rewrite + WP-Draft + Telegram + │ ├── Score 60–79 → Telegram-Warnung + manueller Override möglich + │ └── Score < 60 → Abgelehnt + tägliche Telegram-Liste + └── Pipeline-Zusammenfassung via Telegram +``` + +--- + +## Einrichtung + +### 1. Umgebungsvariablen setzen + +Kopiere `backend/.env.example` nach `backend/.env` und fülle alle Felder aus: + +```bash +cp backend/.env.example backend/.env +nano backend/.env +``` + +Wichtige Variablen: + +| Variable | Beschreibung | +|----------|-------------| +| `TELEGRAM_BOT_TOKEN` | Bot-Token von @BotFather | +| `TELEGRAM_CHAT_ID` | Deine persönliche Chat-ID | +| `TELEGRAM_WEBHOOK_SECRET` | Zufälliger String (≥ 20 Zeichen) | +| `N8N_API_KEY` | Starker zufälliger API-Key | +| `OPENAI_API_KEY` | OpenAI API-Key | +| `WP_BASE_URL` | WordPress-URL | +| `WP_USERNAME` | WordPress-Benutzername | +| `WP_PASSWORD` | WordPress App-Passwort | + +### 2. Telegram-Webhook registrieren + +Nach dem Deployment einmalig aufrufen: + +```bash +curl -X POST https://news.vanityontour.de/api/telegram/setup-webhook \ + -H "Cookie: rss_news_session=" +``` + +Oder über die Admin-UI: Settings → Telegram Webhook einrichten. + +### 3. N8N Workflow einrichten + +In N8N einen neuen Workflow erstellen: + +**Trigger:** Cron +- Zeitplan 1: `0 8 * * *` (täglich 08:00) +- Zeitplan 2: `0 16 * * *` (täglich 16:00) + +**Aktion:** HTTP Request +- Method: `POST` +- URL: `https://news.vanityontour.de/api/n8n/pipeline` +- Header: `X-API-Key: ` + +**Fehlerbehandlung:** Bei HTTP-Fehler → E-Mail/Telegram-Alert + +--- + +## Telegram-Befehle + +| Befehl | Funktion | +|--------|----------| +| `/run` | Pipeline manuell starten | +| `/rejected` | Abgelehnte Artikel der letzten 3 Tage anzeigen | +| `/status` | Aktuellen Pipeline-Status | +| `/help` | Alle Befehle anzeigen | + +--- + +## Telegram-Benachrichtigungen + +### Neuer Draft erstellt +Wenn ein Artikel erfolgreich verarbeitet wurde: + +``` +✅ Neuer Draft erstellt +📰 [Artikel-Titel] +🟢 Relevanz-Score: 87/100 +📅 Vorgeschlagene Veröffentlichung: Mo, 24.03.2026 um 09:00 Uhr +🏷 #VanLife #Camping #Wohnmobil +🔗 Draft in WordPress öffnen + + [✏️ Neu schreiben] [❌ Verwerfen] +``` + +### Relevanz-Warnung (Score 60–79) +``` +⚠️ Artikel mit niedrigem Relevanz-Score +📰 [Artikel-Titel] +🟡 Score: 72/100 +💬 Artikel behandelt hauptsächlich... +🔗 Originalartikel + + [➕ Trotzdem verarbeiten] [❌ Ablehnen] +``` + +### Abgelehnte Artikel (Ende jedes Runs) +Liste aller abgelehnten Artikel mit Override-Buttons für jeden einzelnen. + +--- + +## Relevanz-Score + +Der GPT-basierte Score bewertet die Themenrelevanz für den VanLife/Camping-Blog: + +| Score | Aktion | +|-------|--------| +| 80–100 | Automatisch verarbeiten | +| 60–79 | Telegram-Warnung, manueller Override | +| 0–59 | Automatisch abgelehnt | + +Themen die hoch scored werden: Campingplätze, Stellplätze, Wohnmobile, Van-Ausbau, +Outdoor-Equipment, Wandern, Naturreisen, Roadtrips, Camping-Tipps. + +Schwellwerte sind in `.env` konfigurierbar: +``` +PIPELINE_RELEVANCE_AUTO=80 +PIPELINE_RELEVANCE_WARN=60 +``` + +--- + +## Veröffentlichungsplan + +- Maximal **2 Beiträge pro Tag** +- Bevorzugte Zeiten: **09:00 und 14:00 Uhr** (CET) +- Gleichmäßig über die Woche verteilt +- Der Vorschlag erscheint in der Telegram-Nachricht +- Manuell in WordPress setzen oder über WP Scheduling-Plugin automatisieren + +Einstellbar via: +``` +PIPELINE_MAX_DRAFTS_PER_DAY=2 +PIPELINE_PUBLISH_HOURS=9,14 +``` + +--- + +## API-Endpunkte (N8N / extern) + +Alle externen Endpunkte benötigen den Header `X-API-Key: `. + +| Methode | Endpunkt | Funktion | +|---------|----------|----------| +| `POST` | `/api/n8n/pipeline` | Komplette Pipeline starten | +| `POST` | `/api/n8n/ingest` | Nur RSS-Import (ohne Rewrite) | + +--- + +## Deployment (Hetzner via GitHub) + +Das Deployment läuft automatisch über GitHub Actions beim Push auf `main`: + +1. GitHub Action führt Tests aus +2. Bei Erfolg: SSH-Deploy auf Hetzner +3. `pip install -r requirements.txt` +4. Systemd-Dienst `rss-app` neu starten + +Workflow-Dateien: `.github/workflows/test.yml` und `.github/workflows/deploy.yml` + +--- + +## Troubleshooting + +**Pipeline läuft, aber keine Telegram-Nachrichten:** +- `TELEGRAM_BOT_TOKEN` und `TELEGRAM_CHAT_ID` prüfen +- Webhook-Status prüfen: `GET https://api.telegram.org/bot/getWebhookInfo` + +**N8N bekommt 401:** +- `N8N_API_KEY` in `.env` und N8N-Workflow-Header müssen übereinstimmen + +**Alle Artikel werden abgelehnt:** +- `PIPELINE_RELEVANCE_WARN` temporär auf 40 senken zum Testen +- Über `/rejected` + Override-Button manuell testen + +**Artikel werden doppelt importiert:** +- Deduplication läuft über `source_url` (eindeutig). Bereits verarbeitete Artikel werden nie erneut als Draft angelegt. diff --git a/docs/PROJECT_PLAN.md b/docs/PROJECT_PLAN.md new file mode 100644 index 0000000..3c61216 --- /dev/null +++ b/docs/PROJECT_PLAN.md @@ -0,0 +1,91 @@ +# Projektplan (Neustart) + +## Leitentscheidungen +- Bestehendes Repository wird weiterverwendet. +- Kein harter Endtermin: lauffaehig werden, dann iterativ verbessern. +- Hetzner bleibt Laufzeitplattform. +- WordPress (IONOS) bleibt vorerst Ziel fuer Publikation. +- Auth initial nur mit einem User/Password. + +## Zielbild +Eine modulare News-Pipeline mit klaren Stufen: +1. Feed-Ingestion +2. Inhaltsanalyse und Normalisierung +3. Rewrite/Anreicherung +4. Legal- und Qualitaetschecks +5. WordPress-Publikation (Draft-first, Queue + Retry) +6. Monitoring/Logging + +## Grobe Zeitplanung (ohne Fixtermine) +- Phase 0: ca. 1 Woche +- Phase 1: ca. 2-4 Wochen +- Phase 2: ca. 2-3 Wochen +- Phase 3: fortlaufend + +## Phasen + +### Phase 0 - Grundlagen (jetzt) +- Doku und Wiki strukturieren +- Source-Policy definieren +- Redirect fuer `news.vanityontour.de` setzen +- GitHub Project als zentrale Planung scharfstellen + +### Phase 1 - MVP Core +- Neues FastAPI-Projektgeruest +- SQLite-Datenmodell (feeds, articles, runs, source_policy) +- Feed-Import mit Duplikaterkennung +- Admin-Login (ein User) +- Manuelle Review vor Publish +- Admin-UI fuer Rechtscheck, Bildauswahl, Relevanzbewertung + +### Phase 2 - Automation +- Job-Queue (asynchron) +- Regelbasierte Scheduler +- Retry/Dead-Letter-Handling +- Robustes Error-Reporting +- WordPress-Publisher (Draft) mit Mapping `article_id -> wp_post_id` + +### Phase 3 - Compliance und Skalierung +- Source-Whitelisting mit Pflichtfeldern +- Pflicht-Attribution pro Artikel +- Qualitaetsmetriken und Audit-Logs +- Optional: Passkey/WebAuthn + +## Aktueller Stand (Snapshot) +- Backend/API + Admin-UI lauffaehig +- Feed-Ingestion inkl. Originalartikel-Extraktion (Autor, Pressekontakt, Bilder) +- Bildkuration: + - automatische Scoring-Reduktion (u. a. Presseportal `story_big` priorisiert) + - manuelle Auswahl/Ausblendung im UI +- Rechts-/Publish-Gates aktiv: + - `legal_checked` Pflicht + - Hauptbild-Auswahl Pflicht + - Status-Workflow bis `published` +- WordPress-Publishing: + - Queue + Retry + Job-Historie + - Draft-Erstellung/Update erfolgreich getestet +- Exporte: + - JSON/CSV inkl. Datum/Alter/Relevanz + Attribution/Legal-Felder + +## Naechste Iteration (konkret) +1. WordPress `featured_media` Upload aus ausgewaehltem Hauptbild +2. Publish-HTML je Artikel verfeinern (strukturierter Body + konsistenter Quellenblock) +3. Publisher als periodischen Worker (Timer/Cron/Systemd) auf Hetzner betreiben +4. Monitoring/Alerting fuer Queue-Fehler + WP-API Fehlercodes + +## Architekturprinzipien +- Idempotente Jobs +- Trennung von UI, API, Worker +- Strikte Validierung bei Quell-/Lizenzdaten +- Expliziter Publish-Schritt, kein blindes Autoposting + +## Risiken +- Lizenz-/Nutzungsbedingungen je Quelle variieren stark +- Feeds aendern Struktur/Verfuegbarkeit +- WordPress-API und Auth koennen regressionsanfaellig sein + +## Erfolgsmetriken +- Zeit von Feed-Eingang bis Review-Ready +- Quote sauber attribuierter Artikel +- Fehlerrate pro Pipeline-Stufe +- Anzahl manueller Eingriffe pro Woche diff --git a/docs/SOURCE_POLICY.md b/docs/SOURCE_POLICY.md new file mode 100644 index 0000000..d1d2e0c --- /dev/null +++ b/docs/SOURCE_POLICY.md @@ -0,0 +1,81 @@ +# Source Policy und Feed-Vorschlaege + +## Grundsatz +Es werden nur Quellen genutzt, deren Nutzungsbedingungen die geplante Nutzung erlauben oder fuer die eine explizite Genehmigung vorliegt. + +## Pflichtdaten pro Quelle +- Quellname +- Feed-URL +- Originalartikel-URL +- Autor/Herausgeber (wenn vorhanden) +- Lizenz/Nutzungsgrundlage +- Einschraenkungen (kommerziell, Bearbeitung, Bildrechte, Archivierung) +- Datum der letzten Pruefung +- Link auf Nutzungsbedingungen + +## Einstufung (Ampel) +- Gruen: Nutzung fuer geplantes Modell klar erlaubt +- Gelb: teilklar/mit Einschraenkungen, manuelle Pruefung erforderlich +- Rot: fuer das Modell nicht geeignet ohne Zusatzvertrag + +## Verbindliche Regeln +- Keine neue Quelle ohne Eintrag im Source-Register +- Kein automatischer Publish bei Gelb/Rot +- Bilder separat pruefen (Textrecht != Bildrecht) +- Quartalsweiser Re-Check der Terms + +## Ersteinschaetzung (Stand: 16.02.2026) + +### Rot +1. Reuters / Thomson Reuters +- Grund: Inhalte sind urheberrechtlich geschuetzt; Reproduktion/Verteilung laut Terms nur mit vorheriger Zustimmung. +- Folge: Nur mit explizitem Vertrag/Lizenz. +- Referenz: + - https://www.thomsonreuters.com/en/terms-of-use + +2. tagesschau.de RSS +- Grund: Inhalte nur privat/nicht-kommerziell; Veroeffentlichung grundsaetzlich nicht erlaubt (ausser explizit CC-lizenziert). +- Folge: Nicht fuer das geplante Modell geeignet. +- Referenz: + - https://www.tagesschau.de/infoservices/rssfeeds + +### Gelb +1. Presseportal / ots +- Grund: Redaktionelle Nutzung grundsaetzlich moeglich, aber Verantwortung liegt beim Verwender; darueber hinausgehende Geschaeftsnutzung nur mit Genehmigung. +- Folge: Nur mit strikter Einzelpruefung pro Meldung (insb. Bild-/Drittrechte). +- Referenz: + - https://www.presseportal.de/nutzungsbedingungen + - https://www.presseportal.de/feeds/ + +2. Bundesbehoerden-RSS ohne explizite freie Weiterverwendungs-Lizenz +- Grund: RSS wird bereitgestellt, aber nicht immer als offene Lizenz zur kommerziellen Nachnutzung formuliert. +- Folge: Je Behoerde einzeln pruefen und dokumentieren. +- Beispiele: + - https://www.bundesfinanzministerium.de/Content/DE/Standardartikel/Service/rss_base.html + - https://bmas.bund.de/EN/Services/RSS/rss.html + +### Gruen (mit korrekter Attribution) +1. GovData / Open-Data-Portale mit `dl-de/by-2-0`, `dl-de/zero-2-0`, `CC BY 4.0` oder `CC0` +- Grund: Diese Lizenzen erlauben grundsaetzlich auch kommerzielle Weiterverwendung (je nach Lizenzbedingungen). +- Folge: Sehr gut fuer stabile Automatisierung geeignet. +- Referenz: + - https://www.govdata.de/dl-de/by-2-0 + - https://data.gov.de/informationen/lizenzen + - https://www.dcat-ap.de/def/licenses/dl-zero-de/2.0 + +2. EU-Quellen mit expliziter `CC BY 4.0` Wiederverwendungsregel +- Grund: EU-Inhalte sind haeufig unter CC BY 4.0 wiederverwendbar, sofern nicht anders gekennzeichnet. +- Folge: Geeignet, wenn Drittinhalte ausgenommen werden. +- Referenz: + - https://commission.europa.eu/legal-notice_en + - https://eur-lex.europa.eu/content/help/content/legal-notice/legal-notice.html + +## Quelle im Register freischalten (Definition of Done) +- Terms-Link hinterlegt +- Lizenzklasse (Gruen/Gelb/Rot) gesetzt +- Pflicht-Attribution dokumentiert +- Bildrechtsregel dokumentiert +- Letzte Pruefung und Verantwortlicher gepflegt + +## Hinweis +Keine Rechtsberatung. Bei unklaren oder wirtschaftlich kritischen Quellen ist eine juristische Prüfung sinnvoll. diff --git a/docs/TODO.md b/docs/TODO.md new file mode 100644 index 0000000..fee4a67 --- /dev/null +++ b/docs/TODO.md @@ -0,0 +1,38 @@ +# ToDo (Ein-Entwickler Setup) + +## Jetzt +- [ ] WordPress Beitragsbild-Upload implementieren (`featured_media` aus ausgewaehltem Hauptbild) +- [ ] WordPress-HTML-Ausgabe pro Artikel weiter verbessern (sauberes Layout, Quellenblock, Shortcodes falls noetig) +- [ ] Publisher Fehlertexte fuer WP-Auth/Media/API in UI klarer darstellen +- [ ] End-to-end Publish Smoke-Test dokumentieren (lokal + Hetzner) + +## MVP +- [x] Neues Backend-Skelett (`backend/`) aufsetzen (FastAPI) +- [x] Datenmodell in SQLite anlegen +- [x] Feed-Ingestion Service bauen (ETag/Last-Modified) +- [x] Duplikaterkennung ueber `source_url`, `guid`, Hash +- [x] Login mit 1 Admin-Account implementieren +- [x] Artikel-Review-Maske mit Statusworkflow +- [x] WordPress-Publisher als separaten Service implementieren (Queue + Retry + Mapping) +- [x] Bildvorschau + manuelle Bildauswahl im Admin-UI +- [x] Automatische Bildreduktion/Scoring fuer Presseportal-Quellen +- [x] Artikel-Datum + Relevanzscore im UI/Export + +## Recht/Qualitaet +- [x] Source-Policy in DB + Admin-UI abbilden +- [x] Pflichtfelder je Quelle erzwingen (Autor, URL, Lizenz, Hinweise) +- [x] Auto-Block bei fehlender Lizenzinfo +- [x] Pro Artikel Attribution-Block generieren +- [x] Manuelle Rechtsfreigabe als Publish-Gate + +## Betrieb +- [ ] Systemd-Service(s) fuer API/Worker erstellen +- [ ] Nginx-Routing fuer neue App einrichten +- [ ] Healthcheck-Endpunkte + Monitoring einrichten +- [ ] Backup/Restore fuer DB dokumentieren + +## Spaeter +- [ ] Passkey/WebAuthn evaluieren und optional einfuehren +- [ ] Migration auf PostgreSQL bewerten +- [ ] Teilautomatische Freigabe-Regeln definieren +- [ ] KI-Rewrite mit Prompt-Versionierung + Qualitaetsmetriken wieder aktivieren diff --git a/docs/roadmap-image-dedup.md b/docs/roadmap-image-dedup.md new file mode 100644 index 0000000..cc2a32c --- /dev/null +++ b/docs/roadmap-image-dedup.md @@ -0,0 +1,37 @@ +# Roadmap: Bild-Deduplizierung & Medien-Hygiene + +## Ziele +- Speicherverbrauch reduzieren +- Medienbestand konsistent halten +- Pipeline stabilisieren (keine Mehrfach-Uploads und -Speicherungen) + +## Vorgehen (sicher und reversibel) +1. **Index aufbauen (Read-Only):** + - Alle Bilder (`.jpg/.jpeg/.png/.webp/.gif`) in definierten Verzeichnissen scannen + - Für jede Datei: `sha256` (Byte-Hash) + `pHash` (perzeptuell) berechnen + - Ergebnis als SQLite-Index + CSV-Report speichern + +2. **Kanonisierung & Referenzen prüfen:** + - Pro Duplikatgruppe genau **eine** kanonische Datei wählen (größte/neueste) + - Alle internen Referenzen (DB/JSON) testweise auf Kanon aktualisieren (Dry-Run) + +3. **Speicher sparen ohne Risiko:** + - Nicht-kanonische Dateien durch **Hardlinks** auf den Kanon ersetzen (gleiches FS) + - Alternativ: nur löschen, wenn Referenzen **sicher** auf Kanon zeigen + +4. **Prävention für die Zukunft:** + - Beim Speichern: **Content-Addressed Storage** (`.`) + - In DB ein `content_hash`-Feld mit **Unique-Constraint** + - Vor jedem Speichern/Upload: Hash lookup → vorhandene Datei wiederverwenden + +## Akzeptanzkriterien +- Report listet alle Duplikatgruppen mit Pfaden und Größenersparnis +- Dry-Run zeigt geplante Änderungen ohne Schreibzugriff +- Nach „Anwenden“ verweisen alle Referenzen auf die kanonische Datei +- Re-Run findet **keine** Duplikate mehr (idempotent) +- Rollback möglich via Backup der Reports/Indexdatei + +## Metriken +- Anzahl Bilder vorher/nachher +- Ersparter Speicher (MB/GB) +- Anzahl gruppierter Duplikate diff --git a/docs/wiki/Architektur.md b/docs/wiki/Architektur.md new file mode 100644 index 0000000..275b578 --- /dev/null +++ b/docs/wiki/Architektur.md @@ -0,0 +1,29 @@ +# Architektur + +## Zielarchitektur +- API: FastAPI +- Worker: Queue-basierte Hintergrundjobs +- DB: SQLite (MVP), spaeter optional PostgreSQL +- Publisher: WordPress REST API +- Frontend/Admin: schlanke Web-UI mit Login + +## Pipeline +1. Feed Fetch +2. Parse + Normalize +3. Deduplicate +4. Enrichment (Rewrite/Tags) +5. Legal/Policy Check +6. Publish (pending) + +## Datenobjekte (MVP) +- `sources` +- `feeds` +- `articles` +- `article_versions` +- `runs` +- `policy_checks` + +## Nichtziele (MVP) +- Multi-User und Rollen +- Vollautomatische Freigabe ohne Review +- Komplexe externe SSO-Integration diff --git a/docs/wiki/Deployment.md b/docs/wiki/Deployment.md new file mode 100644 index 0000000..91388c7 --- /dev/null +++ b/docs/wiki/Deployment.md @@ -0,0 +1,20 @@ +# Deployment (Hetzner + CloudPanel) + +## Umgebung +- Host: Hetzner +- Reverse Proxy: Nginx via CloudPanel +- Ziel-Domain: `news.vanityontour.de` + +## Aktueller Zustand +- Domain ist bis zum Go-Live auf `https://vanityontour.de` umgeleitet. + +## Zielzustand +- `news.vanityontour.de` zeigt auf neue App (interner Port, z. B. `127.0.0.1:8501`) +- API/Worker laufen als systemd-Services +- TLS bleibt ueber CloudPanel/Nginx + +## Mindest-Checks nach Deployment +- `curl -I https://news.vanityontour.de` +- Login erreichbar +- Feed-Import laeuft +- WordPress-Testpublikation (pending) erfolgreich diff --git a/docs/wiki/Home.md b/docs/wiki/Home.md new file mode 100644 index 0000000..300599a --- /dev/null +++ b/docs/wiki/Home.md @@ -0,0 +1,19 @@ +# Wiki Home + +## Zweck +Dieses Wiki dokumentiert Architektur, Betrieb, Sicherheit, Recht und Roadmap des Neuaufbaus von `rss-news`. + +## Inhalte +- `Architektur.md` +- `Deployment.md` +- `Security-Auth.md` +- `Recht-Quellen.md` +- `Operations-Runbook.md` +- `Roadmap.md` +- `Project-Board.md` + +## Projektsteuerung +- GitHub Project #3: https://github.com/users/OliverGiertz/projects/3/views/1 + +## Prinzip +Dokumentation wird bei jeder relevanten Aenderung im selben Pull Request aktualisiert. diff --git a/docs/wiki/Operations-Runbook.md b/docs/wiki/Operations-Runbook.md new file mode 100644 index 0000000..e6c0f88 --- /dev/null +++ b/docs/wiki/Operations-Runbook.md @@ -0,0 +1,43 @@ +# Operations Runbook + +## Daily Checks +- App erreichbar +- Queue/Worker aktiv +- Letzte Feed-Laeufe erfolgreich +- Keine auffaelligen Fehler im Log + +## Incident: Feed-Import faellt aus +1. RSS-Quelle erreichbar? +2. Parser-Fehler im Log? +3. Rate Limits oder Blockaden? +4. Retry-Queue pruefen + +## Incident: WordPress Publish faellt aus +1. WP API erreichbar? +2. Credentials gueltig? +3. Payload-Validation/Tag-Fehler? +4. Artikel in `pending` statt `failed` markieren, wenn unklar + +## Incident: Telegram-Buttons reagieren nicht / Befehle ignoriert + +**Ursache:** N8N "App Release - Telegram Bot"-Workflow hat den Webhook überschrieben. + +**Prüfen:** +```bash +curl -s "https://api.telegram.org/bot8403822424:AAGp8gZoNIGZv3IIan45q7P9HfM868qzXi4/getWebhookInfo" | python3 -m json.tool +``` +→ `url` muss auf `https://news.vanityontour.de/telegram/webhook` zeigen +→ `allowed_updates` muss `["message", "callback_query"]` enthalten + +**Webhook zurücksetzen:** +```bash +curl -s -X POST "https://api.telegram.org/bot8403822424:AAGp8gZoNIGZv3IIan45q7P9HfM868qzXi4/setWebhook" \ + -H "Content-Type: application/json" \ + -d '{"url":"https://news.vanityontour.de/telegram/webhook","allowed_updates":["message","callback_query"],"secret_token":"RWWAaBwfCUX9Y573JVkB9zAeloHsZZoruXOBBgUtsvU"}' +``` + +Vollständige Dokumentation: `projects/webhook/telegram-webhook-reset.md` + +## Backups +- SQLite-Dump taeglich +- Konfiguration und `.env` sicher sichern diff --git a/docs/wiki/Project-Board.md b/docs/wiki/Project-Board.md new file mode 100644 index 0000000..887ac19 --- /dev/null +++ b/docs/wiki/Project-Board.md @@ -0,0 +1,28 @@ +# Project Board Workflow + +## Zentrale Steuerung +- Board: https://github.com/users/OliverGiertz/projects/3/views/1 +- Board ist die einzige Quelle fuer Planungsstatus. + +## Arbeitsmodus (1 Entwickler) +- Neue Arbeit immer als Issue anlegen +- Issue direkt ins Project aufnehmen +- Status nur im Project pflegen +- PR/Commit auf Issue referenzieren + +## Empfohlene Status-Disziplin +- `Todo`: noch nicht begonnen +- `In Progress`: aktiv in Arbeit +- `Done`: umgesetzt und dokumentiert + +## Konventionen fuer Issues +- Prefix fuer Klarheit: + - `[MVP]` + - `[Infra]` + - `[Legal]` + - `[Bug]` +- Definition of Done in jedem Issue notieren + +## Aktueller Backlog-Hinweis +- Thema Userverwaltung ist fuer MVP obsolet (ein Admin-User). +- Entsprechende Issues als `deferred` oder `closed` kennzeichnen. diff --git a/docs/wiki/Recht-Quellen.md b/docs/wiki/Recht-Quellen.md new file mode 100644 index 0000000..212f0d5 --- /dev/null +++ b/docs/wiki/Recht-Quellen.md @@ -0,0 +1,35 @@ +# Recht und Quellen + +## Grundregeln +- Nur freigegebene Quellen aus Source-Register +- Pflicht-Attribution pro Artikel +- Rechte fuer Bilder separat pruefen +- Kein Autopublish bei unklarer Lizenz + +## Bewertungsmodell +- Gruen: Freie Nachnutzung klar erlaubt +- Gelb: Nutzung mit Einschraenkungen/Einzelfallpruefung +- Rot: Ohne Zusatzlizenz nicht geeignet + +## Aktuelle Referenzen +- Reuters/Thomson Reuters Terms: https://www.thomsonreuters.com/en/terms-of-use +- Presseportal Nutzungsbedingungen: https://www.presseportal.de/nutzungsbedingungen +- tagesschau RSS-Hinweise: https://www.tagesschau.de/infoservices/rssfeeds +- Datenlizenz Deutschland BY 2.0: https://www.govdata.de/dl-de/by-2-0 +- GovData Lizenzen: https://data.gov.de/informationen/lizenzen +- EU Legal Notice (CC BY 4.0): https://commission.europa.eu/legal-notice_en + +## Review-Checkliste je Quelle +1. Sind Bearbeitung und Veroeffentlichung erlaubt? +2. Ist kommerzielle Nutzung erlaubt? +3. Gibt es gesonderte Bildrechte? +4. Ist die Quellenangabe vorgeschrieben? +5. Gibt es Archivierungs- oder Weitergabebeschraenkungen? + +## Operativer Schutz +- Source-Register als Pflicht vor Feed-Aktivierung +- Auto-Block bei fehlenden Lizenzdaten +- Quartalsweiser Terms-Recheck + +## Hinweis +Keine Rechtsberatung. Finale Freigabe kritischer Quellen bei Bedarf juristisch validieren. diff --git a/docs/wiki/Roadmap.md b/docs/wiki/Roadmap.md new file mode 100644 index 0000000..fece89e --- /dev/null +++ b/docs/wiki/Roadmap.md @@ -0,0 +1,19 @@ +# Roadmap + +## Jetzt +- Doku und Projektstruktur bereinigen +- Redirect aktiv +- Backlog auf Neustart ausrichten + +## Naechster Schritt +- FastAPI-MVP implementieren +- Login + Feed-Ingestion + Review + WordPress pending + +## Danach +- Worker/Queue +- Source-Policy Enforcement +- Monitoring/Reporting +- Optional Passkey + +## Steuerung +Alle Arbeitsitems liegen im GitHub Project #3. diff --git a/docs/wiki/Security-Auth.md b/docs/wiki/Security-Auth.md new file mode 100644 index 0000000..a9f830a --- /dev/null +++ b/docs/wiki/Security-Auth.md @@ -0,0 +1,16 @@ +# Security und Auth + +## Mindestanforderungen +- Zugriff auf die WebApp nur mit Login +- Ein aktiver Admin-User (kein Rollenmodell im MVP) +- Passwort nicht im Repo, nur als Secret auf Server + +## Empfohlene Umsetzung +- Session-basierte Auth (HTTP-only Cookies) +- Passwort gehasht (Argon2 oder bcrypt) +- Rate Limiting auf Login-Endpunkt +- CSRF-Schutz fuer Form-Aktionen + +## Spaeter (optional) +- Passkey/WebAuthn als zusaetzlicher Login-Faktor +- IP-Allowlist fuer Admin-Zugang diff --git a/internal/git.sh b/internal/git.sh new file mode 100644 index 0000000..f79f0d3 --- /dev/null +++ b/internal/git.sh @@ -0,0 +1,20 @@ +# Aktuellen Stand vom main/master holen +git checkout main +git pull origin main + +# Neuen Feature-Branch erstellen +git checkout -b feature/neue-funktion + +# Entwickeln und committen +git add . +git commit -m "Neue Funktion implementiert" + +# Branch auf Remote-Repository pushen +git push -u origin feature/neue-funktion + + +# Alle Branches anzeigen +git branch -a + +# Aktuellen Branch anzeigen +git branch --show-current \ No newline at end of file diff --git a/logs/rss_tool.log b/logs/rss_tool.log index 01b220e..b724579 100644 --- a/logs/rss_tool.log +++ b/logs/rss_tool.log @@ -140,3 +140,6578 @@ 2025-07-08 10:38:57,857 - INFO - 🧠 Generiere DALL·E-Bild für Prompt: Das weltweit größte Caravaning-Erlebnis 2025-07-08 10:39:16,622 - INFO - HTTP Request: POST https://api.openai.com/v1/images/generations "HTTP/1.1 200 OK" 2025-07-08 10:39:16,627 - INFO - ✅ Bild generiert: https://oaidalleapiprodscus.blob.core.windows.net/private/org-YimPc01cYtOXjUpCATUqDABw/user-eA31w0vmy3fOrb3G64Ygndsr/img-6d1irbwhkDKGNvLJG50pYaZK.png?st=2025-07-08T07%3A39%3A16Z&se=2025-07-08T09%3A39%3A16Z&sp=r&sv=2024-08-04&sr=b&rscd=inline&rsct=image/png&skoid=cc612491-d948-4d2e-9821-2683df3719f5&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-07-07T20%3A35%3A26Z&ske=2025-07-08T20%3A35%3A26Z&sks=b&skv=2024-08-04&sig=DVMzSGr162NqN8830eX0tAH5Wtm5NAnTPxk2C7NQgTs%3D +2025-07-11 08:22:15,359 - INFO - Lade Feed: https://www.camping-news.de/rss/ +2025-07-11 08:22:15,648 - INFO - 0 neue Artikel gefunden in https://www.camping-news.de/rss/ +2025-07-11 08:22:15,649 - INFO - Keine neuen Artikel gefunden. +2025-07-11 08:29:26,863 - INFO - Lade Feed: https://www.camping-news.de/rss/ +2025-07-11 08:29:27,225 - INFO - 0 neue Artikel gefunden in https://www.camping-news.de/rss/ +2025-07-11 08:29:27,225 - INFO - Lade Feed: https://www.promobil.de/rss/news +2025-07-11 08:29:27,464 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/termine-veranstaltungen-juni-juli/ +2025-07-11 08:29:27,618 - INFO - 13 Bilder gefunden bei https://www.promobil.de/termine-veranstaltungen-juni-juli/ +2025-07-11 08:29:27,618 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ +2025-07-11 08:29:27,782 - INFO - 22 Bilder gefunden bei https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ +2025-07-11 08:29:27,783 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/ +2025-07-11 08:29:27,984 - INFO - 23 Bilder gefunden bei https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/ +2025-07-11 08:29:27,985 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/ +2025-07-11 08:29:28,132 - INFO - 21 Bilder gefunden bei https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/ +2025-07-11 08:29:28,132 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ +2025-07-11 08:29:28,279 - INFO - 13 Bilder gefunden bei https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ +2025-07-11 08:29:28,280 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/ +2025-07-11 08:29:28,422 - INFO - 14 Bilder gefunden bei https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/ +2025-07-11 08:29:28,422 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/top-10-clever-campen-videos-2024/ +2025-07-11 08:29:28,572 - INFO - 14 Bilder gefunden bei https://www.promobil.de/top-10-clever-campen-videos-2024/ +2025-07-11 08:29:28,572 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/ +2025-07-11 08:29:28,761 - INFO - 25 Bilder gefunden bei https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/ +2025-07-11 08:29:28,761 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/ +2025-07-11 08:29:28,945 - INFO - 33 Bilder gefunden bei https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/ +2025-07-11 08:29:28,946 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ +2025-07-11 08:29:29,104 - INFO - 13 Bilder gefunden bei https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ +2025-07-11 08:29:29,105 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/ +2025-07-11 08:29:29,257 - INFO - 15 Bilder gefunden bei https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/ +2025-07-11 08:29:29,257 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/ +2025-07-11 08:29:29,436 - INFO - 24 Bilder gefunden bei https://www.promobil.de/rocket-ryzon-campingbus-von-extrem-sportler-jonas-deichmann/ +2025-07-11 08:29:29,436 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/ +2025-07-11 08:29:29,593 - INFO - 16 Bilder gefunden bei https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/ +2025-07-11 08:29:29,593 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/ +2025-07-11 08:29:29,786 - INFO - 19 Bilder gefunden bei https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/ +2025-07-11 08:29:29,786 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/can-kasim-dogan-interview-westfalia/ +2025-07-11 08:29:29,934 - INFO - 13 Bilder gefunden bei https://www.promobil.de/can-kasim-dogan-interview-westfalia/ +2025-07-11 08:29:29,934 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/ +2025-07-11 08:29:30,103 - INFO - 22 Bilder gefunden bei https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/ +2025-07-11 08:29:30,103 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/spielorte-em-2024-frankfurt/ +2025-07-11 08:29:30,276 - INFO - 18 Bilder gefunden bei https://www.promobil.de/spielorte-em-2024-frankfurt/ +2025-07-11 08:29:30,276 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/ +2025-07-11 08:29:30,450 - INFO - 18 Bilder gefunden bei https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/ +2025-07-11 08:29:30,451 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/camper-radio-radiosender-caravan-fm/ +2025-07-11 08:29:30,600 - INFO - 13 Bilder gefunden bei https://www.promobil.de/camper-radio-radiosender-caravan-fm/ +2025-07-11 08:29:30,600 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/ +2025-07-11 08:29:30,750 - INFO - 13 Bilder gefunden bei https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/ +2025-07-11 08:29:30,750 - INFO - 20 neue Artikel gefunden in https://www.promobil.de/rss/news +2025-07-11 08:29:30,759 - INFO - 20 neue Artikel gespeichert. +2025-07-11 08:34:46,453 - INFO - ✍️ Umschreiben von: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-07-11 08:34:50,280 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-07-11 08:34:51,815 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-07-11 08:34:51,819 - INFO - ✅ Artikel umgeschrieben: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-07-11 08:34:51,819 - INFO - ✍️ Umschreiben von: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-07-11 08:34:57,346 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-07-11 08:34:59,085 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-07-11 08:34:59,087 - INFO - ✅ Artikel umgeschrieben: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-07-11 08:34:59,087 - INFO - ✍️ Umschreiben von: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-07-11 08:35:05,071 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-07-11 08:35:07,789 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-07-11 08:35:07,792 - INFO - ✅ Artikel umgeschrieben: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-07-11 08:35:07,803 - INFO - Alle Artikel mit Status 'Rewrite' wurden verarbeitet. +2025-07-11 08:54:52,549 - INFO - Lade Feed: https://www.camping-news.de/rss/ +2025-07-11 08:54:53,036 - INFO - 0 neue Artikel gefunden in https://www.camping-news.de/rss/ +2025-07-11 08:54:53,036 - INFO - Lade Feed: https://www.promobil.de/rss/news +2025-07-11 08:54:53,402 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/termine-veranstaltungen-juni-juli/ +2025-07-11 08:54:53,558 - INFO - 13 Bilder gefunden bei https://www.promobil.de/termine-veranstaltungen-juni-juli/ +2025-07-11 08:54:53,731 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ +2025-07-11 08:54:53,908 - INFO - 22 Bilder gefunden bei https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ +2025-07-11 08:54:54,076 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ +2025-07-11 08:54:54,217 - INFO - 13 Bilder gefunden bei https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ +2025-07-11 08:54:54,376 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ +2025-07-11 08:54:54,537 - INFO - 13 Bilder gefunden bei https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ +2025-07-11 08:54:54,682 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/camper-radio-radiosender-caravan-fm/ +2025-07-11 08:54:54,826 - INFO - 13 Bilder gefunden bei https://www.promobil.de/camper-radio-radiosender-caravan-fm/ +2025-07-11 08:54:54,826 - INFO - 5 neue Artikel gefunden in https://www.promobil.de/rss/news +2025-07-11 08:54:54,834 - INFO - 5 neue Artikel gespeichert. +2025-07-11 09:34:42,951 - INFO - ❌ Feed gelöscht: Promobil Ratgeber (https://www.promobil.de/rss/ratgeber) +2025-07-11 09:35:05,863 - INFO - 🔗 Neuer Feed hinzugefügt: Promobil Ratgeber (https://www.promobil.de/rss/ratgeber) +2025-07-28 09:17:09,355 - INFO - ✍️ Umschreiben von: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-07-28 09:17:19,759 - INFO - Retrying request to /chat/completions in 0.484478 seconds +2025-07-28 09:17:30,386 - INFO - Retrying request to /chat/completions in 0.765465 seconds +2025-07-28 09:17:41,238 - ERROR - ❌ Fehler beim Umschreiben von 'Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun!': +Traceback (most recent call last): + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_transports/default.py", line 101, in map_httpcore_exceptions + yield + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_transports/default.py", line 250, in handle_request + resp = self._pool.handle_request(req) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpcore/_sync/connection_pool.py", line 256, in handle_request + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpcore/_sync/connection_pool.py", line 236, in handle_request + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpcore/_sync/connection.py", line 101, in handle_request + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpcore/_sync/connection.py", line 78, in handle_request + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpcore/_sync/connection.py", line 124, in _connect + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpcore/_backends/sync.py", line 207, in connect_tcp + File "/opt/homebrew/Cellar/python@3.13/3.13.5/Frameworks/Python.framework/Versions/3.13/lib/python3.13/contextlib.py", line 162, in __exit__ + self.gen.throw(value) + ~~~~~~~~~~~~~~^^^^^^^ + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions +httpcore.ConnectError: [Errno 8] nodename nor servname provided, or not known + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/openai/_base_client.py", line 972, in request + response = self._client.send( + request, + stream=stream or self._should_stream_response_body(request=request), + **kwargs, + ) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_client.py", line 914, in send + response = self._send_handling_auth( + request, + ...<2 lines>... + history=[], + ) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_client.py", line 942, in _send_handling_auth + response = self._send_handling_redirects( + request, + follow_redirects=follow_redirects, + history=history, + ) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_client.py", line 979, in _send_handling_redirects + response = self._send_single_request(request) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_client.py", line 1014, in _send_single_request + response = transport.handle_request(request) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_transports/default.py", line 249, in handle_request + with map_httpcore_exceptions(): + ~~~~~~~~~~~~~~~~~~~~~~~^^ + File "/opt/homebrew/Cellar/python@3.13/3.13.5/Frameworks/Python.framework/Versions/3.13/lib/python3.13/contextlib.py", line 162, in __exit__ + self.gen.throw(value) + ~~~~~~~~~~~~~~^^^^^^^ + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_transports/default.py", line 118, in map_httpcore_exceptions + raise mapped_exc(message) from exc +httpx.ConnectError: [Errno 8] nodename nor servname provided, or not known + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "/Users/oliver/Documents/rss-news/main.py", line 145, in rewrite_articles + response = openai.chat.completions.create( + model="gpt-4", + ...<3 lines>... + ] + ) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/openai/_utils/_utils.py", line 287, in wrapper + return func(*args, **kwargs) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/openai/resources/chat/completions/completions.py", line 1087, in create + return self._post( + ~~~~~~~~~~^ + "/chat/completions", + ^^^^^^^^^^^^^^^^^^^^ + ...<43 lines>... + stream_cls=Stream[ChatCompletionChunk], + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/openai/_base_client.py", line 1249, in post + return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) + ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/openai/_base_client.py", line 1004, in request + raise APIConnectionError(request=request) from err +openai.APIConnectionError: Connection error. +2025-07-28 09:18:02,091 - INFO - ✍️ Umschreiben von: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-07-28 09:18:02,094 - INFO - Retrying request to /chat/completions in 0.415304 seconds +2025-07-28 09:18:02,517 - INFO - Retrying request to /chat/completions in 0.899018 seconds +2025-07-28 09:18:03,419 - ERROR - ❌ Fehler beim Umschreiben von 'Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans': +Traceback (most recent call last): + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_transports/default.py", line 101, in map_httpcore_exceptions + yield + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_transports/default.py", line 250, in handle_request + resp = self._pool.handle_request(req) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpcore/_sync/connection_pool.py", line 256, in handle_request + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpcore/_sync/connection_pool.py", line 236, in handle_request + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpcore/_sync/connection.py", line 101, in handle_request + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpcore/_sync/connection.py", line 78, in handle_request + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpcore/_sync/connection.py", line 124, in _connect + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpcore/_backends/sync.py", line 207, in connect_tcp + File "/opt/homebrew/Cellar/python@3.13/3.13.5/Frameworks/Python.framework/Versions/3.13/lib/python3.13/contextlib.py", line 162, in __exit__ + self.gen.throw(value) + ~~~~~~~~~~~~~~^^^^^^^ + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpcore/_exceptions.py", line 14, in map_exceptions +httpcore.ConnectError: [Errno 8] nodename nor servname provided, or not known + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/openai/_base_client.py", line 972, in request + response = self._client.send( + request, + stream=stream or self._should_stream_response_body(request=request), + **kwargs, + ) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_client.py", line 914, in send + response = self._send_handling_auth( + request, + ...<2 lines>... + history=[], + ) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_client.py", line 942, in _send_handling_auth + response = self._send_handling_redirects( + request, + follow_redirects=follow_redirects, + history=history, + ) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_client.py", line 979, in _send_handling_redirects + response = self._send_single_request(request) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_client.py", line 1014, in _send_single_request + response = transport.handle_request(request) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_transports/default.py", line 249, in handle_request + with map_httpcore_exceptions(): + ~~~~~~~~~~~~~~~~~~~~~~~^^ + File "/opt/homebrew/Cellar/python@3.13/3.13.5/Frameworks/Python.framework/Versions/3.13/lib/python3.13/contextlib.py", line 162, in __exit__ + self.gen.throw(value) + ~~~~~~~~~~~~~~^^^^^^^ + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/httpx/_transports/default.py", line 118, in map_httpcore_exceptions + raise mapped_exc(message) from exc +httpx.ConnectError: [Errno 8] nodename nor servname provided, or not known + +The above exception was the direct cause of the following exception: + +Traceback (most recent call last): + File "/Users/oliver/Documents/rss-news/main.py", line 145, in rewrite_articles + response = openai.chat.completions.create( + model="gpt-4", + ...<3 lines>... + ] + ) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/openai/_utils/_utils.py", line 287, in wrapper + return func(*args, **kwargs) + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/openai/resources/chat/completions/completions.py", line 1087, in create + return self._post( + ~~~~~~~~~~^ + "/chat/completions", + ^^^^^^^^^^^^^^^^^^^^ + ...<43 lines>... + stream_cls=Stream[ChatCompletionChunk], + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + ) + ^ + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/openai/_base_client.py", line 1249, in post + return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)) + ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + File "/Users/oliver/Documents/rss-news/.venv/lib/python3.13/site-packages/openai/_base_client.py", line 1004, in request + raise APIConnectionError(request=request) from err +openai.APIConnectionError: Connection error. +2025-07-28 09:18:43,426 - INFO - ✍️ Umschreiben von: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-07-28 09:19:04,744 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-07-28 09:19:09,962 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-07-28 09:19:09,964 - INFO - ✅ Artikel umgeschrieben: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-07-28 09:19:09,964 - INFO - ✍️ Umschreiben von: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-07-28 09:19:23,989 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-07-28 09:19:27,267 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-07-28 09:19:27,269 - INFO - ✅ Artikel umgeschrieben: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-07-28 09:19:27,276 - INFO - Alle Artikel mit Status 'Rewrite' wurden verarbeitet. +2025-07-28 09:27:10,258 - INFO - 🧠 Generiere DALL·E-Bild für Prompt: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-07-28 09:27:26,502 - INFO - HTTP Request: POST https://api.openai.com/v1/images/generations "HTTP/1.1 200 OK" +2025-07-28 09:27:26,514 - INFO - ✅ Bild generiert: https://oaidalleapiprodscus.blob.core.windows.net/private/org-YimPc01cYtOXjUpCATUqDABw/user-eA31w0vmy3fOrb3G64Ygndsr/img-yKWdGDCQJZBOCQ4V4HoD40A0.png?st=2025-07-28T06%3A27%3A26Z&se=2025-07-28T08%3A27%3A26Z&sp=r&sv=2024-08-04&sr=b&rscd=inline&rsct=image/png&skoid=cc612491-d948-4d2e-9821-2683df3719f5&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-07-27T22%3A07%3A39Z&ske=2025-07-28T22%3A07%3A39Z&sks=b&skv=2024-08-04&sig=HUMRhg2FbaKnLil%2BMbyvNemVeBcrvTODpctkfQyFHPc%3D +2025-07-28 09:39:35,087 - INFO - Lade Feed: https://www.camping-news.de/rss/ +2025-07-28 09:39:35,473 - INFO - 0 neue Artikel gefunden in https://www.camping-news.de/rss/ +2025-07-28 09:39:35,473 - INFO - Lade Feed: https://www.promobil.de/rss/news +2025-07-28 09:39:35,914 - INFO - 0 neue Artikel gefunden in https://www.promobil.de/rss/news +2025-07-28 09:39:35,915 - INFO - Lade Feed: https://www.promobil.de/rss/ratgeber +2025-07-28 09:39:36,365 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/ +2025-07-28 09:39:36,584 - INFO - 16 Bilder gefunden bei https://www.promobil.de/weitere-ratgeber/stunt-auf-wohnwagen-jensen-ackles-countdown/ +2025-07-28 09:39:36,585 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/ +2025-07-28 09:39:36,793 - INFO - 13 Bilder gefunden bei https://www.promobil.de/weitere-ratgeber/clever-campen-podcast-wie-passen-gravelbikes-und-camping-zusamen/ +2025-07-28 09:39:36,794 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/ +2025-07-28 09:39:36,999 - INFO - 15 Bilder gefunden bei https://www.promobil.de/weitere-ratgeber/stellplatz-radar-30-tage-kostenlos-alle-plus-funktionen/ +2025-07-28 09:39:36,999 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/ +2025-07-28 09:39:37,219 - INFO - 14 Bilder gefunden bei https://www.promobil.de/weitere-ratgeber/wann-der-digitale-fahrzeugschein-fuer-alle-kommt/ +2025-07-28 09:39:37,220 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/ +2025-07-28 09:39:37,439 - INFO - 22 Bilder gefunden bei https://www.promobil.de/weitere-ratgeber/umfrage-welches-bad-brauchen-sie-im-wohnmobil/ +2025-07-28 09:39:37,440 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/ +2025-07-28 09:39:37,744 - INFO - 13 Bilder gefunden bei https://www.promobil.de/weitere-ratgeber/umfrage-kaffeegenuss-camping-wohnmobil-wohnwagen/ +2025-07-28 09:39:37,746 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/ +2025-07-28 09:39:37,983 - INFO - 17 Bilder gefunden bei https://www.promobil.de/weitere-ratgeber/meinung-privates-mietbad-beim-camping-komfort-oder-stilbruch/ +2025-07-28 09:39:37,984 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/ +2025-07-28 09:39:38,242 - INFO - 20 Bilder gefunden bei https://www.promobil.de/tipps/caravan-salon-duesseldorf-eine-einmalige-gelegenheit-fuer-camping-zubehoer-shopper/ +2025-07-28 09:39:38,244 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/ +2025-07-28 09:39:38,476 - INFO - 20 Bilder gefunden bei https://www.promobil.de/tipps/caravan-salon-2025-6-gruende-besuch-messe/ +2025-07-28 09:39:38,479 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/ +2025-07-28 09:39:38,758 - INFO - 24 Bilder gefunden bei https://www.promobil.de/tipps/tipps-schutz-gegen-sommerhitze-hitzestau-wohnmobil/ +2025-07-28 09:39:38,759 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/ +2025-07-28 09:39:39,019 - INFO - 16 Bilder gefunden bei https://www.promobil.de/ratgeber/dethleffs-reiselust-praemie-2025-rabatte-wohnmobile/ +2025-07-28 09:39:39,021 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/ +2025-07-28 09:39:39,254 - INFO - 13 Bilder gefunden bei https://www.promobil.de/weitere-ratgeber/promobil-newsletter-ab-sofort-zwei-mal-die-woche-samstags-keine-camping-news-verpassen/ +2025-07-28 09:39:39,256 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/ +2025-07-28 09:39:39,516 - INFO - 18 Bilder gefunden bei https://www.promobil.de/weitere-ratgeber/campingtourismus-boomt-drittes-camping-rekordjahr-in-folge/ +2025-07-28 09:39:39,517 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/ +2025-07-28 09:39:39,729 - INFO - 13 Bilder gefunden bei https://www.promobil.de/ratgeber/camping-ausruester-herzog-beantragt-insolvenz-wohnmobilhandel-belastet-vorzelthersteller/ +2025-07-28 09:39:39,731 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/ +2025-07-28 09:39:39,951 - INFO - 13 Bilder gefunden bei https://www.promobil.de/tipps/bordtechnik-einmaleins-einsteiger-tipps-fuer-den-campingurlaub/ +2025-07-28 09:39:39,952 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/ +2025-07-28 09:39:40,197 - INFO - 13 Bilder gefunden bei https://www.promobil.de/weitere-ratgeber/gotthard-brenner-reschenpass-wo-wohnmobile-und-camper-heute-geduld-brauchen/ +2025-07-28 09:39:40,199 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/ +2025-07-28 09:39:40,458 - INFO - 13 Bilder gefunden bei https://www.promobil.de/tipps/leichtbautricks-wohnmobilhersteller/ +2025-07-28 09:39:40,462 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/ +2025-07-28 09:39:40,695 - INFO - 16 Bilder gefunden bei https://www.promobil.de/weitere-ratgeber/slowenische-campingmarken-sind-laengst-auf-dem-deutschen-markt-angekommen/ +2025-07-28 09:39:40,697 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/ +2025-07-28 09:39:40,919 - INFO - 14 Bilder gefunden bei https://www.promobil.de/weitere-ratgeber/recap-folge-2-bella-italia-camping-auf-deutsch/ +2025-07-28 09:39:40,922 - INFO - 📷 Extrahiere Bilder von https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/ +2025-07-28 09:39:41,210 - INFO - 17 Bilder gefunden bei https://www.promobil.de/weitere-ratgeber/diese-kostenlosen-apps-muessen-camper-kennen/ +2025-07-28 09:39:41,210 - INFO - 20 neue Artikel gefunden in https://www.promobil.de/rss/ratgeber +2025-07-28 09:39:41,211 - INFO - Lade Feed: https://caravan.fm/ +2025-07-28 09:39:44,233 - INFO - 0 neue Artikel gefunden in https://caravan.fm/ +2025-07-28 09:39:44,238 - INFO - 20 neue Artikel gespeichert. +2025-07-28 09:42:36,590 - INFO - ❌ Feed gelöscht: Neuer Feed (https://caravan.fm/) +2025-07-28 09:44:53,801 - INFO - ✍️ Umschreiben von: Pannen und Probleme im Wohnmobil & Wohnwagen: Erste Hilfe für die Camper-Bordtechnik +2025-07-28 09:45:18,500 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-07-28 09:45:21,113 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-07-28 09:45:21,126 - INFO - ✅ Artikel umgeschrieben: Pannen und Probleme im Wohnmobil & Wohnwagen: Erste Hilfe für die Camper-Bordtechnik +2025-07-28 09:45:21,146 - INFO - Alle Artikel mit Status 'Rewrite' wurden verarbeitet. +2025-07-28 10:29:47,016 - INFO - Lade Feed: https://www.camping-news.de/rss/ +2025-07-28 10:29:47,407 - INFO - 0 neue Artikel gefunden in https://www.camping-news.de/rss/ +2025-07-28 10:29:47,407 - INFO - Lade Feed: https://www.promobil.de/rss/news +2025-07-28 10:29:47,719 - INFO - 0 neue Artikel gefunden in https://www.promobil.de/rss/news +2025-07-28 10:29:47,719 - INFO - Lade Feed: https://www.promobil.de/rss/ratgeber +2025-07-28 10:29:48,183 - INFO - 0 neue Artikel gefunden in https://www.promobil.de/rss/ratgeber +2025-07-28 10:29:48,183 - INFO - Keine neuen Artikel gefunden. +2025-07-29 19:30:44,481 - INFO - Lade Feed: https://www.camping-news.de/rss/ +2025-07-29 19:30:44,923 - INFO - 0 neue Artikel gefunden in https://www.camping-news.de/rss/ +2025-07-29 19:30:44,923 - INFO - Lade Feed: https://www.promobil.de/rss/news +2025-07-29 19:30:45,348 - INFO - 0 neue Artikel gefunden in https://www.promobil.de/rss/news +2025-07-29 19:30:45,348 - INFO - Lade Feed: https://www.promobil.de/rss/ratgeber +2025-07-29 19:30:45,899 - INFO - 0 neue Artikel gefunden in https://www.promobil.de/rss/ratgeber +2025-07-29 19:30:45,899 - INFO - Keine neuen Artikel gefunden. +2025-08-15 09:44:18,677 - INFO - Lade Feed: https://www.camping-news.de/rss/ +2025-08-15 09:44:18,993 - INFO - 0 neue Artikel gefunden in https://www.camping-news.de/rss/ +2025-08-15 09:44:18,993 - INFO - Lade Feed: https://www.promobil.de/rss/news +2025-08-15 09:44:19,241 - INFO - 0 neue Artikel gefunden in https://www.promobil.de/rss/news +2025-08-15 09:44:19,241 - INFO - Lade Feed: https://www.promobil.de/rss/ratgeber +2025-08-15 09:44:19,550 - INFO - 🖼️ Starte Bildextraktion von: https://www.promobil.de/weitere-ratgeber/frankreichs-autobahnen-kein-adac-schutz-bei-pannen/ +2025-08-15 09:44:19,709 - INFO - 🔍 12 img-Tags gefunden +2025-08-15 09:44:19,710 - INFO - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-15 09:44:19,710 - ERROR - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.promobil.de/weitere-ratgeber/frankreichs-autobahnen-kein-adac-schutz-bei-pannen/: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-15 09:44:19,710 - INFO - 🖼️ Starte Bildextraktion von: https://www.promobil.de/weitere-ratgeber/warntafel-wahnsinn-in-italien-anbringen-an-fahrradtraegern-trotz-neuer-gesetze-empfohlen/ +2025-08-15 09:44:19,856 - INFO - 🔍 13 img-Tags gefunden +2025-08-15 09:44:19,856 - INFO - ✅ Bild hinzugefügt: 02/2024, Fahrradträger mit Warntafel... +2025-08-15 09:44:19,856 - INFO - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-15 09:44:19,857 - ERROR - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.promobil.de/weitere-ratgeber/warntafel-wahnsinn-in-italien-anbringen-an-fahrradtraegern-trotz-neuer-gesetze-empfohlen/: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-15 09:44:19,859 - INFO - 🖼️ Starte Bildextraktion von: https://www.promobil.de/tipps/achtung-mautschock-warum-viele-wohnmobile-bald-eine-go-box-brauchen/ +2025-08-15 09:44:20,025 - INFO - 🔍 20 img-Tags gefunden +2025-08-15 09:44:20,025 - INFO - ✅ Bild hinzugefügt: Maut, Basis, Wissen, Österreich, Vignette, Go-Box,... +2025-08-15 09:44:20,025 - INFO - ✅ Bild hinzugefügt: Wohnmobil, Küste, Parkplatz, Wohnmobil, Mann... +2025-08-15 09:44:20,026 - INFO - ✅ Bild hinzugefügt: 05/2025, Spanien Polizei Verkehr... +2025-08-15 09:44:20,026 - INFO - ✅ Bild hinzugefügt: f_Autohof, Restaurant, essen, vegetarisch... +2025-08-15 09:44:20,026 - INFO - ✅ Bild hinzugefügt: Supercheck, Dethleffs Magic Edition T 2 EB, Seiten... +2025-08-15 09:44:20,026 - INFO - 🎉 5 Bilder erfolgreich extrahiert von https://www.promobil.de/tipps/achtung-mautschock-warum-viele-wohnmobile-bald-eine-go-box-brauchen/ +2025-08-15 09:44:20,026 - INFO - 3 neue Artikel gefunden in https://www.promobil.de/rss/ratgeber +2025-08-15 09:44:20,038 - INFO - 3 neue Artikel gespeichert. +2025-08-15 09:45:55,607 - INFO - ✍️ Umschreiben von: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht? +2025-08-15 09:46:09,158 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-15 09:46:11,508 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-15 09:46:11,564 - INFO - ✅ Artikel umgeschrieben: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht? +2025-08-15 09:46:11,565 - INFO - ✍️ Umschreiben von: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box +2025-08-15 09:46:32,092 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-15 09:46:34,549 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-15 09:46:34,552 - INFO - ✅ Artikel umgeschrieben: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box +2025-08-15 09:46:34,571 - INFO - Alle Artikel mit Status 'Rewrite' wurden verarbeitet. +2025-08-15 09:48:30,972 - INFO - 🧠 Generiere DALL·E-Bild für Prompt: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht? +2025-08-15 09:48:42,548 - INFO - HTTP Request: POST https://api.openai.com/v1/images/generations "HTTP/1.1 200 OK" +2025-08-15 09:48:42,559 - INFO - ✅ Bild generiert: https://oaidalleapiprodscus.blob.core.windows.net/private/org-YimPc01cYtOXjUpCATUqDABw/user-eA31w0vmy3fOrb3G64Ygndsr/img-Ksiks2ssSZxpEFf1MQedlap1.png?st=2025-08-15T06%3A48%3A42Z&se=2025-08-15T08%3A48%3A42Z&sp=r&sv=2024-08-04&sr=b&rscd=inline&rsct=image/png&skoid=8b33a531-2df9-46a3-bc02-d4b1430a422c&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-08-14T16%3A59%3A16Z&ske=2025-08-15T16%3A59%3A16Z&sks=b&skv=2024-08-04&sig=e0/ULpNgNLwixo3UapqnxHgR18t4HCpyEtnbmik33yA%3D +2025-08-15 09:51:43,090 - INFO - 🧠 Generiere DALL·E-Bild für Prompt: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box +2025-08-15 09:51:53,907 - INFO - HTTP Request: POST https://api.openai.com/v1/images/generations "HTTP/1.1 200 OK" +2025-08-15 09:51:53,914 - INFO - ✅ Bild generiert: https://oaidalleapiprodscus.blob.core.windows.net/private/org-YimPc01cYtOXjUpCATUqDABw/user-eA31w0vmy3fOrb3G64Ygndsr/img-Pl4ik6W7mTrv2MhIbdWlwgOL.png?st=2025-08-15T06%3A51%3A53Z&se=2025-08-15T08%3A51%3A53Z&sp=r&sv=2024-08-04&sr=b&rscd=inline&rsct=image/png&skoid=b1a0ae1f-618f-4548-84fd-8b16cacd5485&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2025-08-14T15%3A09%3A17Z&ske=2025-08-15T15%3A09%3A17Z&sks=b&skv=2024-08-04&sig=RHIFlJLMumrcr/jEskOVfqJ%2Bns0pDS2HM8l5siBfLmM%3D +2025-08-15 09:55:42,370 - INFO - Lade Feed: https://www.camping-news.de/rss/ +2025-08-15 09:55:42,639 - INFO - 0 neue Artikel gefunden in https://www.camping-news.de/rss/ +2025-08-15 09:55:42,640 - INFO - Lade Feed: https://www.promobil.de/rss/news +2025-08-15 09:55:42,843 - INFO - 0 neue Artikel gefunden in https://www.promobil.de/rss/news +2025-08-15 09:55:42,843 - INFO - Lade Feed: https://www.promobil.de/rss/ratgeber +2025-08-15 09:55:43,180 - INFO - 0 neue Artikel gefunden in https://www.promobil.de/rss/ratgeber +2025-08-15 09:55:43,180 - INFO - Keine neuen Artikel gefunden. +2025-08-16 12:11:35,892 - INFO - load_articles:123 - ✅ 53 Artikel geladen +2025-08-16 12:11:35,893 - INFO - load_feeds:92 - ✅ 3 Feeds geladen +2025-08-16 12:42:43,093 - INFO - load_articles:124 - ✅ 53 Artikel geladen +2025-08-16 12:42:43,095 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:48:41,965 - INFO - load_articles:124 - ✅ 53 Artikel geladen +2025-08-16 12:48:41,966 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:49:23,544 - INFO - load_articles:124 - ✅ 53 Artikel geladen +2025-08-16 12:49:23,544 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:49:23,547 - INFO - process_articles:268 - 🚀 Starte Artikel-Verarbeitung +2025-08-16 12:49:23,547 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:49:23,554 - INFO - load_articles:124 - ✅ 53 Artikel geladen +2025-08-16 12:49:23,554 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.camping-news.de/rss/ +2025-08-16 12:49:25,076 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Camping-News +2025-08-16 12:49:25,076 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-16 12:49:25,079 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 15 Jahre PremiumCamps +2025-08-16 12:49:25,080 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue Eriba Feeling und Novaline +2025-08-16 12:49:25,081 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Den eigenen Verbrauchszahlen auf der Spur +2025-08-16 12:49:25,083 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Abenteuer für die Kleinen, Entspannung für +die Großen +2025-08-16 12:49:25,084 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Das weltweit größte Caravaning-Erlebnis +2025-08-16 12:49:25,086 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Komfort und Flexibilität für moderne Camper +2025-08-16 12:49:25,087 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Frühjahrsaktionen vom Verein WOHNmobil für Klimaschutz +2025-08-16 12:49:25,090 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Viel los auf dem Klaukenhof +2025-08-16 12:49:25,092 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping Resort Allweglehen bietet "Wellness plus" +2025-08-16 12:49:25,093 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EU-Führerscheinreform kommt +2025-08-16 12:49:25,093 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.camping-news.de/rss/ +2025-08-16 12:49:26,098 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/news +2025-08-16 12:49:26,570 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: News bei www.promobil.de +2025-08-16 12:49:26,571 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-16 12:49:26,571 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-16 12:49:26,571 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/termine-veranstaltungen-juni-juli/ (Versuch 1) +2025-08-16 12:49:27,928 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:27,930 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:27,931 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 649 Wörter +2025-08-16 12:49:27,931 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 649 Wörter +2025-08-16 12:49:27,931 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-16 12:49:27,932 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-16 12:49:27,932 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ (Versuch 1) +2025-08-16 12:49:28,227 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:28,228 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:28,230 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1134 Wörter +2025-08-16 12:49:28,230 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1134 Wörter +2025-08-16 12:49:28,230 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-16 12:49:28,231 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-16 12:49:28,231 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/ (Versuch 1) +2025-08-16 12:49:28,591 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:28,593 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:28,594 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 874 Wörter +2025-08-16 12:49:28,594 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 874 Wörter +2025-08-16 12:49:28,594 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-16 12:49:28,594 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-16 12:49:28,594 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/ (Versuch 1) +2025-08-16 12:49:30,472 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:30,473 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:30,473 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 452 Wörter +2025-08-16 12:49:30,474 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 452 Wörter +2025-08-16 12:49:30,474 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-16 12:49:30,474 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-16 12:49:30,475 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ (Versuch 1) +2025-08-16 12:49:31,156 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:31,157 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:31,160 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1546 Wörter +2025-08-16 12:49:31,160 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1546 Wörter +2025-08-16 12:49:31,161 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-16 12:49:31,161 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-16 12:49:31,161 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/ (Versuch 1) +2025-08-16 12:49:32,094 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:32,095 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:32,095 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 136 Wörter +2025-08-16 12:49:32,096 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 136 Wörter +2025-08-16 12:49:32,096 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-16 12:49:32,096 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-16 12:49:32,096 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/top-10-clever-campen-videos-2024/ (Versuch 1) +2025-08-16 12:49:33,747 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:33,748 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:33,749 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-16 12:49:33,749 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 18 Paragraphen +2025-08-16 12:49:33,749 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-16 12:49:33,752 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-16 12:49:33,752 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-16 12:49:33,752 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-16 12:49:33,752 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/ (Versuch 1) +2025-08-16 12:49:34,562 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:34,564 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:34,566 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1870 Wörter +2025-08-16 12:49:34,567 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1870 Wörter +2025-08-16 12:49:34,567 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-16 12:49:34,567 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-16 12:49:34,568 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/ (Versuch 1) +2025-08-16 12:49:35,350 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:35,352 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:35,354 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1796 Wörter +2025-08-16 12:49:35,354 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1796 Wörter +2025-08-16 12:49:35,355 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-16 12:49:35,355 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-16 12:49:35,355 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ (Versuch 1) +2025-08-16 12:49:35,626 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:35,627 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:35,628 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 942 Wörter +2025-08-16 12:49:35,629 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 942 Wörter +2025-08-16 12:49:35,629 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-16 12:49:35,629 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-16 12:49:35,629 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/ (Versuch 1) +2025-08-16 12:49:35,899 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:35,900 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:35,901 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 416 Wörter +2025-08-16 12:49:35,901 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 416 Wörter +2025-08-16 12:49:35,901 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-16 12:49:35,901 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingbus Rocket Camper Ryzon beim Weltrekord: Jonas Deichmanns Camper für Ironman-Rekord +2025-08-16 12:49:35,902 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-16 12:49:35,902 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/ (Versuch 1) +2025-08-16 12:49:36,613 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:36,614 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:36,614 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 499 Wörter +2025-08-16 12:49:36,615 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 499 Wörter +2025-08-16 12:49:36,615 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-16 12:49:36,615 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-16 12:49:36,615 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/ (Versuch 1) +2025-08-16 12:49:38,736 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:38,737 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:38,739 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 894 Wörter +2025-08-16 12:49:38,739 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 894 Wörter +2025-08-16 12:49:38,739 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-16 12:49:38,740 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-16 12:49:38,740 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/can-kasim-dogan-interview-westfalia/ (Versuch 1) +2025-08-16 12:49:39,605 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:39,606 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:39,607 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 599 Wörter +2025-08-16 12:49:39,607 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 599 Wörter +2025-08-16 12:49:39,607 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-16 12:49:39,608 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-16 12:49:39,608 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/ (Versuch 1) +2025-08-16 12:49:40,376 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:40,377 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:40,378 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 639 Wörter +2025-08-16 12:49:40,378 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 639 Wörter +2025-08-16 12:49:40,378 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-16 12:49:40,379 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-16 12:49:40,379 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-frankfurt/ (Versuch 1) +2025-08-16 12:49:41,173 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:41,174 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:41,175 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 691 Wörter +2025-08-16 12:49:41,176 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 691 Wörter +2025-08-16 12:49:41,176 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-16 12:49:41,176 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-16 12:49:41,176 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/ (Versuch 1) +2025-08-16 12:49:42,081 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:42,083 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:42,084 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 923 Wörter +2025-08-16 12:49:42,085 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 923 Wörter +2025-08-16 12:49:42,085 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-16 12:49:42,085 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-16 12:49:42,085 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/camper-radio-radiosender-caravan-fm/ (Versuch 1) +2025-08-16 12:49:42,899 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:42,900 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:42,901 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 258 Wörter +2025-08-16 12:49:42,901 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 258 Wörter +2025-08-16 12:49:42,901 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-16 12:49:42,902 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-16 12:49:42,902 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/ (Versuch 1) +2025-08-16 12:49:44,184 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-16 12:49:44,185 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-16 12:49:44,186 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-16 12:49:44,186 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 8 Paragraphen +2025-08-16 12:49:44,187 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-16 12:49:44,189 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-16 12:49:44,190 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-16 12:49:44,190 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/news +2025-08-16 12:49:45,196 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/ratgeber +2025-08-16 12:49:46,821 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: ratgeber bei www.promobil.de +2025-08-16 12:49:46,821 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-16 12:49:46,822 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.promobil.de/weitere-ratgeber/gasflaschenservice-fuer-camping-und-grillfans-im-promobil-test/ +2025-08-16 12:49:47,648 - INFO - extract_images_with_metadata:167 - 🔍 16 img-Tags gefunden +2025-08-16 12:49:47,649 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Automat... +2025-08-16 12:49:47,649 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Camping, Gas... +2025-08-16 12:49:47,650 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Gasflaschen, Tauschautomat, Energie Rath, Dinkels... +2025-08-16 12:49:47,650 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: LPG... +2025-08-16 12:49:47,650 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-16 12:49:47,650 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.promobil.de/weitere-ratgeber/gasflaschenservice-fuer-camping-und-grillfans-im-promobil-test/: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-16 12:49:47,651 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper' extrahiert +2025-08-16 12:49:47,651 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-16 12:49:47,652 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.promobil.de/weitere-ratgeber/neue-bussgelder-in-italien-falsche-muellentsorgung-aus-dem-wohnmobil-wird-besonders-teuer/ +2025-08-16 12:49:50,073 - INFO - extract_images_with_metadata:167 - 🔍 13 img-Tags gefunden +2025-08-16 12:49:50,074 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Basiswissen, Der gute Ton, Stellplatz-Knigge, Müll... +2025-08-16 12:49:50,074 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-16 12:49:50,074 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.promobil.de/weitere-ratgeber/neue-bussgelder-in-italien-falsche-muellentsorgung-aus-dem-wohnmobil-wird-besonders-teuer/: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-16 12:49:50,075 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper' extrahiert +2025-08-16 12:49:50,075 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper +2025-08-16 12:49:50,076 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Regeln auf Frankreichs Autobahnen im Pannenfall: Kein Schutz durch ADAC & Co. auf Autobahnen +2025-08-16 12:49:50,078 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht? +2025-08-16 12:49:50,081 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box +2025-08-16 12:49:50,083 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Film-Stunt mit Caravan – wie realistisch ist das?: Sexsymbol Jensen Ackles wagt Stunt auf Wohnwagen +2025-08-16 12:49:50,085 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CLEVER CAMPEN Podcast Folge 40: Gravelbikes und Camping – die beste Kombi? +2025-08-16 12:49:50,086 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Stellplatz-Radar Sommeraktion 2025: 30 Tage Stellplatz-Radar PLUS gratis testen +2025-08-16 12:49:50,088 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Digitaler Fahrzeugschein für Camper: promobil testet den digitalen Fahrzeugschein +2025-08-16 12:49:50,089 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Badezimmer beim Camping - Umfrage: Welches Bad brauchen Sie im Wohnmobil? +2025-08-16 12:49:50,091 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum Kaffeegenuss beim Camping: So kochen Sie am liebsten Ihren Kaffee +2025-08-16 12:49:50,092 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zwei Menschen, zwei Meinungen: Das Mietbad spaltet die Campingwelt +2025-08-16 12:49:50,094 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zubehör auf der größten Campingmesse kaufen: Deshalb müssen Zubehör-Shopper zum Caravan Salon +2025-08-16 12:49:50,096 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tipps für die größte Camping-Messe Deutschlands: Darum dürfen Sie den Caravan Salon nicht verpassen +2025-08-16 12:49:50,099 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Sommerhitze im Wohnmobil & Wohnwagen: Die besten Tipps gegen Hitze im Camper +2025-08-16 12:49:50,101 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dethleffs Reiselust-Prämie: Bis zu 20.000 Euro Rabatt auf Wohnmobile +2025-08-16 12:49:50,102 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue promobil-Newsletter - gratis!: Zum Frühstück die spannendsten Camping-Themen +2025-08-16 12:49:50,103 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Drittes Camping-Rekordjahr in Folge: Süd schlägt Nord – Hier wird am häufigsten gecampt +2025-08-16 12:49:50,104 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Wohnmobil-Handel treibt Vorzelt-Profi in Insolvenz: Camping-Ausrüster Herzog beantragt Insolvenz +2025-08-16 12:49:50,106 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Pannen und Probleme im Wohnmobil & Wohnwagen: Erste Hilfe für die Camper-Bordtechnik +2025-08-16 12:49:50,106 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 2 neue Artikel aus https://www.promobil.de/rss/ratgeber +2025-08-16 12:49:51,131 - INFO - save_articles:144 - ✅ 55 Artikel gespeichert +2025-08-16 12:49:51,131 - INFO - process_articles:310 - 🎉 Verarbeitung abgeschlossen: 2 neue Artikel in 27.58s hinzugefügt +2025-08-16 12:49:52,222 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:49:52,223 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:50:27,304 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:50:27,305 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:50:27,334 - INFO - save_articles:144 - ✅ 55 Artikel gespeichert +2025-08-16 12:50:27,909 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:50:27,910 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:50:33,666 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:50:33,667 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:50:47,623 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:50:47,624 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:50:49,242 - INFO - _get_default_category_id:63 - ✅ Standard-Kategorie 'Allgemein' gefunden: ID 1 +2025-08-16 12:50:49,242 - INFO - test_connection:237 - 🔧 Teste WordPress-API-Verbindung... +2025-08-16 12:50:49,751 - INFO - test_connection:247 - ✅ WordPress-API-Verbindung erfolgreich +2025-08-16 12:51:22,341 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:51:22,342 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:51:22,344 - INFO - rewrite_articles:320 - ✍️ Starte Artikel-Umschreibung +2025-08-16 12:51:22,346 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:51:22,347 - INFO - rewrite_articles:337 - ✍️ Umschreiben von: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-16 12:51:37,237 - INFO - _send_single_request:1025 - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-16 12:51:39,037 - INFO - _send_single_request:1025 - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-16 12:51:39,038 - INFO - rewrite_articles:392 - ✅ Artikel erfolgreich umgeschrieben: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-16 12:51:41,055 - INFO - save_articles:144 - ✅ 55 Artikel gespeichert +2025-08-16 12:51:41,055 - INFO - rewrite_articles:404 - 🎉 1 Artikel erfolgreich umgeschrieben +2025-08-16 12:51:42,128 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:51:42,128 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:52:01,541 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:52:01,542 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:52:08,641 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:52:08,641 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:52:14,550 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:52:14,550 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:52:32,308 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:52:32,311 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:53:12,402 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:53:12,403 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:53:15,939 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:53:15,939 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:53:15,959 - INFO - save_articles:144 - ✅ 55 Artikel gespeichert +2025-08-16 12:53:16,006 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:53:16,006 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:53:21,156 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:53:21,156 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:53:21,821 - INFO - _get_default_category_id:63 - ✅ Standard-Kategorie 'Allgemein' gefunden: ID 1 +2025-08-16 12:53:21,821 - INFO - test_connection:237 - 🔧 Teste WordPress-API-Verbindung... +2025-08-16 12:53:22,205 - INFO - test_connection:247 - ✅ WordPress-API-Verbindung erfolgreich +2025-08-16 12:53:22,205 - INFO - upload_article:158 - 📤 Starte WordPress-Upload: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-16 12:53:23,117 - ERROR - upload_article:190 - ❌ WordPress-Fehler 400 für 'Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper': Ungültige(r) Parameter: tags +2025-08-16 12:53:24,214 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:53:24,214 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:58:02,027 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:58:02,028 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:58:14,389 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:58:14,391 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-16 12:58:14,395 - INFO - upload_articles_to_wp:412 - 📤 Starte WordPress-Upload +2025-08-16 12:58:14,408 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:58:14,408 - INFO - upload_articles_to_wp:421 - 📦 1 Artikel für WordPress-Upload gefunden +2025-08-16 12:58:14,410 - INFO - __init__:51 - ✅ WordPress-Authentifizierung: Verwende bereitgestellten Base64-String +2025-08-16 12:58:16,007 - INFO - _get_default_category_id:87 - ✅ Standard-Kategorie 'Allgemein' gefunden: ID 1 +2025-08-16 12:58:16,007 - INFO - test_connection:338 - 🔧 Teste WordPress-API-Verbindung mit Base64-Auth... +2025-08-16 12:58:16,007 - INFO - test_connection:342 - 🔑 Authorization Header: Basic b2dpZXJ0ejp3aE... +2025-08-16 12:58:16,501 - INFO - test_connection:351 - 📡 API-Response Status: 200 +2025-08-16 12:58:16,501 - INFO - test_connection:352 - 📡 API-Response Headers: {'Content-Type': 'application/json; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'X-WS-RateLimit-Limit': '1000', 'X-WS-RateLimit-Remaining': '998', 'Date': 'Sat, 16 Aug 2025 10:58:16 GMT', 'Server': 'Apache', 'X-Powered-By': 'PHP/8.2.29', 'Pragma': 'no-cache', 'X-Robots-Tag': 'noindex', 'X-Content-Type-Options': 'nosniff', 'Access-Control-Expose-Headers': 'X-WP-Total, X-WP-TotalPages, Link', 'Access-Control-Allow-Headers': 'Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type', 'X-WP-Total': '4', 'X-WP-TotalPages': '4', 'Link': '; rel="next"', 'Allow': 'GET, POST', 'Expires': 'Wed, 11 Jan 1984 05:00:00 GMT', 'Cache-Control': 'no-cache, must-revalidate, max-age=0, no-store, private'} +2025-08-16 12:58:16,501 - INFO - test_connection:355 - ✅ WordPress-API-Verbindung erfolgreich +2025-08-16 12:58:16,501 - INFO - upload_multiple_articles:392 - 📦 Starte Batch-Upload von 1 Artikeln zu WordPress +2025-08-16 12:58:16,502 - INFO - upload_multiple_articles:396 - 📤 Upload 1/1: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-16 12:58:16,502 - INFO - upload_article:249 - 📤 Starte WordPress-Upload: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-16 12:58:18,037 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Gasflaschen-Automat' (ID: 891) +2025-08-16 12:58:18,550 - INFO - _get_or_create_tags:135 - ✅ Existierender Tag gefunden: 'Wohnmobil' (ID: 646) +2025-08-16 12:58:19,573 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Globus-Baumarkt' (ID: 892) +2025-08-16 12:58:19,573 - INFO - _get_or_create_tags:158 - 🏷️ Tags verarbeitet: 3 Tag-IDs erstellt +2025-08-16 12:58:19,573 - INFO - _prepare_post_data:194 - 📝 Post-Daten vorbereitet: Titel='Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper', Tags=3, Kategorie=1 +2025-08-16 12:58:20,442 - INFO - upload_article:274 - ✅ WordPress-Upload erfolgreich: 'Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper' (ID: 3378) +2025-08-16 12:58:20,442 - INFO - upload_article:275 - 🔗 WordPress-URL: https://vanityontour.de/?p=3378 +2025-08-16 12:58:20,442 - INFO - upload_multiple_articles:422 - 📊 Batch-Upload abgeschlossen: 1 erfolgreich, 0 fehlgeschlagen, 0 Duplikate +2025-08-16 12:58:20,443 - INFO - upload_articles_to_wp:441 - ✅ Status geändert für 'Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper': Process → WordPress Pending +2025-08-16 12:58:20,453 - INFO - save_articles:144 - ✅ 55 Artikel gespeichert +2025-08-16 12:58:20,454 - INFO - upload_articles_to_wp:446 - 💾 Artikel-Status nach WordPress-Upload aktualisiert +2025-08-16 12:58:22,520 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-16 12:58:22,522 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:19:39,440 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-18 10:19:39,441 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:19:51,265 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-18 10:19:51,265 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:20:06,243 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-18 10:20:06,243 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:20:11,966 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-18 10:20:11,967 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:28:16,106 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-18 10:28:16,106 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:28:36,927 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-18 10:28:36,927 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:28:44,165 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-18 10:28:44,165 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:28:44,182 - INFO - save_articles:144 - ✅ 55 Artikel gespeichert +2025-08-18 10:28:44,737 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-18 10:28:44,738 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:28:53,869 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-18 10:28:53,869 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:28:53,871 - INFO - process_articles:268 - 🚀 Starte Artikel-Verarbeitung +2025-08-18 10:28:53,871 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:28:53,873 - INFO - load_articles:124 - ✅ 55 Artikel geladen +2025-08-18 10:28:53,873 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.camping-news.de/rss/ +2025-08-18 10:28:54,239 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Camping-News +2025-08-18 10:28:54,239 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-18 10:28:54,241 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 15 Jahre PremiumCamps +2025-08-18 10:28:54,242 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue Eriba Feeling und Novaline +2025-08-18 10:28:54,242 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Den eigenen Verbrauchszahlen auf der Spur +2025-08-18 10:28:54,243 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Abenteuer für die Kleinen, Entspannung für +die Großen +2025-08-18 10:28:54,243 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Das weltweit größte Caravaning-Erlebnis +2025-08-18 10:28:54,244 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Komfort und Flexibilität für moderne Camper +2025-08-18 10:28:54,244 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Frühjahrsaktionen vom Verein WOHNmobil für Klimaschutz +2025-08-18 10:28:54,245 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Viel los auf dem Klaukenhof +2025-08-18 10:28:54,245 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping Resort Allweglehen bietet "Wellness plus" +2025-08-18 10:28:54,246 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EU-Führerscheinreform kommt +2025-08-18 10:28:54,246 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.camping-news.de/rss/ +2025-08-18 10:28:55,249 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/news +2025-08-18 10:28:55,593 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: News bei www.promobil.de +2025-08-18 10:28:55,593 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-18 10:28:55,594 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-18 10:28:55,594 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/termine-veranstaltungen-juni-juli/ (Versuch 1) +2025-08-18 10:28:55,763 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:55,764 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:55,765 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 649 Wörter +2025-08-18 10:28:55,766 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 649 Wörter +2025-08-18 10:28:55,766 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-18 10:28:55,766 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-18 10:28:55,766 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ (Versuch 1) +2025-08-18 10:28:55,936 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:55,937 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:55,938 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1134 Wörter +2025-08-18 10:28:55,938 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1134 Wörter +2025-08-18 10:28:55,938 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-18 10:28:55,939 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-18 10:28:55,939 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/ (Versuch 1) +2025-08-18 10:28:56,195 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:56,195 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:56,196 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 874 Wörter +2025-08-18 10:28:56,196 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 874 Wörter +2025-08-18 10:28:56,196 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-18 10:28:56,196 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-18 10:28:56,197 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/ (Versuch 1) +2025-08-18 10:28:56,353 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:56,353 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:56,354 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 452 Wörter +2025-08-18 10:28:56,354 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 452 Wörter +2025-08-18 10:28:56,354 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-18 10:28:56,354 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-18 10:28:56,354 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ (Versuch 1) +2025-08-18 10:28:56,612 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:56,612 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:56,613 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1546 Wörter +2025-08-18 10:28:56,614 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1546 Wörter +2025-08-18 10:28:56,614 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-18 10:28:56,614 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-18 10:28:56,614 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/ (Versuch 1) +2025-08-18 10:28:56,759 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:56,760 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:56,760 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 136 Wörter +2025-08-18 10:28:56,760 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 136 Wörter +2025-08-18 10:28:56,760 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-18 10:28:56,760 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-18 10:28:56,760 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/top-10-clever-campen-videos-2024/ (Versuch 1) +2025-08-18 10:28:57,056 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:57,057 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:57,057 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-18 10:28:57,057 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 18 Paragraphen +2025-08-18 10:28:57,057 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-18 10:28:57,060 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-18 10:28:57,060 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-18 10:28:57,061 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-18 10:28:57,061 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/ (Versuch 1) +2025-08-18 10:28:57,253 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:57,255 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:57,258 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1870 Wörter +2025-08-18 10:28:57,258 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1870 Wörter +2025-08-18 10:28:57,258 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-18 10:28:57,259 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-18 10:28:57,259 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/ (Versuch 1) +2025-08-18 10:28:57,423 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:57,424 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:57,426 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1796 Wörter +2025-08-18 10:28:57,426 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1796 Wörter +2025-08-18 10:28:57,426 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-18 10:28:57,426 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-18 10:28:57,426 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ (Versuch 1) +2025-08-18 10:28:57,590 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:57,590 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:57,591 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 942 Wörter +2025-08-18 10:28:57,591 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 942 Wörter +2025-08-18 10:28:57,592 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-18 10:28:57,592 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-18 10:28:57,592 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/ (Versuch 1) +2025-08-18 10:28:57,740 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:57,741 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:57,742 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 416 Wörter +2025-08-18 10:28:57,743 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 416 Wörter +2025-08-18 10:28:57,743 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-18 10:28:57,743 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingbus Rocket Camper Ryzon beim Weltrekord: Jonas Deichmanns Camper für Ironman-Rekord +2025-08-18 10:28:57,744 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-18 10:28:57,744 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/ (Versuch 1) +2025-08-18 10:28:57,904 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:57,905 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:57,905 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 499 Wörter +2025-08-18 10:28:57,906 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 499 Wörter +2025-08-18 10:28:57,906 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-18 10:28:57,906 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-18 10:28:57,906 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/ (Versuch 1) +2025-08-18 10:28:58,106 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:58,108 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:58,109 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 894 Wörter +2025-08-18 10:28:58,110 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 894 Wörter +2025-08-18 10:28:58,110 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-18 10:28:58,110 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-18 10:28:58,110 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/can-kasim-dogan-interview-westfalia/ (Versuch 1) +2025-08-18 10:28:58,244 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:58,245 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:58,246 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 599 Wörter +2025-08-18 10:28:58,246 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 599 Wörter +2025-08-18 10:28:58,246 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-18 10:28:58,246 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-18 10:28:58,246 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/ (Versuch 1) +2025-08-18 10:28:58,410 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:58,411 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:58,411 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 639 Wörter +2025-08-18 10:28:58,412 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 639 Wörter +2025-08-18 10:28:58,412 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-18 10:28:58,412 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-18 10:28:58,412 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-frankfurt/ (Versuch 1) +2025-08-18 10:28:58,600 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:58,601 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:58,602 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 691 Wörter +2025-08-18 10:28:58,602 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 691 Wörter +2025-08-18 10:28:58,602 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-18 10:28:58,603 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-18 10:28:58,603 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/ (Versuch 1) +2025-08-18 10:28:58,779 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:58,781 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:58,782 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 923 Wörter +2025-08-18 10:28:58,782 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 923 Wörter +2025-08-18 10:28:58,783 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-18 10:28:58,783 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-18 10:28:58,783 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/camper-radio-radiosender-caravan-fm/ (Versuch 1) +2025-08-18 10:28:58,932 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:58,933 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:58,933 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 258 Wörter +2025-08-18 10:28:58,933 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 258 Wörter +2025-08-18 10:28:58,934 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-18 10:28:58,934 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-18 10:28:58,934 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/ (Versuch 1) +2025-08-18 10:28:59,086 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-18 10:28:59,087 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-18 10:28:59,088 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-18 10:28:59,088 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 8 Paragraphen +2025-08-18 10:28:59,088 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-18 10:28:59,091 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-18 10:28:59,091 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-18 10:28:59,091 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/news +2025-08-18 10:29:00,097 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/ratgeber +2025-08-18 10:29:00,443 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: ratgeber bei www.promobil.de +2025-08-18 10:29:00,443 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-18 10:29:00,444 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.promobil.de/weitere-ratgeber/ihr-perfekter-campingtag-mitmachen-und-gewinnen/ +2025-08-18 10:29:00,597 - INFO - extract_images_with_metadata:167 - 🔍 13 img-Tags gefunden +2025-08-18 10:29:00,597 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Familie, Caravan, Camping... +2025-08-18 10:29:00,598 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-18 10:29:00,598 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.promobil.de/weitere-ratgeber/ihr-perfekter-campingtag-mitmachen-und-gewinnen/: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-18 10:29:00,598 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Umfrage zum perfekten Campingtag: Wo verbringen Sie den perfekten Campingurlaub?' extrahiert +2025-08-18 10:29:00,598 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Umfrage zum perfekten Campingtag: Wo verbringen Sie den perfekten Campingurlaub? +2025-08-18 10:29:00,599 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-18 10:29:00,601 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper +2025-08-18 10:29:00,602 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Regeln auf Frankreichs Autobahnen im Pannenfall: Kein Schutz durch ADAC & Co. auf Autobahnen +2025-08-18 10:29:00,603 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht? +2025-08-18 10:29:00,605 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box +2025-08-18 10:29:00,606 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Film-Stunt mit Caravan – wie realistisch ist das?: Sexsymbol Jensen Ackles wagt Stunt auf Wohnwagen +2025-08-18 10:29:00,607 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CLEVER CAMPEN Podcast Folge 40: Gravelbikes und Camping – die beste Kombi? +2025-08-18 10:29:00,608 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Stellplatz-Radar Sommeraktion 2025: 30 Tage Stellplatz-Radar PLUS gratis testen +2025-08-18 10:29:00,609 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Digitaler Fahrzeugschein für Camper: promobil testet den digitalen Fahrzeugschein +2025-08-18 10:29:00,611 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Badezimmer beim Camping - Umfrage: Welches Bad brauchen Sie im Wohnmobil? +2025-08-18 10:29:00,612 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum Kaffeegenuss beim Camping: So kochen Sie am liebsten Ihren Kaffee +2025-08-18 10:29:00,613 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zwei Menschen, zwei Meinungen: Das Mietbad spaltet die Campingwelt +2025-08-18 10:29:00,614 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zubehör auf der größten Campingmesse kaufen: Deshalb müssen Zubehör-Shopper zum Caravan Salon +2025-08-18 10:29:00,615 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tipps für die größte Camping-Messe Deutschlands: Darum dürfen Sie den Caravan Salon nicht verpassen +2025-08-18 10:29:00,619 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Sommerhitze im Wohnmobil & Wohnwagen: Die besten Tipps gegen Hitze im Camper +2025-08-18 10:29:00,620 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dethleffs Reiselust-Prämie: Bis zu 20.000 Euro Rabatt auf Wohnmobile +2025-08-18 10:29:00,621 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue promobil-Newsletter - gratis!: Zum Frühstück die spannendsten Camping-Themen +2025-08-18 10:29:00,622 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Drittes Camping-Rekordjahr in Folge: Süd schlägt Nord – Hier wird am häufigsten gecampt +2025-08-18 10:29:00,623 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Wohnmobil-Handel treibt Vorzelt-Profi in Insolvenz: Camping-Ausrüster Herzog beantragt Insolvenz +2025-08-18 10:29:00,623 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 1 neue Artikel aus https://www.promobil.de/rss/ratgeber +2025-08-18 10:29:01,642 - INFO - save_articles:144 - ✅ 56 Artikel gespeichert +2025-08-18 10:29:01,642 - INFO - process_articles:310 - 🎉 Verarbeitung abgeschlossen: 1 neue Artikel in 7.77s hinzugefügt +2025-08-18 10:29:02,707 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-18 10:29:02,708 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:29:11,757 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-18 10:29:11,758 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:29:23,980 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-18 10:29:23,981 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:29:53,208 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-18 10:29:53,212 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:29:53,234 - INFO - save_articles:144 - ✅ 56 Artikel gespeichert +2025-08-18 10:29:53,810 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-18 10:29:53,810 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:29:58,377 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-18 10:29:58,377 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:30:13,131 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-18 10:30:13,132 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:30:13,149 - INFO - save_articles:144 - ✅ 56 Artikel gespeichert +2025-08-18 10:30:13,725 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-18 10:30:13,725 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:30:23,300 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-18 10:30:23,301 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:30:23,304 - INFO - rewrite_articles:320 - ✍️ Starte Artikel-Umschreibung +2025-08-18 10:30:23,306 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-18 10:30:23,306 - INFO - rewrite_articles:337 - ✍️ Umschreiben von: Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper +2025-08-18 10:30:40,498 - INFO - _send_single_request:1025 - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-18 10:30:43,146 - INFO - _send_single_request:1025 - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-18 10:30:43,148 - INFO - rewrite_articles:392 - ✅ Artikel erfolgreich umgeschrieben: Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper +2025-08-18 10:30:45,172 - INFO - save_articles:144 - ✅ 56 Artikel gespeichert +2025-08-18 10:30:45,172 - INFO - rewrite_articles:404 - 🎉 1 Artikel erfolgreich umgeschrieben +2025-08-18 10:30:46,246 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-18 10:30:46,246 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-18 10:30:55,147 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-18 10:30:55,147 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 08:47:45,346 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-19 08:47:45,347 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 08:47:53,442 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-19 08:47:53,443 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 08:47:53,448 - INFO - process_articles:268 - 🚀 Starte Artikel-Verarbeitung +2025-08-19 08:47:53,449 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 08:47:53,454 - INFO - load_articles:124 - ✅ 56 Artikel geladen +2025-08-19 08:47:53,455 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.camping-news.de/rss/ +2025-08-19 08:47:53,813 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Camping-News +2025-08-19 08:47:53,813 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-19 08:47:53,814 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 15 Jahre PremiumCamps +2025-08-19 08:47:53,815 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue Eriba Feeling und Novaline +2025-08-19 08:47:53,815 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Den eigenen Verbrauchszahlen auf der Spur +2025-08-19 08:47:53,816 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Abenteuer für die Kleinen, Entspannung für +die Großen +2025-08-19 08:47:53,816 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Das weltweit größte Caravaning-Erlebnis +2025-08-19 08:47:53,817 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Komfort und Flexibilität für moderne Camper +2025-08-19 08:47:53,818 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Frühjahrsaktionen vom Verein WOHNmobil für Klimaschutz +2025-08-19 08:47:53,818 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Viel los auf dem Klaukenhof +2025-08-19 08:47:53,819 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping Resort Allweglehen bietet "Wellness plus" +2025-08-19 08:47:53,819 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EU-Führerscheinreform kommt +2025-08-19 08:47:53,819 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.camping-news.de/rss/ +2025-08-19 08:47:54,821 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/news +2025-08-19 08:47:55,324 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: News bei www.promobil.de +2025-08-19 08:47:55,324 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-19 08:47:55,324 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-19 08:47:55,324 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/termine-veranstaltungen-juni-juli/ (Versuch 1) +2025-08-19 08:47:55,608 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:55,610 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:55,611 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 649 Wörter +2025-08-19 08:47:55,612 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 649 Wörter +2025-08-19 08:47:55,612 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-19 08:47:55,612 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-19 08:47:55,612 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ (Versuch 1) +2025-08-19 08:47:55,955 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:55,956 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:55,958 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1134 Wörter +2025-08-19 08:47:55,958 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1134 Wörter +2025-08-19 08:47:55,958 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-19 08:47:55,959 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-19 08:47:55,959 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/ (Versuch 1) +2025-08-19 08:47:56,275 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:56,276 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:56,278 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 874 Wörter +2025-08-19 08:47:56,278 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 874 Wörter +2025-08-19 08:47:56,278 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-19 08:47:56,278 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-19 08:47:56,278 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/ (Versuch 1) +2025-08-19 08:47:56,581 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:56,582 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:56,582 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 452 Wörter +2025-08-19 08:47:56,582 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 452 Wörter +2025-08-19 08:47:56,582 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-19 08:47:56,583 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-19 08:47:56,583 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ (Versuch 1) +2025-08-19 08:47:56,833 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:56,833 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:56,834 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1546 Wörter +2025-08-19 08:47:56,835 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1546 Wörter +2025-08-19 08:47:56,835 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-19 08:47:56,835 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-19 08:47:56,835 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/ (Versuch 1) +2025-08-19 08:47:57,142 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:57,142 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:57,142 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 136 Wörter +2025-08-19 08:47:57,142 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 136 Wörter +2025-08-19 08:47:57,142 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-19 08:47:57,143 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-19 08:47:57,143 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/top-10-clever-campen-videos-2024/ (Versuch 1) +2025-08-19 08:47:57,416 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:57,416 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:57,417 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 08:47:57,417 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 18 Paragraphen +2025-08-19 08:47:57,417 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 08:47:57,418 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-19 08:47:57,418 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-19 08:47:57,418 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-19 08:47:57,418 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/ (Versuch 1) +2025-08-19 08:47:57,757 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:57,758 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:57,759 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1870 Wörter +2025-08-19 08:47:57,759 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1870 Wörter +2025-08-19 08:47:57,760 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-19 08:47:57,760 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-19 08:47:57,760 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/ (Versuch 1) +2025-08-19 08:47:58,079 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:58,080 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:58,081 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1796 Wörter +2025-08-19 08:47:58,081 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1796 Wörter +2025-08-19 08:47:58,082 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-19 08:47:58,082 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-19 08:47:58,082 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ (Versuch 1) +2025-08-19 08:47:58,398 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:58,398 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:58,399 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 942 Wörter +2025-08-19 08:47:58,399 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 942 Wörter +2025-08-19 08:47:58,400 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-19 08:47:58,400 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-19 08:47:58,400 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/ (Versuch 1) +2025-08-19 08:47:58,687 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:58,687 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:58,688 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 416 Wörter +2025-08-19 08:47:58,688 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 416 Wörter +2025-08-19 08:47:58,688 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-19 08:47:58,688 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingbus Rocket Camper Ryzon beim Weltrekord: Jonas Deichmanns Camper für Ironman-Rekord +2025-08-19 08:47:58,688 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-19 08:47:58,688 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/ (Versuch 1) +2025-08-19 08:47:58,985 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:58,985 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:58,986 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 499 Wörter +2025-08-19 08:47:58,986 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 499 Wörter +2025-08-19 08:47:58,986 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-19 08:47:58,986 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-19 08:47:58,986 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/ (Versuch 1) +2025-08-19 08:47:59,377 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:59,378 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:59,379 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 894 Wörter +2025-08-19 08:47:59,379 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 894 Wörter +2025-08-19 08:47:59,379 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-19 08:47:59,380 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-19 08:47:59,380 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/can-kasim-dogan-interview-westfalia/ (Versuch 1) +2025-08-19 08:47:59,671 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:59,671 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:59,672 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 599 Wörter +2025-08-19 08:47:59,672 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 599 Wörter +2025-08-19 08:47:59,672 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-19 08:47:59,672 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-19 08:47:59,672 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/ (Versuch 1) +2025-08-19 08:47:59,981 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:47:59,982 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:47:59,982 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 639 Wörter +2025-08-19 08:47:59,982 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 639 Wörter +2025-08-19 08:47:59,983 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-19 08:47:59,983 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-19 08:47:59,983 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-frankfurt/ (Versuch 1) +2025-08-19 08:48:00,293 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:48:00,294 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:48:00,295 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 691 Wörter +2025-08-19 08:48:00,295 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 691 Wörter +2025-08-19 08:48:00,295 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-19 08:48:00,295 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-19 08:48:00,295 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/ (Versuch 1) +2025-08-19 08:48:00,619 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:48:00,620 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:48:00,620 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 923 Wörter +2025-08-19 08:48:00,620 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 923 Wörter +2025-08-19 08:48:00,621 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-19 08:48:00,621 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-19 08:48:00,621 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/camper-radio-radiosender-caravan-fm/ (Versuch 1) +2025-08-19 08:48:00,910 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:48:00,911 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:48:00,911 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 258 Wörter +2025-08-19 08:48:00,911 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 258 Wörter +2025-08-19 08:48:00,911 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-19 08:48:00,912 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-19 08:48:00,912 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/ (Versuch 1) +2025-08-19 08:48:01,197 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 08:48:01,198 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 08:48:01,198 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 08:48:01,198 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 8 Paragraphen +2025-08-19 08:48:01,198 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 08:48:01,200 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-19 08:48:01,200 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-19 08:48:01,200 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/news +2025-08-19 08:48:02,205 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/ratgeber +2025-08-19 08:48:02,788 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: ratgeber bei www.promobil.de +2025-08-19 08:48:02,788 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-19 08:48:02,789 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.promobil.de/weitere-ratgeber/flexicamper-skandal-harte-urteile-nach-millionenbetrug-im-wohnmobilhandel/ +2025-08-19 08:48:03,091 - INFO - extract_images_with_metadata:167 - 🔍 13 img-Tags gefunden +2025-08-19 08:48:03,092 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Gericht, Hammer, Wohnmobile, Wohnmobilhandel... +2025-08-19 08:48:03,092 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-19 08:48:03,092 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.promobil.de/weitere-ratgeber/flexicamper-skandal-harte-urteile-nach-millionenbetrug-im-wohnmobilhandel/: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-19 08:48:03,092 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper' extrahiert +2025-08-19 08:48:03,093 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper +2025-08-19 08:48:03,094 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum perfekten Campingtag: Wo verbringen Sie den perfekten Campingurlaub? +2025-08-19 08:48:03,095 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-19 08:48:03,097 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper +2025-08-19 08:48:03,098 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Regeln auf Frankreichs Autobahnen im Pannenfall: Kein Schutz durch ADAC & Co. auf Autobahnen +2025-08-19 08:48:03,099 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht? +2025-08-19 08:48:03,102 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box +2025-08-19 08:48:03,103 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Film-Stunt mit Caravan – wie realistisch ist das?: Sexsymbol Jensen Ackles wagt Stunt auf Wohnwagen +2025-08-19 08:48:03,112 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CLEVER CAMPEN Podcast Folge 40: Gravelbikes und Camping – die beste Kombi? +2025-08-19 08:48:03,113 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Stellplatz-Radar Sommeraktion 2025: 30 Tage Stellplatz-Radar PLUS gratis testen +2025-08-19 08:48:03,114 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Digitaler Fahrzeugschein für Camper: promobil testet den digitalen Fahrzeugschein +2025-08-19 08:48:03,115 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Badezimmer beim Camping - Umfrage: Welches Bad brauchen Sie im Wohnmobil? +2025-08-19 08:48:03,116 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum Kaffeegenuss beim Camping: So kochen Sie am liebsten Ihren Kaffee +2025-08-19 08:48:03,117 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zwei Menschen, zwei Meinungen: Das Mietbad spaltet die Campingwelt +2025-08-19 08:48:03,118 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zubehör auf der größten Campingmesse kaufen: Deshalb müssen Zubehör-Shopper zum Caravan Salon +2025-08-19 08:48:03,119 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tipps für die größte Camping-Messe Deutschlands: Darum dürfen Sie den Caravan Salon nicht verpassen +2025-08-19 08:48:03,122 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Sommerhitze im Wohnmobil & Wohnwagen: Die besten Tipps gegen Hitze im Camper +2025-08-19 08:48:03,124 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dethleffs Reiselust-Prämie: Bis zu 20.000 Euro Rabatt auf Wohnmobile +2025-08-19 08:48:03,125 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue promobil-Newsletter - gratis!: Zum Frühstück die spannendsten Camping-Themen +2025-08-19 08:48:03,126 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Drittes Camping-Rekordjahr in Folge: Süd schlägt Nord – Hier wird am häufigsten gecampt +2025-08-19 08:48:03,126 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 1 neue Artikel aus https://www.promobil.de/rss/ratgeber +2025-08-19 08:48:04,155 - INFO - save_articles:144 - ✅ 57 Artikel gespeichert +2025-08-19 08:48:04,155 - INFO - process_articles:310 - 🎉 Verarbeitung abgeschlossen: 1 neue Artikel in 10.71s hinzugefügt +2025-08-19 08:48:05,231 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 08:48:05,231 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 08:48:31,615 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 08:48:31,617 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 08:55:47,155 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 08:55:47,157 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 08:55:47,177 - INFO - save_articles:144 - ✅ 57 Artikel gespeichert +2025-08-19 08:55:47,752 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 08:55:47,753 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 08:55:54,799 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 08:55:54,799 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 08:55:54,804 - INFO - rewrite_articles:320 - ✍️ Starte Artikel-Umschreibung +2025-08-19 08:55:54,809 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 08:55:54,810 - INFO - rewrite_articles:337 - ✍️ Umschreiben von: Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper +2025-08-19 08:56:16,151 - INFO - _send_single_request:1025 - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-19 08:56:18,547 - INFO - _send_single_request:1025 - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-19 08:56:18,555 - INFO - rewrite_articles:392 - ✅ Artikel erfolgreich umgeschrieben: Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper +2025-08-19 08:56:20,573 - INFO - save_articles:144 - ✅ 57 Artikel gespeichert +2025-08-19 08:56:20,573 - INFO - rewrite_articles:404 - 🎉 1 Artikel erfolgreich umgeschrieben +2025-08-19 08:56:21,650 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 08:56:21,651 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 08:56:32,708 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 08:56:32,709 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 09:45:38,755 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 09:45:38,758 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 09:45:38,768 - INFO - __init__:51 - ✅ WordPress-Authentifizierung: Verwende bereitgestellten Base64-String +2025-08-19 09:45:39,345 - INFO - _get_default_category_id:87 - ✅ Standard-Kategorie 'Allgemein' gefunden: ID 1 +2025-08-19 09:45:39,345 - INFO - test_connection:338 - 🔧 Teste WordPress-API-Verbindung mit Base64-Auth... +2025-08-19 09:45:39,345 - INFO - test_connection:342 - 🔑 Authorization Header: Basic b2dpZXJ0ejp3aE... +2025-08-19 09:45:39,842 - INFO - test_connection:351 - 📡 API-Response Status: 200 +2025-08-19 09:45:39,842 - INFO - test_connection:352 - 📡 API-Response Headers: {'Content-Type': 'application/json; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'X-WS-RateLimit-Limit': '1000', 'X-WS-RateLimit-Remaining': '998', 'Date': 'Tue, 19 Aug 2025 07:45:39 GMT', 'Server': 'Apache', 'X-Powered-By': 'PHP/8.2.29', 'Pragma': 'no-cache', 'X-Robots-Tag': 'noindex', 'X-Content-Type-Options': 'nosniff', 'Access-Control-Expose-Headers': 'X-WP-Total, X-WP-TotalPages, Link', 'Access-Control-Allow-Headers': 'Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type', 'X-WP-Total': '4', 'X-WP-TotalPages': '4', 'Link': '; rel="next"', 'Allow': 'GET, POST', 'Expires': 'Wed, 11 Jan 1984 05:00:00 GMT', 'Cache-Control': 'no-cache, must-revalidate, max-age=0, no-store, private'} +2025-08-19 09:45:39,843 - INFO - test_connection:355 - ✅ WordPress-API-Verbindung erfolgreich +2025-08-19 09:45:39,843 - INFO - upload_article:249 - 📤 Starte WordPress-Upload: Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper +2025-08-19 09:45:40,763 - INFO - _get_or_create_tags:135 - ✅ Existierender Tag gefunden: 'Italien' (ID: 681) +2025-08-19 09:45:41,149 - INFO - _get_or_create_tags:135 - ✅ Existierender Tag gefunden: 'Camping' (ID: 194) +2025-08-19 09:45:42,095 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Müllentsorgung' (ID: 893) +2025-08-19 09:45:42,914 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Straßenverkehrsordnung' (ID: 894) +2025-08-19 09:45:43,836 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Umweltschutz' (ID: 895) +2025-08-19 09:45:43,837 - INFO - _get_or_create_tags:158 - 🏷️ Tags verarbeitet: 5 Tag-IDs erstellt +2025-08-19 09:45:43,837 - INFO - _prepare_post_data:194 - 📝 Post-Daten vorbereitet: Titel='Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper', Tags=5, Kategorie=1 +2025-08-19 09:45:44,759 - INFO - upload_article:274 - ✅ WordPress-Upload erfolgreich: 'Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper' (ID: 3385) +2025-08-19 09:45:44,759 - INFO - upload_article:275 - 🔗 WordPress-URL: https://vanityontour.de/?p=3385 +2025-08-19 09:45:44,785 - INFO - save_articles:144 - ✅ 57 Artikel gespeichert +2025-08-19 09:45:45,875 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 09:45:45,876 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 09:45:54,026 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 09:45:54,026 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 09:45:54,035 - INFO - __init__:51 - ✅ WordPress-Authentifizierung: Verwende bereitgestellten Base64-String +2025-08-19 09:45:54,587 - INFO - _get_default_category_id:87 - ✅ Standard-Kategorie 'Allgemein' gefunden: ID 1 +2025-08-19 09:45:54,587 - INFO - test_connection:338 - 🔧 Teste WordPress-API-Verbindung mit Base64-Auth... +2025-08-19 09:45:54,587 - INFO - test_connection:342 - 🔑 Authorization Header: Basic b2dpZXJ0ejp3aE... +2025-08-19 09:45:54,996 - INFO - test_connection:351 - 📡 API-Response Status: 200 +2025-08-19 09:45:54,996 - INFO - test_connection:352 - 📡 API-Response Headers: {'Content-Type': 'application/json; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'X-WS-RateLimit-Limit': '1000', 'X-WS-RateLimit-Remaining': '998', 'Date': 'Tue, 19 Aug 2025 07:45:54 GMT', 'Server': 'Apache', 'X-Powered-By': 'PHP/8.2.29', 'Pragma': 'no-cache', 'X-Robots-Tag': 'noindex', 'X-Content-Type-Options': 'nosniff', 'Access-Control-Expose-Headers': 'X-WP-Total, X-WP-TotalPages, Link', 'Access-Control-Allow-Headers': 'Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type', 'X-WP-Total': '4', 'X-WP-TotalPages': '4', 'Link': '; rel="next"', 'Allow': 'GET, POST', 'Expires': 'Wed, 11 Jan 1984 05:00:00 GMT', 'Cache-Control': 'no-cache, must-revalidate, max-age=0, no-store, private'} +2025-08-19 09:45:54,996 - INFO - test_connection:355 - ✅ WordPress-API-Verbindung erfolgreich +2025-08-19 09:45:54,996 - INFO - upload_article:249 - 📤 Starte WordPress-Upload: Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper +2025-08-19 09:45:56,226 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Betrugsfall' (ID: 896) +2025-08-19 09:45:56,635 - INFO - _get_or_create_tags:135 - ✅ Existierender Tag gefunden: 'Campingbranche' (ID: 695) +2025-08-19 09:45:57,659 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'FlexiCamper' (ID: 897) +2025-08-19 09:45:58,085 - INFO - _get_or_create_tags:135 - ✅ Existierender Tag gefunden: 'Insolvenz' (ID: 661) +2025-08-19 09:45:58,993 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Wirtschaftskriminalität' (ID: 898) +2025-08-19 09:45:58,994 - INFO - _get_or_create_tags:158 - 🏷️ Tags verarbeitet: 5 Tag-IDs erstellt +2025-08-19 09:45:58,994 - INFO - _prepare_post_data:194 - 📝 Post-Daten vorbereitet: Titel='Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper', Tags=5, Kategorie=1 +2025-08-19 09:45:59,507 - INFO - upload_article:274 - ✅ WordPress-Upload erfolgreich: 'Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper' (ID: 3386) +2025-08-19 09:45:59,507 - INFO - upload_article:275 - 🔗 WordPress-URL: https://vanityontour.de/?p=3386 +2025-08-19 09:45:59,527 - INFO - save_articles:144 - ✅ 57 Artikel gespeichert +2025-08-19 09:46:00,591 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 09:46:00,591 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 09:57:30,336 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 09:57:30,338 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 09:57:36,564 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 09:57:36,565 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 09:57:36,587 - INFO - save_articles:144 - ✅ 57 Artikel gespeichert +2025-08-19 09:57:37,156 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 09:57:37,157 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 09:57:41,844 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 09:57:41,844 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 09:57:41,869 - INFO - save_articles:144 - ✅ 57 Artikel gespeichert +2025-08-19 09:57:42,447 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 09:57:42,447 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 09:58:10,378 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 09:58:10,380 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:01:54,864 - INFO - load_feeds:93 - ✅ 3 Feeds geladen +2025-08-19 10:01:54,872 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:01:54,877 - INFO - save_feeds:104 - ✅ 4 Feeds gespeichert +2025-08-19 10:01:54,877 - INFO - :51 - 🔗 Neuer Feed hinzugefügt: Presseportal Polizei Langenfeld (https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2) +2025-08-19 10:01:54,943 - INFO - load_feeds:93 - ✅ 4 Feeds geladen +2025-08-19 10:01:54,945 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:02:41,223 - INFO - load_feeds:93 - ✅ 4 Feeds geladen +2025-08-19 10:02:41,231 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:02:41,255 - INFO - save_feeds:104 - ✅ 5 Feeds gespeichert +2025-08-19 10:02:41,255 - INFO - :51 - 🔗 Neuer Feed hinzugefügt: Presseportal Camping (https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 ) +2025-08-19 10:02:41,304 - INFO - load_feeds:93 - ✅ 5 Feeds geladen +2025-08-19 10:02:41,306 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:03:08,043 - INFO - load_feeds:93 - ✅ 5 Feeds geladen +2025-08-19 10:03:08,048 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:03:08,053 - INFO - save_feeds:104 - ✅ 6 Feeds gespeichert +2025-08-19 10:03:08,054 - INFO - :51 - 🔗 Neuer Feed hinzugefügt: Presseportal Wohnmobil (https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 ) +2025-08-19 10:03:08,122 - INFO - load_feeds:93 - ✅ 6 Feeds geladen +2025-08-19 10:03:08,125 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:03:28,863 - INFO - load_feeds:93 - ✅ 6 Feeds geladen +2025-08-19 10:03:28,868 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:03:28,872 - INFO - save_feeds:104 - ✅ 7 Feeds gespeichert +2025-08-19 10:03:28,872 - INFO - :51 - 🔗 Neuer Feed hinzugefügt: Caravan News (https://caravan-news.de/rss/schlagzeilen.php) +2025-08-19 10:03:28,917 - INFO - load_feeds:93 - ✅ 7 Feeds geladen +2025-08-19 10:03:28,919 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:03:54,060 - INFO - load_feeds:93 - ✅ 7 Feeds geladen +2025-08-19 10:03:54,066 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:03:54,072 - INFO - save_feeds:104 - ✅ 8 Feeds gespeichert +2025-08-19 10:03:54,073 - INFO - :51 - 🔗 Neuer Feed hinzugefügt: Google Campingplatz (https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294) +2025-08-19 10:03:54,122 - INFO - load_feeds:93 - ✅ 8 Feeds geladen +2025-08-19 10:03:54,124 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:04:06,328 - INFO - load_feeds:93 - ✅ 8 Feeds geladen +2025-08-19 10:04:06,333 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:04:06,337 - INFO - save_feeds:104 - ✅ 9 Feeds gespeichert +2025-08-19 10:04:06,338 - INFO - :51 - 🔗 Neuer Feed hinzugefügt: Google VanLife (https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305) +2025-08-19 10:04:06,384 - INFO - load_feeds:93 - ✅ 9 Feeds geladen +2025-08-19 10:04:06,386 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:04:29,364 - INFO - load_feeds:93 - ✅ 9 Feeds geladen +2025-08-19 10:04:29,370 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:04:29,375 - INFO - save_feeds:104 - ✅ 10 Feeds gespeichert +2025-08-19 10:04:29,375 - INFO - :51 - 🔗 Neuer Feed hinzugefügt: Google Camping Termine (https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856) +2025-08-19 10:04:29,425 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 10:04:29,428 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:04:55,582 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 10:04:55,587 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:04:55,591 - INFO - save_feeds:104 - ✅ 11 Feeds gespeichert +2025-08-19 10:04:55,591 - INFO - :51 - 🔗 Neuer Feed hinzugefügt: Google Camping Messe 2025 (https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493) +2025-08-19 10:04:55,639 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:04:55,641 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:05:31,452 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:05:31,456 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:05:35,551 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:05:35,557 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:05:37,200 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:05:37,205 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:05:37,229 - INFO - process_articles:268 - 🚀 Starte Artikel-Verarbeitung +2025-08-19 10:05:37,230 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:05:37,234 - INFO - load_articles:124 - ✅ 57 Artikel geladen +2025-08-19 10:05:37,235 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.camping-news.de/rss/ +2025-08-19 10:05:37,569 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Camping-News +2025-08-19 10:05:37,570 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-19 10:05:37,573 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 15 Jahre PremiumCamps +2025-08-19 10:05:37,575 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue Eriba Feeling und Novaline +2025-08-19 10:05:37,576 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Den eigenen Verbrauchszahlen auf der Spur +2025-08-19 10:05:37,577 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Abenteuer für die Kleinen, Entspannung für +die Großen +2025-08-19 10:05:37,580 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Das weltweit größte Caravaning-Erlebnis +2025-08-19 10:05:37,582 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Komfort und Flexibilität für moderne Camper +2025-08-19 10:05:37,582 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Frühjahrsaktionen vom Verein WOHNmobil für Klimaschutz +2025-08-19 10:05:37,583 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Viel los auf dem Klaukenhof +2025-08-19 10:05:37,584 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping Resort Allweglehen bietet "Wellness plus" +2025-08-19 10:05:37,585 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EU-Führerscheinreform kommt +2025-08-19 10:05:37,585 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.camping-news.de/rss/ +2025-08-19 10:05:38,590 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/news +2025-08-19 10:05:38,874 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: News bei www.promobil.de +2025-08-19 10:05:38,874 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-19 10:05:38,874 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-19 10:05:38,874 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/termine-veranstaltungen-juni-juli/ (Versuch 1) +2025-08-19 10:05:39,060 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:39,062 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:39,064 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 649 Wörter +2025-08-19 10:05:39,065 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 649 Wörter +2025-08-19 10:05:39,065 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-19 10:05:39,065 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-19 10:05:39,065 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ (Versuch 1) +2025-08-19 10:05:39,260 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:39,261 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:39,262 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1134 Wörter +2025-08-19 10:05:39,263 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1134 Wörter +2025-08-19 10:05:39,263 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-19 10:05:39,263 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-19 10:05:39,263 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/ (Versuch 1) +2025-08-19 10:05:39,482 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:39,484 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:39,485 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 874 Wörter +2025-08-19 10:05:39,485 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 874 Wörter +2025-08-19 10:05:39,485 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-19 10:05:39,486 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-19 10:05:39,486 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/ (Versuch 1) +2025-08-19 10:05:39,663 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:39,664 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:39,665 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 452 Wörter +2025-08-19 10:05:39,665 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 452 Wörter +2025-08-19 10:05:39,665 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-19 10:05:39,665 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-19 10:05:39,665 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ (Versuch 1) +2025-08-19 10:05:39,841 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:39,843 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:39,845 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1546 Wörter +2025-08-19 10:05:39,845 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1546 Wörter +2025-08-19 10:05:39,846 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-19 10:05:39,846 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-19 10:05:39,846 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/ (Versuch 1) +2025-08-19 10:05:40,008 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:40,009 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:40,009 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 136 Wörter +2025-08-19 10:05:40,010 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 136 Wörter +2025-08-19 10:05:40,010 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-19 10:05:40,010 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-19 10:05:40,010 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/top-10-clever-campen-videos-2024/ (Versuch 1) +2025-08-19 10:05:40,184 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:40,185 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:40,185 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:05:40,185 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 18 Paragraphen +2025-08-19 10:05:40,186 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:05:40,188 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-19 10:05:40,189 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-19 10:05:40,189 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-19 10:05:40,189 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/ (Versuch 1) +2025-08-19 10:05:40,378 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:40,380 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:40,383 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1870 Wörter +2025-08-19 10:05:40,384 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1870 Wörter +2025-08-19 10:05:40,384 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-19 10:05:40,384 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-19 10:05:40,384 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/ (Versuch 1) +2025-08-19 10:05:40,605 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:40,607 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:40,609 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1796 Wörter +2025-08-19 10:05:40,609 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1796 Wörter +2025-08-19 10:05:40,610 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-19 10:05:40,610 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-19 10:05:40,610 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ (Versuch 1) +2025-08-19 10:05:40,797 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:40,798 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:40,799 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 942 Wörter +2025-08-19 10:05:40,800 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 942 Wörter +2025-08-19 10:05:40,800 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-19 10:05:40,800 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-19 10:05:40,800 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/ (Versuch 1) +2025-08-19 10:05:40,968 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:40,969 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:40,970 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 416 Wörter +2025-08-19 10:05:40,970 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 416 Wörter +2025-08-19 10:05:40,970 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-19 10:05:40,971 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingbus Rocket Camper Ryzon beim Weltrekord: Jonas Deichmanns Camper für Ironman-Rekord +2025-08-19 10:05:40,971 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-19 10:05:40,971 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/ (Versuch 1) +2025-08-19 10:05:41,146 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:41,147 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:41,148 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 499 Wörter +2025-08-19 10:05:41,149 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 499 Wörter +2025-08-19 10:05:41,149 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-19 10:05:41,149 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-19 10:05:41,149 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/ (Versuch 1) +2025-08-19 10:05:41,361 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:41,363 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:41,364 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 894 Wörter +2025-08-19 10:05:41,365 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 894 Wörter +2025-08-19 10:05:41,365 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-19 10:05:41,365 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-19 10:05:41,365 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/can-kasim-dogan-interview-westfalia/ (Versuch 1) +2025-08-19 10:05:41,521 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:41,522 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:41,523 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 599 Wörter +2025-08-19 10:05:41,523 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 599 Wörter +2025-08-19 10:05:41,524 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-19 10:05:41,524 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-19 10:05:41,524 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/ (Versuch 1) +2025-08-19 10:05:41,704 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:41,705 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:41,706 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 639 Wörter +2025-08-19 10:05:41,706 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 639 Wörter +2025-08-19 10:05:41,707 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-19 10:05:41,707 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-19 10:05:41,707 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-frankfurt/ (Versuch 1) +2025-08-19 10:05:41,900 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:41,902 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:41,903 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 691 Wörter +2025-08-19 10:05:41,903 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 691 Wörter +2025-08-19 10:05:41,903 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-19 10:05:41,904 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-19 10:05:41,904 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/ (Versuch 1) +2025-08-19 10:05:42,092 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:42,094 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:42,096 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 923 Wörter +2025-08-19 10:05:42,096 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 923 Wörter +2025-08-19 10:05:42,096 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-19 10:05:42,096 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-19 10:05:42,097 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/camper-radio-radiosender-caravan-fm/ (Versuch 1) +2025-08-19 10:05:42,255 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:42,256 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:42,256 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 258 Wörter +2025-08-19 10:05:42,256 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 258 Wörter +2025-08-19 10:05:42,257 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-19 10:05:42,257 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-19 10:05:42,257 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/ (Versuch 1) +2025-08-19 10:05:42,423 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:05:42,423 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:42,424 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:05:42,424 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 8 Paragraphen +2025-08-19 10:05:42,425 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:05:42,427 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-19 10:05:42,428 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-19 10:05:42,428 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/news +2025-08-19 10:05:43,433 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/ratgeber +2025-08-19 10:05:43,805 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: ratgeber bei www.promobil.de +2025-08-19 10:05:43,805 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-19 10:05:43,807 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper +2025-08-19 10:05:43,807 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum perfekten Campingtag: Wo verbringen Sie den perfekten Campingurlaub? +2025-08-19 10:05:43,808 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-19 10:05:43,809 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper +2025-08-19 10:05:43,809 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Regeln auf Frankreichs Autobahnen im Pannenfall: Kein Schutz durch ADAC & Co. auf Autobahnen +2025-08-19 10:05:43,810 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht? +2025-08-19 10:05:43,812 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box +2025-08-19 10:05:43,812 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Film-Stunt mit Caravan – wie realistisch ist das?: Sexsymbol Jensen Ackles wagt Stunt auf Wohnwagen +2025-08-19 10:05:43,813 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CLEVER CAMPEN Podcast Folge 40: Gravelbikes und Camping – die beste Kombi? +2025-08-19 10:05:43,814 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Stellplatz-Radar Sommeraktion 2025: 30 Tage Stellplatz-Radar PLUS gratis testen +2025-08-19 10:05:43,815 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Digitaler Fahrzeugschein für Camper: promobil testet den digitalen Fahrzeugschein +2025-08-19 10:05:43,815 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Badezimmer beim Camping - Umfrage: Welches Bad brauchen Sie im Wohnmobil? +2025-08-19 10:05:43,816 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum Kaffeegenuss beim Camping: So kochen Sie am liebsten Ihren Kaffee +2025-08-19 10:05:43,817 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zwei Menschen, zwei Meinungen: Das Mietbad spaltet die Campingwelt +2025-08-19 10:05:43,818 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zubehör auf der größten Campingmesse kaufen: Deshalb müssen Zubehör-Shopper zum Caravan Salon +2025-08-19 10:05:43,818 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tipps für die größte Camping-Messe Deutschlands: Darum dürfen Sie den Caravan Salon nicht verpassen +2025-08-19 10:05:43,820 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Sommerhitze im Wohnmobil & Wohnwagen: Die besten Tipps gegen Hitze im Camper +2025-08-19 10:05:43,821 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dethleffs Reiselust-Prämie: Bis zu 20.000 Euro Rabatt auf Wohnmobile +2025-08-19 10:05:43,822 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue promobil-Newsletter - gratis!: Zum Frühstück die spannendsten Camping-Themen +2025-08-19 10:05:43,822 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Drittes Camping-Rekordjahr in Folge: Süd schlägt Nord – Hier wird am häufigsten gecampt +2025-08-19 10:05:43,822 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/ratgeber +2025-08-19 10:05:44,823 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2 +2025-08-19 10:05:45,095 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Langenfeld (Rheinland) +2025-08-19 10:05:45,095 - INFO - fetch_and_process_feed:187 - 📰 15 Einträge gefunden +2025-08-19 10:05:45,097 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/13248/6098000 +2025-08-19 10:05:45,375 - INFO - extract_images_with_metadata:167 - 🔍 8 img-Tags gefunden +2025-08-19 10:05:45,376 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/13248/6098000 +2025-08-19 10:05:45,376 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-D: Langenfeld - A3 Richtung Arnheim - Anschlussstelle Solingen - Motorradalleinunfall mit Sozia - Fahrer schwer und Sozia leicht verletzt' extrahiert +2025-08-19 10:05:45,376 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-D: Langenfeld - A3 Richtung Arnheim - Anschlussstelle Solingen - Motorradalleinunfall mit Sozia - Fahrer schwer und Sozia leicht verletzt +2025-08-19 10:05:45,377 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/43777/6095749 +2025-08-19 10:05:45,631 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:45,631 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/43777/6095749 +2025-08-19 10:05:45,631 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-ME: Die Polizei lädt zum Gespräch am "STREIFENwagen"' extrahiert +2025-08-19 10:05:45,631 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-ME: Die Polizei lädt zum Gespräch am "STREIFENwagen" +2025-08-19 10:05:45,633 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/43777/6093692 +2025-08-19 10:05:45,914 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:45,914 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/43777/6093692 +2025-08-19 10:05:45,915 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-ME: Tragischer Verkehrsunfall - Zwei Insassen verstorben - 2508041' extrahiert +2025-08-19 10:05:45,915 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-ME: Tragischer Verkehrsunfall - Zwei Insassen verstorben - 2508041 +2025-08-19 10:05:45,916 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/43777/6092772 +2025-08-19 10:05:46,169 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:46,170 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/43777/6092772 +2025-08-19 10:05:46,170 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-ME: Gabelstapler in Brand gesetzt: Polizei bittet um Hinweise - 2508033' extrahiert +2025-08-19 10:05:46,170 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-ME: Gabelstapler in Brand gesetzt: Polizei bittet um Hinweise - 2508033 +2025-08-19 10:05:46,171 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/43777/6091203 +2025-08-19 10:05:46,432 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:46,433 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/43777/6091203 +2025-08-19 10:05:46,433 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-ME: Porsche 911 Carrera entwendet: Polizei bittet um Hinweise - 2508025' extrahiert +2025-08-19 10:05:46,433 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-ME: Porsche 911 Carrera entwendet: Polizei bittet um Hinweise - 2508025 +2025-08-19 10:05:46,434 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: POL-ME: Verkehrsunfallfluchten aus dem Kreisgebiet - 2508021 +2025-08-19 10:05:46,434 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/blaulicht/pm/43777/6090985 (Versuch 1) +2025-08-19 10:05:46,699 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:46,700 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 270 Wörter +2025-08-19 10:05:46,700 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 270 Wörter +2025-08-19 10:05:46,701 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/43777/6090985 +2025-08-19 10:05:46,981 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:46,982 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/43777/6090985 +2025-08-19 10:05:46,982 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-ME: Verkehrsunfallfluchten aus dem Kreisgebiet - 2508021' extrahiert +2025-08-19 10:05:46,982 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-ME: Verkehrsunfallfluchten aus dem Kreisgebiet - 2508021 +2025-08-19 10:05:46,983 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/43777/6090932 +2025-08-19 10:05:47,278 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:47,279 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/43777/6090932 +2025-08-19 10:05:47,279 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-ME: Einbrüche aus dem Kreisgebiet - 2508020' extrahiert +2025-08-19 10:05:47,279 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-ME: Einbrüche aus dem Kreisgebiet - 2508020 +2025-08-19 10:05:47,280 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/43777/6090567 +2025-08-19 10:05:47,556 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:47,557 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/43777/6090567 +2025-08-19 10:05:47,558 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-ME: Harley-Davidson gestohlen: Polizei bittet um Hinweise - 2508017' extrahiert +2025-08-19 10:05:47,558 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-ME: Harley-Davidson gestohlen: Polizei bittet um Hinweise - 2508017 +2025-08-19 10:05:47,559 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/43777/6090066 +2025-08-19 10:05:47,829 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:47,829 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/43777/6090066 +2025-08-19 10:05:47,830 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-ME: Einbrüche aus dem Kreisgebiet - 2508012' extrahiert +2025-08-19 10:05:47,830 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-ME: Einbrüche aus dem Kreisgebiet - 2508012 +2025-08-19 10:05:47,831 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/13248/6089342 +2025-08-19 10:05:48,122 - INFO - extract_images_with_metadata:167 - 🔍 7 img-Tags gefunden +2025-08-19 10:05:48,122 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/13248/6089342 +2025-08-19 10:05:48,123 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-D: Meldung der Autobahnpolizei - A 3 - Verkehrsunfall bei Langenfeld - Pkw überschlägt sich in Baustelle - Eine lebensgefährlich verletzte Person' extrahiert +2025-08-19 10:05:48,123 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-D: Meldung der Autobahnpolizei - A 3 - Verkehrsunfall bei Langenfeld - Pkw überschlägt sich in Baustelle - Eine lebensgefährlich verletzte Person +2025-08-19 10:05:48,124 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/43777/6088459 +2025-08-19 10:05:48,444 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:48,445 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/43777/6088459 +2025-08-19 10:05:48,445 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-ME: Einbrüche aus dem Kreisgebiet - 2508002' extrahiert +2025-08-19 10:05:48,445 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-ME: Einbrüche aus dem Kreisgebiet - 2508002 +2025-08-19 10:05:48,446 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/43777/6087627 +2025-08-19 10:05:48,710 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:48,711 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/43777/6087627 +2025-08-19 10:05:48,711 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-ME: Einbrüche aus dem Kreisgebiet - 2507143' extrahiert +2025-08-19 10:05:48,711 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-ME: Einbrüche aus dem Kreisgebiet - 2507143 +2025-08-19 10:05:48,712 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/43777/6085822 +2025-08-19 10:05:48,997 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:48,998 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/43777/6085822 +2025-08-19 10:05:48,998 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-ME: Autos aufgebrochen: Reihenweise Scheiben eingeschlagen - 2507133' extrahiert +2025-08-19 10:05:48,998 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-ME: Autos aufgebrochen: Reihenweise Scheiben eingeschlagen - 2507133 +2025-08-19 10:05:48,999 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/43777/6085785 +2025-08-19 10:05:49,287 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:49,288 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/43777/6085785 +2025-08-19 10:05:49,288 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-ME: Polizei zieht verkehrsunsicheren Transporter aus dem Verkehr - 2507132' extrahiert +2025-08-19 10:05:49,288 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-ME: Polizei zieht verkehrsunsicheren Transporter aus dem Verkehr - 2507132 +2025-08-19 10:05:49,289 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/blaulicht/pm/43777/6085781 +2025-08-19 10:05:49,564 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:49,565 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/blaulicht/pm/43777/6085781 +2025-08-19 10:05:49,565 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-ME: Bonn-Auerberg: Festnahme eines aus dem Maßregelvollzug entwichenen Strafgefangenen - 2507134' extrahiert +2025-08-19 10:05:49,565 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-ME: Bonn-Auerberg: Festnahme eines aus dem Maßregelvollzug entwichenen Strafgefangenen - 2507134 +2025-08-19 10:05:49,565 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 15 neue Artikel aus https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2 +2025-08-19 10:05:50,570 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-19 10:05:50,796 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach camping +2025-08-19 10:05:50,796 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-19 10:05:50,798 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/180570/6098987 +2025-08-19 10:05:51,070 - INFO - extract_images_with_metadata:167 - 🔍 10 img-Tags gefunden +2025-08-19 10:05:51,070 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/180570/6098987 +2025-08-19 10:05:51,071 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern' extrahiert +2025-08-19 10:05:51,071 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern +2025-08-19 10:05:51,072 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/6605/6098566 +2025-08-19 10:05:51,371 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:51,371 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/6605/6098566 +2025-08-19 10:05:51,372 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA' extrahiert +2025-08-19 10:05:51,372 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-19 10:05:51,373 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/161806/6098495 +2025-08-19 10:05:51,639 - INFO - extract_images_with_metadata:167 - 🔍 7 img-Tags gefunden +2025-08-19 10:05:51,639 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/161806/6098495 +2025-08-19 10:05:51,640 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'IFA 2025: Jackery präsentiert neue 500-Watt-Powerstation im flachen Format, Solardachziegel und DIY-Balkonkraftwerk mit integriertem Brandschutzsystem' extrahiert +2025-08-19 10:05:51,640 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: IFA 2025: Jackery präsentiert neue 500-Watt-Powerstation im flachen Format, Solardachziegel und DIY-Balkonkraftwerk mit integriertem Brandschutzsystem +2025-08-19 10:05:51,640 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Inklusiver Campingurlaub am Gardasee +2025-08-19 10:05:51,640 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/153661/6094377 (Versuch 1) +2025-08-19 10:05:51,935 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:51,936 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 616 Wörter +2025-08-19 10:05:51,936 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 616 Wörter +2025-08-19 10:05:51,937 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/153661/6094377 +2025-08-19 10:05:52,225 - INFO - extract_images_with_metadata:167 - 🔍 21 img-Tags gefunden +2025-08-19 10:05:52,226 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Inklusiver Campingurlaub am Gardasee... +2025-08-19 10:05:52,226 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Inklusiver Campingurlaub am Gardasee... +2025-08-19 10:05:52,226 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Inklusiver Campingurlaub am Gardasee... +2025-08-19 10:05:52,226 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Inklusiver Campingurlaub am Gardasee... +2025-08-19 10:05:52,226 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Inklusiver Campingurlaub am Gardasee... +2025-08-19 10:05:52,226 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.presseportal.de/pm/153661/6094377: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-19 10:05:52,227 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Inklusiver Campingurlaub am Gardasee' extrahiert +2025-08-19 10:05:52,227 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Inklusiver Campingurlaub am Gardasee +2025-08-19 10:05:52,228 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/172978/6093880 +2025-08-19 10:05:52,582 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:52,583 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/172978/6093880 +2025-08-19 10:05:52,583 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Neuheiten-Feuerwerk bei vanexxt auf dem Caravan Salon Düsseldorf 2025' extrahiert +2025-08-19 10:05:52,583 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Neuheiten-Feuerwerk bei vanexxt auf dem Caravan Salon Düsseldorf 2025 +2025-08-19 10:05:52,584 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-19 10:05:52,584 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/170000/6091414 (Versuch 1) +2025-08-19 10:05:53,031 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:53,032 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 191 Wörter +2025-08-19 10:05:53,032 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 191 Wörter +2025-08-19 10:05:53,033 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/170000/6091414 +2025-08-19 10:05:53,310 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:53,310 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/170000/6091414 +2025-08-19 10:05:53,311 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf' extrahiert +2025-08-19 10:05:53,311 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-19 10:05:53,312 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/7849/6087294 +2025-08-19 10:05:53,634 - INFO - extract_images_with_metadata:167 - 🔍 16 img-Tags gefunden +2025-08-19 10:05:53,634 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: 50 Jahre ADAC Tourset: Vom Kartenstapel zum digita... +2025-08-19 10:05:53,634 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: 50 Jahre ADAC Tourset: Vom Kartenstapel zum digita... +2025-08-19 10:05:53,635 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: 50 Jahre ADAC Tourset: Vom Kartenstapel zum digita... +2025-08-19 10:05:53,635 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: 50 Jahre ADAC Tourset: Vom Kartenstapel zum digita... +2025-08-19 10:05:53,635 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: 50 Jahre ADAC Tourset: Vom Kartenstapel zum digita... +2025-08-19 10:05:53,635 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.presseportal.de/pm/7849/6087294: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-19 10:05:53,635 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für '50 Jahre ADAC Tourset: Vom Kartenstapel zum digitalen Reisebegleiter / Erfolgreicher Reisebegleiter / 657.000 Toursets in 2024 bestellt' extrahiert +2025-08-19 10:05:53,635 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: 50 Jahre ADAC Tourset: Vom Kartenstapel zum digitalen Reisebegleiter / Erfolgreicher Reisebegleiter / 657.000 Toursets in 2024 bestellt +2025-08-19 10:05:53,637 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/6605/6086102 +2025-08-19 10:05:53,900 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:53,901 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/6605/6086102 +2025-08-19 10:05:53,901 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'RTLZWEI: Erfolgreicher Montag mit "Bella Italia - Camping auf Deutsch"' extrahiert +2025-08-19 10:05:53,901 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: RTLZWEI: Erfolgreicher Montag mit "Bella Italia - Camping auf Deutsch" +2025-08-19 10:05:53,902 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-19 10:05:53,902 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-19 10:05:54,234 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:54,235 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-19 10:05:54,235 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-19 10:05:54,236 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/121716/6085196 +2025-08-19 10:05:54,595 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:54,595 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/121716/6085196 +2025-08-19 10:05:54,596 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'So ist man beim Camping richtig versichert' extrahiert +2025-08-19 10:05:54,596 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: So ist man beim Camping richtig versichert +2025-08-19 10:05:54,596 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Family Spots: Diese Reiseziele begeistern Groß und Klein +2025-08-19 10:05:54,596 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/102577/6085137 (Versuch 1) +2025-08-19 10:05:54,946 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:54,948 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 1226 Wörter +2025-08-19 10:05:54,949 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1226 Wörter +2025-08-19 10:05:54,949 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/102577/6085137 +2025-08-19 10:05:55,269 - INFO - extract_images_with_metadata:167 - 🔍 20 img-Tags gefunden +2025-08-19 10:05:55,270 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Family Spots: Diese Reiseziele begeistern Groß und... +2025-08-19 10:05:55,270 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Family Spots: Diese Reiseziele begeistern Groß und... +2025-08-19 10:05:55,270 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Family Spots: Diese Reiseziele begeistern Groß und... +2025-08-19 10:05:55,270 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Family Spots: Diese Reiseziele begeistern Groß und... +2025-08-19 10:05:55,271 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Family Spots: Diese Reiseziele begeistern Groß und... +2025-08-19 10:05:55,271 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.presseportal.de/pm/102577/6085137: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-19 10:05:55,271 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Family Spots: Diese Reiseziele begeistern Groß und Klein' extrahiert +2025-08-19 10:05:55,271 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Family Spots: Diese Reiseziele begeistern Groß und Klein +2025-08-19 10:05:55,271 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 10 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-19 10:05:56,274 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-19 10:05:56,499 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil +2025-08-19 10:05:56,500 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-19 10:05:56,501 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-19 10:05:56,503 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/158602/6094967 +2025-08-19 10:05:56,800 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:56,800 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: ECOVACS GLOBAL PTE. LTD.... +2025-08-19 10:05:56,801 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.presseportal.de/pm/158602/6094967: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-19 10:05:56,801 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Maximale Flexibilität trifft volle Power: Intelligente Tiefenreinigung ohne Kabel mit der PURE ONE S Serie von Tineco' extrahiert +2025-08-19 10:05:56,801 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Maximale Flexibilität trifft volle Power: Intelligente Tiefenreinigung ohne Kabel mit der PURE ONE S Serie von Tineco +2025-08-19 10:05:56,803 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/7239/6091976 +2025-08-19 10:05:57,076 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:57,077 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/7239/6091976 +2025-08-19 10:05:57,077 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Urlaub mit dem Wohnmobil: Was tun bei Panne oder Unfall' extrahiert +2025-08-19 10:05:57,077 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Urlaub mit dem Wohnmobil: Was tun bei Panne oder Unfall +2025-08-19 10:05:57,078 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-19 10:05:57,078 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/105254/6091837 (Versuch 1) +2025-08-19 10:05:57,361 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:57,362 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/105254/6091837 +2025-08-19 10:05:57,694 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:57,694 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/105254/6091837 +2025-08-19 10:05:57,695 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher' extrahiert +2025-08-19 10:05:57,695 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-19 10:05:57,695 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-19 10:05:57,695 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-19 10:05:57,993 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:57,994 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-19 10:05:57,994 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-19 10:05:57,995 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: So ist man beim Camping richtig versichert +2025-08-19 10:05:57,996 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/116585/6083456 +2025-08-19 10:05:58,253 - INFO - extract_images_with_metadata:167 - 🔍 7 img-Tags gefunden +2025-08-19 10:05:58,253 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/116585/6083456 +2025-08-19 10:05:58,254 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Trotz Camper-Hype: Der Pkw ist die unangefochtene Nummer 1 für Sommerreisen' extrahiert +2025-08-19 10:05:58,254 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Trotz Camper-Hype: Der Pkw ist die unangefochtene Nummer 1 für Sommerreisen +2025-08-19 10:05:58,255 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/6605/6083013 +2025-08-19 10:05:58,509 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:58,509 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/6605/6083013 +2025-08-19 10:05:58,509 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Doppelfolge am 24. Juli "Oksana & Family - Alles auf Anfang": Abwasserprobleme, Jobsuche und Tonstudiobesuch' extrahiert +2025-08-19 10:05:58,509 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Doppelfolge am 24. Juli "Oksana & Family - Alles auf Anfang": Abwasserprobleme, Jobsuche und Tonstudiobesuch +2025-08-19 10:05:58,510 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/6605/6078446 +2025-08-19 10:05:58,789 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-19 10:05:58,790 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/6605/6078446 +2025-08-19 10:05:58,790 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Neue Folge "Oksana & Family - Alles auf Anfang": Zwischen Camping-Chaos und einer schweren Entscheidung' extrahiert +2025-08-19 10:05:58,790 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Neue Folge "Oksana & Family - Alles auf Anfang": Zwischen Camping-Chaos und einer schweren Entscheidung +2025-08-19 10:05:58,791 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Umfrage: Mehrheit will mehr Freiheiten für Wohnmobile und Camper +2025-08-19 10:05:58,791 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/13984/6077676 (Versuch 1) +2025-08-19 10:05:59,104 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:05:59,106 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 891 Wörter +2025-08-19 10:05:59,107 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 891 Wörter +2025-08-19 10:05:59,107 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/13984/6077676 +2025-08-19 10:05:59,386 - INFO - extract_images_with_metadata:167 - 🔍 7 img-Tags gefunden +2025-08-19 10:05:59,386 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/13984/6077676 +2025-08-19 10:05:59,386 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Umfrage: Mehrheit will mehr Freiheiten für Wohnmobile und Camper' extrahiert +2025-08-19 10:05:59,386 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Umfrage: Mehrheit will mehr Freiheiten für Wohnmobile und Camper +2025-08-19 10:05:59,388 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/63400/6076962 +2025-08-19 10:05:59,675 - INFO - extract_images_with_metadata:167 - 🔍 7 img-Tags gefunden +2025-08-19 10:05:59,675 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: R+V Infocenter... +2025-08-19 10:05:59,676 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.presseportal.de/pm/63400/6076962: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-19 10:05:59,676 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Urlaub mit Wohnmobil: erhöhte Unfallgefahr' extrahiert +2025-08-19 10:05:59,676 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Urlaub mit Wohnmobil: erhöhte Unfallgefahr +2025-08-19 10:05:59,676 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 8 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-19 10:06:00,681 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://caravan-news.de/rss/schlagzeilen.php +2025-08-19 10:06:00,966 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: CARAVAN-NEWS.de +2025-08-19 10:06:00,966 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://caravan-news.de/rss/schlagzeilen.php +2025-08-19 10:06:01,968 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-19 10:06:02,749 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Campingplatz +2025-08-19 10:06:02,749 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-19 10:06:02,750 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hundefreundliche Campingplätze: Top 10 von Ostsee bis NRW entdecken - T-Online +2025-08-19 10:06:02,750 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.t-online.de/leben/reisen/deutschland/id_100871658/hundefreundliche-campingplaetze-top-10-von-ostsee-bis-nrw-entdecken.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2MLwYap5S4s8YXemp9_4B7 (Versuch 1) +2025-08-19 10:06:02,915 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:02,916 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:02,916 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:02,916 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.t-online.de/leben/reisen/deutschland/id_100871658/hundefreundliche-campingplaetze-top-10-von-ostsee-bis-nrw-entdecken.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2MLwYap5S4s8YXemp9_4B7 +2025-08-19 10:06:02,918 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.t-online.de/leben/reisen/deutschland/id_100871658/hundefreundliche-campingplaetze-top-10-von-ostsee-bis-nrw-entdecken.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2MLwYap5S4s8YXemp9_4B7 +2025-08-19 10:06:03,042 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:03,043 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.t-online.de/leben/reisen/deutschland/id_100871658/hundefreundliche-campingplaetze-top-10-von-ostsee-bis-nrw-entdecken.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2MLwYap5S4s8YXemp9_4B7 +2025-08-19 10:06:03,044 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Hundefreundliche Campingplätze: Top 10 von Ostsee bis NRW entdecken - T-Online' extrahiert +2025-08-19 10:06:03,044 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Hundefreundliche Campingplätze: Top 10 von Ostsee bis NRW entdecken - T-Online +2025-08-19 10:06:03,045 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Go's und No-Go's auf dem Husumer Campingplatz - SHZ +2025-08-19 10:06:03,045 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.shz.de/lokales/husum/artikel/gos-und-no-gos-auf-dem-husumer-campingplatz-49140857&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2QF6COS0JJi1OJck-Moqnc (Versuch 1) +2025-08-19 10:06:03,161 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:03,162 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:03,162 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:03,162 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.shz.de/lokales/husum/artikel/gos-und-no-gos-auf-dem-husumer-campingplatz-49140857&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2QF6COS0JJi1OJck-Moqnc +2025-08-19 10:06:03,163 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.shz.de/lokales/husum/artikel/gos-und-no-gos-auf-dem-husumer-campingplatz-49140857&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2QF6COS0JJi1OJck-Moqnc +2025-08-19 10:06:03,298 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:03,298 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.shz.de/lokales/husum/artikel/gos-und-no-gos-auf-dem-husumer-campingplatz-49140857&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2QF6COS0JJi1OJck-Moqnc +2025-08-19 10:06:03,299 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Go's und No-Go's auf dem Husumer Campingplatz - SHZ' extrahiert +2025-08-19 10:06:03,299 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Go's und No-Go's auf dem Husumer Campingplatz - SHZ +2025-08-19 10:06:03,299 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping: Grenzüberschreitung! Gäste greifen zu harten Maßnahmen - moin.de +2025-08-19 10:06:03,300 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.moin.de/norddeutschland/camping-platz-nachbarn-was-tun-voll-verrueckt-plaetze-id300643691.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3yKD6zM5C0GGtXMIRQ476n (Versuch 1) +2025-08-19 10:06:03,426 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:03,426 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:03,428 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:03,428 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.moin.de/norddeutschland/camping-platz-nachbarn-was-tun-voll-verrueckt-plaetze-id300643691.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3yKD6zM5C0GGtXMIRQ476n +2025-08-19 10:06:03,431 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.moin.de/norddeutschland/camping-platz-nachbarn-was-tun-voll-verrueckt-plaetze-id300643691.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3yKD6zM5C0GGtXMIRQ476n +2025-08-19 10:06:03,552 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:03,552 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.moin.de/norddeutschland/camping-platz-nachbarn-was-tun-voll-verrueckt-plaetze-id300643691.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3yKD6zM5C0GGtXMIRQ476n +2025-08-19 10:06:03,553 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Camping: Grenzüberschreitung! Gäste greifen zu harten Maßnahmen - moin.de' extrahiert +2025-08-19 10:06:03,553 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Camping: Grenzüberschreitung! Gäste greifen zu harten Maßnahmen - moin.de +2025-08-19 10:06:03,554 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping erobert neue Zielgruppen | Trends - Counter vor9 +2025-08-19 10:06:03,554 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.countervor9.de/trends/camping-erobert-neue-zielgruppen&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw25FhwEFlV2_J6vE622fq-G (Versuch 1) +2025-08-19 10:06:03,676 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:03,677 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:03,677 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:03,678 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.countervor9.de/trends/camping-erobert-neue-zielgruppen&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw25FhwEFlV2_J6vE622fq-G +2025-08-19 10:06:03,679 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.countervor9.de/trends/camping-erobert-neue-zielgruppen&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw25FhwEFlV2_J6vE622fq-G +2025-08-19 10:06:03,796 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:03,796 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.countervor9.de/trends/camping-erobert-neue-zielgruppen&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw25FhwEFlV2_J6vE622fq-G +2025-08-19 10:06:03,797 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Camping erobert neue Zielgruppen | Trends - Counter vor9' extrahiert +2025-08-19 10:06:03,797 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Camping erobert neue Zielgruppen | Trends - Counter vor9 +2025-08-19 10:06:03,797 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Liveschalte - Vom DDR-Intercamping zum modernen Campingplatz Berlin | rbb - rbb24 +2025-08-19 10:06:03,798 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.rbb-online.de/der-tag/ort/schmoekwitzwerder-camping-am-krossinsee.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2DBDdZLr3yZhvUrdhKDBMZ (Versuch 1) +2025-08-19 10:06:03,911 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:03,911 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:03,911 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:03,912 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.rbb-online.de/der-tag/ort/schmoekwitzwerder-camping-am-krossinsee.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2DBDdZLr3yZhvUrdhKDBMZ +2025-08-19 10:06:03,913 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.rbb-online.de/der-tag/ort/schmoekwitzwerder-camping-am-krossinsee.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2DBDdZLr3yZhvUrdhKDBMZ +2025-08-19 10:06:04,035 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:04,036 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.rbb-online.de/der-tag/ort/schmoekwitzwerder-camping-am-krossinsee.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2DBDdZLr3yZhvUrdhKDBMZ +2025-08-19 10:06:04,036 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Liveschalte - Vom DDR-Intercamping zum modernen Campingplatz Berlin | rbb - rbb24' extrahiert +2025-08-19 10:06:04,036 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Liveschalte - Vom DDR-Intercamping zum modernen Campingplatz Berlin | rbb - rbb24 +2025-08-19 10:06:04,037 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Verträge laufen aus – Steht der Dauercampingplatz in Karlstein am Main vor dem Aus? +2025-08-19 10:06:04,037 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.tvmainfranken.de/mediathek/video/vertraege-laufen-aus-steht-der-dauercampingplatz-in-karlstein-am-main-vor-dem-aus/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1DnOUC_hBM-Pi_zSeQ-Agv (Versuch 1) +2025-08-19 10:06:04,151 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:04,152 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:04,152 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:04,152 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.tvmainfranken.de/mediathek/video/vertraege-laufen-aus-steht-der-dauercampingplatz-in-karlstein-am-main-vor-dem-aus/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1DnOUC_hBM-Pi_zSeQ-Agv +2025-08-19 10:06:04,154 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.tvmainfranken.de/mediathek/video/vertraege-laufen-aus-steht-der-dauercampingplatz-in-karlstein-am-main-vor-dem-aus/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1DnOUC_hBM-Pi_zSeQ-Agv +2025-08-19 10:06:04,276 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:04,276 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.tvmainfranken.de/mediathek/video/vertraege-laufen-aus-steht-der-dauercampingplatz-in-karlstein-am-main-vor-dem-aus/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1DnOUC_hBM-Pi_zSeQ-Agv +2025-08-19 10:06:04,277 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Verträge laufen aus – Steht der Dauercampingplatz in Karlstein am Main vor dem Aus?' extrahiert +2025-08-19 10:06:04,277 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Verträge laufen aus – Steht der Dauercampingplatz in Karlstein am Main vor dem Aus? +2025-08-19 10:06:04,278 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Urlaub mit Hund in Mecklenburg-Vorpommern: Hier sind Vierbeiner willkommen +2025-08-19 10:06:04,278 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.ostsee-zeitung.de/mecklenburg-vorpommern/urlaub-mit-hund-in-mv-hier-sind-vierbeiner-willkommen-BRLVGYNE2VE6JCGSNWVMQ6MQ64.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw28_kG-NzvJuF08jgbQyzeZ (Versuch 1) +2025-08-19 10:06:04,397 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:04,399 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:04,399 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:04,399 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.ostsee-zeitung.de/mecklenburg-vorpommern/urlaub-mit-hund-in-mv-hier-sind-vierbeiner-willkommen-BRLVGYNE2VE6JCGSNWVMQ6MQ64.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw28_kG-NzvJuF08jgbQyzeZ +2025-08-19 10:06:04,400 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.ostsee-zeitung.de/mecklenburg-vorpommern/urlaub-mit-hund-in-mv-hier-sind-vierbeiner-willkommen-BRLVGYNE2VE6JCGSNWVMQ6MQ64.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw28_kG-NzvJuF08jgbQyzeZ +2025-08-19 10:06:04,518 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:04,519 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.ostsee-zeitung.de/mecklenburg-vorpommern/urlaub-mit-hund-in-mv-hier-sind-vierbeiner-willkommen-BRLVGYNE2VE6JCGSNWVMQ6MQ64.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw28_kG-NzvJuF08jgbQyzeZ +2025-08-19 10:06:04,519 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Urlaub mit Hund in Mecklenburg-Vorpommern: Hier sind Vierbeiner willkommen' extrahiert +2025-08-19 10:06:04,520 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Urlaub mit Hund in Mecklenburg-Vorpommern: Hier sind Vierbeiner willkommen +2025-08-19 10:06:04,520 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Deutsche auf größtem Campingplatz der Welt: „Musst du in Therapie“ - news38.de +2025-08-19 10:06:04,521 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.news38.de/panorama/promi-tv/article300594965/camping-bella-italia-rtl2-usa-fingerhuth.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1LclJVLbC4CWJ-Z13ITJAE (Versuch 1) +2025-08-19 10:06:04,636 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:04,637 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:04,637 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:04,637 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.news38.de/panorama/promi-tv/article300594965/camping-bella-italia-rtl2-usa-fingerhuth.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1LclJVLbC4CWJ-Z13ITJAE +2025-08-19 10:06:04,638 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.news38.de/panorama/promi-tv/article300594965/camping-bella-italia-rtl2-usa-fingerhuth.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1LclJVLbC4CWJ-Z13ITJAE +2025-08-19 10:06:04,759 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:04,760 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.news38.de/panorama/promi-tv/article300594965/camping-bella-italia-rtl2-usa-fingerhuth.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1LclJVLbC4CWJ-Z13ITJAE +2025-08-19 10:06:04,760 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Deutsche auf größtem Campingplatz der Welt: „Musst du in Therapie“ - news38.de' extrahiert +2025-08-19 10:06:04,760 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Deutsche auf größtem Campingplatz der Welt: „Musst du in Therapie“ - news38.de +2025-08-19 10:06:04,761 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hitze mit 30 Grad und mehr: Tropensturm bringt Europa nochmal Spätsommer-Wetter +2025-08-19 10:06:04,761 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/hitze-mit-30-grad-und-mehr-tropensturm-bringt-europa-nochmal-spaetsommer-wetter-zr-93887738.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw04IwICepfw_rAkj4MdEEpf (Versuch 1) +2025-08-19 10:06:04,881 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:04,882 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:04,882 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:04,882 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/hitze-mit-30-grad-und-mehr-tropensturm-bringt-europa-nochmal-spaetsommer-wetter-zr-93887738.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw04IwICepfw_rAkj4MdEEpf +2025-08-19 10:06:04,884 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/hitze-mit-30-grad-und-mehr-tropensturm-bringt-europa-nochmal-spaetsommer-wetter-zr-93887738.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw04IwICepfw_rAkj4MdEEpf +2025-08-19 10:06:05,048 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:05,048 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/hitze-mit-30-grad-und-mehr-tropensturm-bringt-europa-nochmal-spaetsommer-wetter-zr-93887738.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw04IwICepfw_rAkj4MdEEpf +2025-08-19 10:06:05,049 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Hitze mit 30 Grad und mehr: Tropensturm bringt Europa nochmal Spätsommer-Wetter' extrahiert +2025-08-19 10:06:05,049 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Hitze mit 30 Grad und mehr: Tropensturm bringt Europa nochmal Spätsommer-Wetter +2025-08-19 10:06:05,050 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Urlaub vor der Haustür: Warum der Innenhof des Zschopauer Seniorenzentrums für zwei ... +2025-08-19 10:06:05,050 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.freiepresse.de/erzgebirge/zschopau/urlaub-vor-der-haustuer-warum-der-innenhof-des-zschopauer-seniorenzentrums-fuer-zwei-tage-zum-campingplatz-wurde-artikel13923271&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw18Q6crLrGxT2s5ouNzshac (Versuch 1) +2025-08-19 10:06:05,177 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:05,177 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:05,177 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:05,178 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.freiepresse.de/erzgebirge/zschopau/urlaub-vor-der-haustuer-warum-der-innenhof-des-zschopauer-seniorenzentrums-fuer-zwei-tage-zum-campingplatz-wurde-artikel13923271&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw18Q6crLrGxT2s5ouNzshac +2025-08-19 10:06:05,179 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.freiepresse.de/erzgebirge/zschopau/urlaub-vor-der-haustuer-warum-der-innenhof-des-zschopauer-seniorenzentrums-fuer-zwei-tage-zum-campingplatz-wurde-artikel13923271&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw18Q6crLrGxT2s5ouNzshac +2025-08-19 10:06:05,294 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:05,295 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.freiepresse.de/erzgebirge/zschopau/urlaub-vor-der-haustuer-warum-der-innenhof-des-zschopauer-seniorenzentrums-fuer-zwei-tage-zum-campingplatz-wurde-artikel13923271&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw18Q6crLrGxT2s5ouNzshac +2025-08-19 10:06:05,295 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Urlaub vor der Haustür: Warum der Innenhof des Zschopauer Seniorenzentrums für zwei ...' extrahiert +2025-08-19 10:06:05,295 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Urlaub vor der Haustür: Warum der Innenhof des Zschopauer Seniorenzentrums für zwei ... +2025-08-19 10:06:05,296 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: A40: Vollsperrung zwischen Bochum und Essen kostet Nerven - PiNCAMP Magazin +2025-08-19 10:06:05,296 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.pincamp.de/magazin/nachrichten/a40-vollsperrung-zwischen-bochum-und-essen-kostet-nerven&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1CIEQ13m8IuurSSpp6nZFO (Versuch 1) +2025-08-19 10:06:05,412 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:05,413 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:05,413 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:05,414 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.pincamp.de/magazin/nachrichten/a40-vollsperrung-zwischen-bochum-und-essen-kostet-nerven&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1CIEQ13m8IuurSSpp6nZFO +2025-08-19 10:06:05,416 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.pincamp.de/magazin/nachrichten/a40-vollsperrung-zwischen-bochum-und-essen-kostet-nerven&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1CIEQ13m8IuurSSpp6nZFO +2025-08-19 10:06:05,537 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:05,537 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.pincamp.de/magazin/nachrichten/a40-vollsperrung-zwischen-bochum-und-essen-kostet-nerven&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1CIEQ13m8IuurSSpp6nZFO +2025-08-19 10:06:05,537 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'A40: Vollsperrung zwischen Bochum und Essen kostet Nerven - PiNCAMP Magazin' extrahiert +2025-08-19 10:06:05,538 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: A40: Vollsperrung zwischen Bochum und Essen kostet Nerven - PiNCAMP Magazin +2025-08-19 10:06:05,538 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Surfer (85) am Chiemsee verschwunden: Großanlegte Suchaktion auch am Montag - Rosenheim24 +2025-08-19 10:06:05,538 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.rosenheim24.de/rosenheim/polizeimeldungen/uebersee-polizei-und-wasserwacht-suchen-vermissten-surfer-am-chiemsee-bis-dato-ohne-erfolg-93887306.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2w_irRYdoJKzLR0X84Ad8e (Versuch 1) +2025-08-19 10:06:05,655 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:05,656 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:05,656 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:05,656 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.rosenheim24.de/rosenheim/polizeimeldungen/uebersee-polizei-und-wasserwacht-suchen-vermissten-surfer-am-chiemsee-bis-dato-ohne-erfolg-93887306.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2w_irRYdoJKzLR0X84Ad8e +2025-08-19 10:06:05,658 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.rosenheim24.de/rosenheim/polizeimeldungen/uebersee-polizei-und-wasserwacht-suchen-vermissten-surfer-am-chiemsee-bis-dato-ohne-erfolg-93887306.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2w_irRYdoJKzLR0X84Ad8e +2025-08-19 10:06:05,772 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:05,773 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.rosenheim24.de/rosenheim/polizeimeldungen/uebersee-polizei-und-wasserwacht-suchen-vermissten-surfer-am-chiemsee-bis-dato-ohne-erfolg-93887306.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2w_irRYdoJKzLR0X84Ad8e +2025-08-19 10:06:05,773 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Surfer (85) am Chiemsee verschwunden: Großanlegte Suchaktion auch am Montag - Rosenheim24' extrahiert +2025-08-19 10:06:05,773 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Surfer (85) am Chiemsee verschwunden: Großanlegte Suchaktion auch am Montag - Rosenheim24 +2025-08-19 10:06:05,773 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Toter 13-Jähriger: Ermittler gehen von Unfall aus - DieSachsen.de +2025-08-19 10:06:05,773 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.diesachsen.de/unfall-und-verkehr/toter-13-jaehriger-ermittler-gehen-von-unfall-aus-3045700&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2lqwMLXlVEe-Tds0lRaXMi (Versuch 1) +2025-08-19 10:06:05,892 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:05,892 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:05,892 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:05,892 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.diesachsen.de/unfall-und-verkehr/toter-13-jaehriger-ermittler-gehen-von-unfall-aus-3045700&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2lqwMLXlVEe-Tds0lRaXMi +2025-08-19 10:06:05,894 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.diesachsen.de/unfall-und-verkehr/toter-13-jaehriger-ermittler-gehen-von-unfall-aus-3045700&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2lqwMLXlVEe-Tds0lRaXMi +2025-08-19 10:06:06,018 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:06,018 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.diesachsen.de/unfall-und-verkehr/toter-13-jaehriger-ermittler-gehen-von-unfall-aus-3045700&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2lqwMLXlVEe-Tds0lRaXMi +2025-08-19 10:06:06,019 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Toter 13-Jähriger: Ermittler gehen von Unfall aus - DieSachsen.de' extrahiert +2025-08-19 10:06:06,020 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Toter 13-Jähriger: Ermittler gehen von Unfall aus - DieSachsen.de +2025-08-19 10:06:06,020 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Angriff mit Yoga-Matten: Mutter mit zwei Kindern auf Campingplatz Langlau in Not +2025-08-19 10:06:06,021 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nn.de/region/gunzenhausen/angriff-mit-yoga-matten-mutter-mit-zwei-kindern-auf-campingplatz-langlau-in-not-1.14800747&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ugUpG1IfTlR1FCFcgsHvG (Versuch 1) +2025-08-19 10:06:06,144 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:06,144 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:06,145 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:06,145 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.nn.de/region/gunzenhausen/angriff-mit-yoga-matten-mutter-mit-zwei-kindern-auf-campingplatz-langlau-in-not-1.14800747&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ugUpG1IfTlR1FCFcgsHvG +2025-08-19 10:06:06,147 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nn.de/region/gunzenhausen/angriff-mit-yoga-matten-mutter-mit-zwei-kindern-auf-campingplatz-langlau-in-not-1.14800747&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ugUpG1IfTlR1FCFcgsHvG +2025-08-19 10:06:06,269 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:06,270 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.nn.de/region/gunzenhausen/angriff-mit-yoga-matten-mutter-mit-zwei-kindern-auf-campingplatz-langlau-in-not-1.14800747&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ugUpG1IfTlR1FCFcgsHvG +2025-08-19 10:06:06,270 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Angriff mit Yoga-Matten: Mutter mit zwei Kindern auf Campingplatz Langlau in Not' extrahiert +2025-08-19 10:06:06,270 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Angriff mit Yoga-Matten: Mutter mit zwei Kindern auf Campingplatz Langlau in Not +2025-08-19 10:06:06,271 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Übersee: 85-jähriger Surfer wird auf dem Chiemsee vermisst - Traunsteiner Tagblatt +2025-08-19 10:06:06,271 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.traunsteiner-tagblatt.de/region/landkreis-traunstein/uebersee_artikel,-85jaehriger-surfer-wird-auf-dem-chiemsee-vermisst-_arid,952723.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0dJa3tuybPxYdMYo3oV320 (Versuch 1) +2025-08-19 10:06:06,395 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:06,396 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:06,396 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:06,396 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.traunsteiner-tagblatt.de/region/landkreis-traunstein/uebersee_artikel,-85jaehriger-surfer-wird-auf-dem-chiemsee-vermisst-_arid,952723.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0dJa3tuybPxYdMYo3oV320 +2025-08-19 10:06:06,398 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.traunsteiner-tagblatt.de/region/landkreis-traunstein/uebersee_artikel,-85jaehriger-surfer-wird-auf-dem-chiemsee-vermisst-_arid,952723.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0dJa3tuybPxYdMYo3oV320 +2025-08-19 10:06:06,520 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:06,520 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.traunsteiner-tagblatt.de/region/landkreis-traunstein/uebersee_artikel,-85jaehriger-surfer-wird-auf-dem-chiemsee-vermisst-_arid,952723.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0dJa3tuybPxYdMYo3oV320 +2025-08-19 10:06:06,521 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Übersee: 85-jähriger Surfer wird auf dem Chiemsee vermisst - Traunsteiner Tagblatt' extrahiert +2025-08-19 10:06:06,521 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Übersee: 85-jähriger Surfer wird auf dem Chiemsee vermisst - Traunsteiner Tagblatt +2025-08-19 10:06:06,522 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Weinsberg CaraTour 600 ME im Test: Abenteuer auf vier Rädern? - IMTEST +2025-08-19 10:06:06,522 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.imtest.de/mobilitaet-reise/weinsberg-caratour-600-me-camping-van-kompakt-kastenwagen-test-ziemlich/424550&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3y4Gx77nyLDlu4T5QBAh_- (Versuch 1) +2025-08-19 10:06:06,640 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:06,641 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:06,641 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:06,641 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.imtest.de/mobilitaet-reise/weinsberg-caratour-600-me-camping-van-kompakt-kastenwagen-test-ziemlich/424550&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3y4Gx77nyLDlu4T5QBAh_- +2025-08-19 10:06:06,643 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.imtest.de/mobilitaet-reise/weinsberg-caratour-600-me-camping-van-kompakt-kastenwagen-test-ziemlich/424550&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3y4Gx77nyLDlu4T5QBAh_- +2025-08-19 10:06:06,762 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:06,763 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.imtest.de/mobilitaet-reise/weinsberg-caratour-600-me-camping-van-kompakt-kastenwagen-test-ziemlich/424550&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3y4Gx77nyLDlu4T5QBAh_- +2025-08-19 10:06:06,763 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Weinsberg CaraTour 600 ME im Test: Abenteuer auf vier Rädern? - IMTEST' extrahiert +2025-08-19 10:06:06,763 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Weinsberg CaraTour 600 ME im Test: Abenteuer auf vier Rädern? - IMTEST +2025-08-19 10:06:06,764 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: An Weilburger Tankstelle fliegen die Fäuste - Echo Online +2025-08-19 10:06:06,764 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/kreis-limburg-weilburg/weilburg/an-weilburger-tankstelle-fliegen-die-faeuste-4892024&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l7jUxG7664vJ69cHwv20M (Versuch 1) +2025-08-19 10:06:06,876 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:06,877 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:06,877 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:06,877 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/kreis-limburg-weilburg/weilburg/an-weilburger-tankstelle-fliegen-die-faeuste-4892024&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l7jUxG7664vJ69cHwv20M +2025-08-19 10:06:06,879 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/kreis-limburg-weilburg/weilburg/an-weilburger-tankstelle-fliegen-die-faeuste-4892024&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l7jUxG7664vJ69cHwv20M +2025-08-19 10:06:07,005 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:07,005 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/kreis-limburg-weilburg/weilburg/an-weilburger-tankstelle-fliegen-die-faeuste-4892024&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l7jUxG7664vJ69cHwv20M +2025-08-19 10:06:07,006 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'An Weilburger Tankstelle fliegen die Fäuste - Echo Online' extrahiert +2025-08-19 10:06:07,006 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: An Weilburger Tankstelle fliegen die Fäuste - Echo Online +2025-08-19 10:06:07,007 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Ein spannendes Wochenende für kleine Abenteurer - BLICK aktuell +2025-08-19 10:06:07,007 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.blick-aktuell.de/Termine/Ein-spannendes-Wochenende-fuer-kleine-Abenteurer--636547.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0kVA76weLMICuiplUm9G5M (Versuch 1) +2025-08-19 10:06:07,129 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:07,130 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:07,130 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:07,130 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.blick-aktuell.de/Termine/Ein-spannendes-Wochenende-fuer-kleine-Abenteurer--636547.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0kVA76weLMICuiplUm9G5M +2025-08-19 10:06:07,131 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.blick-aktuell.de/Termine/Ein-spannendes-Wochenende-fuer-kleine-Abenteurer--636547.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0kVA76weLMICuiplUm9G5M +2025-08-19 10:06:07,257 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:07,257 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.blick-aktuell.de/Termine/Ein-spannendes-Wochenende-fuer-kleine-Abenteurer--636547.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0kVA76weLMICuiplUm9G5M +2025-08-19 10:06:07,258 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Ein spannendes Wochenende für kleine Abenteurer - BLICK aktuell' extrahiert +2025-08-19 10:06:07,259 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Ein spannendes Wochenende für kleine Abenteurer - BLICK aktuell +2025-08-19 10:06:07,259 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Woran ein Campingplatz-Experte des ADAC deutsche Urlauber direkt erkennt +2025-08-19 10:06:07,259 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.lauterbacher-anzeiger.de/panorama/woran-ein-campingplatz-experte-des-adac-deutsche-urlauber-direkt-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw14jziy82R0xboz7sPEvmaR (Versuch 1) +2025-08-19 10:06:07,385 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:07,386 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:07,386 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:07,386 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.lauterbacher-anzeiger.de/panorama/woran-ein-campingplatz-experte-des-adac-deutsche-urlauber-direkt-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw14jziy82R0xboz7sPEvmaR +2025-08-19 10:06:07,387 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.lauterbacher-anzeiger.de/panorama/woran-ein-campingplatz-experte-des-adac-deutsche-urlauber-direkt-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw14jziy82R0xboz7sPEvmaR +2025-08-19 10:06:07,505 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:07,505 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.lauterbacher-anzeiger.de/panorama/woran-ein-campingplatz-experte-des-adac-deutsche-urlauber-direkt-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw14jziy82R0xboz7sPEvmaR +2025-08-19 10:06:07,505 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Woran ein Campingplatz-Experte des ADAC deutsche Urlauber direkt erkennt' extrahiert +2025-08-19 10:06:07,506 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Woran ein Campingplatz-Experte des ADAC deutsche Urlauber direkt erkennt +2025-08-19 10:06:07,506 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Vermisster Junge bei Lohsa: Obduktion des toten 13-Jährigen abgeschlossen | Lausitzer Rundschau +2025-08-19 10:06:07,506 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.lr-online.de/lausitz/hoyerswerda/vermisster-junge-bei-lohsa-obduktion-des-toten-13-jaehrigen-abgeschlossen-78252705.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2bCvU4jnneGEZTl3uf48qo (Versuch 1) +2025-08-19 10:06:07,622 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:07,623 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:07,623 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:07,623 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.lr-online.de/lausitz/hoyerswerda/vermisster-junge-bei-lohsa-obduktion-des-toten-13-jaehrigen-abgeschlossen-78252705.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2bCvU4jnneGEZTl3uf48qo +2025-08-19 10:06:07,626 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.lr-online.de/lausitz/hoyerswerda/vermisster-junge-bei-lohsa-obduktion-des-toten-13-jaehrigen-abgeschlossen-78252705.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2bCvU4jnneGEZTl3uf48qo +2025-08-19 10:06:07,744 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:07,745 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.lr-online.de/lausitz/hoyerswerda/vermisster-junge-bei-lohsa-obduktion-des-toten-13-jaehrigen-abgeschlossen-78252705.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2bCvU4jnneGEZTl3uf48qo +2025-08-19 10:06:07,745 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Vermisster Junge bei Lohsa: Obduktion des toten 13-Jährigen abgeschlossen | Lausitzer Rundschau' extrahiert +2025-08-19 10:06:07,745 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Vermisster Junge bei Lohsa: Obduktion des toten 13-Jährigen abgeschlossen | Lausitzer Rundschau +2025-08-19 10:06:07,745 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 20 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-19 10:06:08,751 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-19 10:06:09,373 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Vanlife +2025-08-19 10:06:09,373 - INFO - fetch_and_process_feed:187 - 📰 3 Einträge gefunden +2025-08-19 10:06:09,374 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Jeep Cherokee als Camper – der einfache Weg zum autarken Urlaub - vanlifemag.de +2025-08-19 10:06:09,375 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/jeep-cherokee-als-camper/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0A-3nq90dUx96JAA9j2VYX (Versuch 1) +2025-08-19 10:06:09,493 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:09,493 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:09,493 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:09,493 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/jeep-cherokee-als-camper/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0A-3nq90dUx96JAA9j2VYX +2025-08-19 10:06:09,495 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/jeep-cherokee-als-camper/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0A-3nq90dUx96JAA9j2VYX +2025-08-19 10:06:09,613 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:09,613 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/jeep-cherokee-als-camper/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0A-3nq90dUx96JAA9j2VYX +2025-08-19 10:06:09,614 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Jeep Cherokee als Camper – der einfache Weg zum autarken Urlaub - vanlifemag.de' extrahiert +2025-08-19 10:06:09,614 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Jeep Cherokee als Camper – der einfache Weg zum autarken Urlaub - vanlifemag.de +2025-08-19 10:06:09,615 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: RC-1 SEMA Build: Ein Show-Camper setzt neue Maßstäbe - vanlifemag.de +2025-08-19 10:06:09,615 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/rc-1-sema-build-ein-show-camper-setzt-neue-massstaebe/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0gYNfiVFof8MRF16Pp8QEt (Versuch 1) +2025-08-19 10:06:09,731 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:09,732 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:09,732 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:09,732 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/rc-1-sema-build-ein-show-camper-setzt-neue-massstaebe/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0gYNfiVFof8MRF16Pp8QEt +2025-08-19 10:06:09,733 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/rc-1-sema-build-ein-show-camper-setzt-neue-massstaebe/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0gYNfiVFof8MRF16Pp8QEt +2025-08-19 10:06:09,850 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:09,851 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/rc-1-sema-build-ein-show-camper-setzt-neue-massstaebe/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0gYNfiVFof8MRF16Pp8QEt +2025-08-19 10:06:09,851 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'RC-1 SEMA Build: Ein Show-Camper setzt neue Maßstäbe - vanlifemag.de' extrahiert +2025-08-19 10:06:09,852 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: RC-1 SEMA Build: Ein Show-Camper setzt neue Maßstäbe - vanlifemag.de +2025-08-19 10:06:09,852 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Festival-Flair, Fachwissen und Musik – das bietet das Rahmenprogramm der CARAVAN und +2025-08-19 10:06:09,852 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.presseportal.de/pm/179965/6098434&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw2Lv2GimqzrQfgtJIY7asee (Versuch 1) +2025-08-19 10:06:09,964 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:09,965 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:09,965 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:09,965 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.presseportal.de/pm/179965/6098434&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw2Lv2GimqzrQfgtJIY7asee +2025-08-19 10:06:09,966 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.presseportal.de/pm/179965/6098434&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw2Lv2GimqzrQfgtJIY7asee +2025-08-19 10:06:10,090 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:10,090 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.presseportal.de/pm/179965/6098434&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw2Lv2GimqzrQfgtJIY7asee +2025-08-19 10:06:10,091 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Festival-Flair, Fachwissen und Musik – das bietet das Rahmenprogramm der CARAVAN und' extrahiert +2025-08-19 10:06:10,091 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Festival-Flair, Fachwissen und Musik – das bietet das Rahmenprogramm der CARAVAN und +2025-08-19 10:06:10,091 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 3 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-19 10:06:11,093 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-19 10:06:11,457 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Camping Termine 2024 +2025-08-19 10:06:11,458 - INFO - fetch_and_process_feed:187 - 📰 3 Einträge gefunden +2025-08-19 10:06:11,463 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: San Hejmo Festival 2026: Datum, Line-up, Neuheiten, Fotos - Düsseldorf Tonight +2025-08-19 10:06:11,466 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.tonight.de/freizeit/san-hejmo-festival-2026-datum-line-up-neuheiten-fotos_150121.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw1oblZYw0b618LHsaVJWsDI (Versuch 1) +2025-08-19 10:06:11,587 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:11,587 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:11,587 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:11,588 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.tonight.de/freizeit/san-hejmo-festival-2026-datum-line-up-neuheiten-fotos_150121.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw1oblZYw0b618LHsaVJWsDI +2025-08-19 10:06:11,589 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.tonight.de/freizeit/san-hejmo-festival-2026-datum-line-up-neuheiten-fotos_150121.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw1oblZYw0b618LHsaVJWsDI +2025-08-19 10:06:11,701 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:11,702 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.tonight.de/freizeit/san-hejmo-festival-2026-datum-line-up-neuheiten-fotos_150121.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw1oblZYw0b618LHsaVJWsDI +2025-08-19 10:06:11,702 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'San Hejmo Festival 2026: Datum, Line-up, Neuheiten, Fotos - Düsseldorf Tonight' extrahiert +2025-08-19 10:06:11,702 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: San Hejmo Festival 2026: Datum, Line-up, Neuheiten, Fotos - Düsseldorf Tonight +2025-08-19 10:06:11,703 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Familie Ochsenknecht: Camping-Urlaub mit Jimi Blue | GALA.de +2025-08-19 10:06:11,703 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.gala.de/stars/news/familie-ochsenknecht--camping-urlaub-mit-jimi-blue-24437026.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw2sgq15V-Z-mJUEaEvTyAdQ (Versuch 1) +2025-08-19 10:06:11,817 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:11,818 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:11,818 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:11,819 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.gala.de/stars/news/familie-ochsenknecht--camping-urlaub-mit-jimi-blue-24437026.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw2sgq15V-Z-mJUEaEvTyAdQ +2025-08-19 10:06:11,822 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.gala.de/stars/news/familie-ochsenknecht--camping-urlaub-mit-jimi-blue-24437026.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw2sgq15V-Z-mJUEaEvTyAdQ +2025-08-19 10:06:11,936 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:11,936 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.gala.de/stars/news/familie-ochsenknecht--camping-urlaub-mit-jimi-blue-24437026.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw2sgq15V-Z-mJUEaEvTyAdQ +2025-08-19 10:06:11,936 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Familie Ochsenknecht: Camping-Urlaub mit Jimi Blue | GALA.de' extrahiert +2025-08-19 10:06:11,937 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Familie Ochsenknecht: Camping-Urlaub mit Jimi Blue | GALA.de +2025-08-19 10:06:11,937 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Echo Open Air 2025 in Mindelheim (Westernach): Termin, Line-Up, Tickets, Bezahlung, Camping ... +2025-08-19 10:06:11,937 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.augsburger-allgemeine.de/mindelheim/echo-open-air-2025-mindelheim-westernach-am-wochenende-line-up-tickets-parken-camping-110529337&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw2QZff-JniMKd0gb3ZzaRQ0 (Versuch 1) +2025-08-19 10:06:12,060 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:12,060 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:12,060 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:12,061 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.augsburger-allgemeine.de/mindelheim/echo-open-air-2025-mindelheim-westernach-am-wochenende-line-up-tickets-parken-camping-110529337&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw2QZff-JniMKd0gb3ZzaRQ0 +2025-08-19 10:06:12,061 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.augsburger-allgemeine.de/mindelheim/echo-open-air-2025-mindelheim-westernach-am-wochenende-line-up-tickets-parken-camping-110529337&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw2QZff-JniMKd0gb3ZzaRQ0 +2025-08-19 10:06:12,176 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:12,177 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.augsburger-allgemeine.de/mindelheim/echo-open-air-2025-mindelheim-westernach-am-wochenende-line-up-tickets-parken-camping-110529337&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw2QZff-JniMKd0gb3ZzaRQ0 +2025-08-19 10:06:12,178 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Echo Open Air 2025 in Mindelheim (Westernach): Termin, Line-Up, Tickets, Bezahlung, Camping ...' extrahiert +2025-08-19 10:06:12,178 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Echo Open Air 2025 in Mindelheim (Westernach): Termin, Line-Up, Tickets, Bezahlung, Camping ... +2025-08-19 10:06:12,178 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 3 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-19 10:06:13,180 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-19 10:06:13,683 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert - Camping Messe 2025 +2025-08-19 10:06:13,683 - INFO - fetch_and_process_feed:187 - 📰 6 Einträge gefunden +2025-08-19 10:06:13,684 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: A40: Vollsperrung zwischen Bochum und Essen kostet Nerven - PiNCAMP Magazin +2025-08-19 10:06:13,684 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.pincamp.de/magazin/nachrichten/a40-vollsperrung-zwischen-bochum-und-essen-kostet-nerven&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1CIEQ13m8IuurSSpp6nZFO (Versuch 1) +2025-08-19 10:06:13,802 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:13,802 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:13,803 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:13,803 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.pincamp.de/magazin/nachrichten/a40-vollsperrung-zwischen-bochum-und-essen-kostet-nerven&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1CIEQ13m8IuurSSpp6nZFO +2025-08-19 10:06:13,804 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: A40: Vollsperrung zwischen Bochum und Essen kostet Nerven - PiNCAMP Magazin +2025-08-19 10:06:13,805 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gamescom 2025: Aston Martin im Zenless Zone Zero-Design - Autozeitung +2025-08-19 10:06:13,805 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.autozeitung.de/gamescom-2025-messe-highlights-fuer-autofans-209057.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0FXrDgBBR2LkRWJXcWhY_P (Versuch 1) +2025-08-19 10:06:13,924 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:13,925 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:13,925 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:13,925 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.autozeitung.de/gamescom-2025-messe-highlights-fuer-autofans-209057.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0FXrDgBBR2LkRWJXcWhY_P +2025-08-19 10:06:13,927 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.autozeitung.de/gamescom-2025-messe-highlights-fuer-autofans-209057.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0FXrDgBBR2LkRWJXcWhY_P +2025-08-19 10:06:14,043 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:14,043 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.autozeitung.de/gamescom-2025-messe-highlights-fuer-autofans-209057.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0FXrDgBBR2LkRWJXcWhY_P +2025-08-19 10:06:14,044 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Gamescom 2025: Aston Martin im Zenless Zone Zero-Design - Autozeitung' extrahiert +2025-08-19 10:06:14,044 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Gamescom 2025: Aston Martin im Zenless Zone Zero-Design - Autozeitung +2025-08-19 10:06:14,044 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Caravan Salon und Ed Sheeran zeitgleich: Droht ein Verkehrskollaps? | Regional - BILD.de +2025-08-19 10:06:14,045 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.bild.de/regional/duesseldorf/caravan-salon-und-ed-sheeran-zeitgleich-droht-ein-verkehrskollaps-689c5654149faf081095d6cc&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1SRpJIm3W_DbR7mUVWZ4WS (Versuch 1) +2025-08-19 10:06:14,166 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:14,167 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:14,168 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:14,169 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.bild.de/regional/duesseldorf/caravan-salon-und-ed-sheeran-zeitgleich-droht-ein-verkehrskollaps-689c5654149faf081095d6cc&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1SRpJIm3W_DbR7mUVWZ4WS +2025-08-19 10:06:14,170 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.bild.de/regional/duesseldorf/caravan-salon-und-ed-sheeran-zeitgleich-droht-ein-verkehrskollaps-689c5654149faf081095d6cc&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1SRpJIm3W_DbR7mUVWZ4WS +2025-08-19 10:06:14,289 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:14,289 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.bild.de/regional/duesseldorf/caravan-salon-und-ed-sheeran-zeitgleich-droht-ein-verkehrskollaps-689c5654149faf081095d6cc&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1SRpJIm3W_DbR7mUVWZ4WS +2025-08-19 10:06:14,289 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Caravan Salon und Ed Sheeran zeitgleich: Droht ein Verkehrskollaps? | Regional - BILD.de' extrahiert +2025-08-19 10:06:14,290 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Caravan Salon und Ed Sheeran zeitgleich: Droht ein Verkehrskollaps? | Regional - BILD.de +2025-08-19 10:06:14,290 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Neu bei Steam: Die gamescom 2025 wirft ihren Schatten voraus - GameStar +2025-08-19 10:06:14,290 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.gamestar.de/artikel/neu-bei-steam,3437937.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2sHEDYfSnIyZwh9_ssIU_y (Versuch 1) +2025-08-19 10:06:14,419 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:14,420 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:14,420 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:14,421 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.gamestar.de/artikel/neu-bei-steam,3437937.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2sHEDYfSnIyZwh9_ssIU_y +2025-08-19 10:06:14,424 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.gamestar.de/artikel/neu-bei-steam,3437937.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2sHEDYfSnIyZwh9_ssIU_y +2025-08-19 10:06:14,543 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:14,544 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.gamestar.de/artikel/neu-bei-steam,3437937.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2sHEDYfSnIyZwh9_ssIU_y +2025-08-19 10:06:14,545 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Neu bei Steam: Die gamescom 2025 wirft ihren Schatten voraus - GameStar' extrahiert +2025-08-19 10:06:14,545 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Neu bei Steam: Die gamescom 2025 wirft ihren Schatten voraus - GameStar +2025-08-19 10:06:14,546 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Festival-Flair, Fachwissen und Musik – das bietet das Rahmenprogramm der CARAVAN und +2025-08-19 10:06:14,546 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.presseportal.de/pm/179965/6098434&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2Lv2GimqzrQfgtJIY7asee (Versuch 1) +2025-08-19 10:06:14,664 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:14,665 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:14,665 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:14,665 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.presseportal.de/pm/179965/6098434&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2Lv2GimqzrQfgtJIY7asee +2025-08-19 10:06:14,667 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Festival-Flair, Fachwissen und Musik – das bietet das Rahmenprogramm der CARAVAN und +2025-08-19 10:06:14,667 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: MEORGA MSR-Spezialmesse in Ludwigshafen - klamm.de +2025-08-19 10:06:14,668 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.klamm.de/news/meorga-msr-spezialmesse-in-ludwigshafen-4N1254481.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11VrqOODIm34SfZyc87aDJ (Versuch 1) +2025-08-19 10:06:14,785 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:06:14,786 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:06:14,786 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:06:14,786 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.klamm.de/news/meorga-msr-spezialmesse-in-ludwigshafen-4N1254481.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11VrqOODIm34SfZyc87aDJ +2025-08-19 10:06:14,789 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.klamm.de/news/meorga-msr-spezialmesse-in-ludwigshafen-4N1254481.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11VrqOODIm34SfZyc87aDJ +2025-08-19 10:06:14,928 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 10:06:14,928 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.klamm.de/news/meorga-msr-spezialmesse-in-ludwigshafen-4N1254481.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11VrqOODIm34SfZyc87aDJ +2025-08-19 10:06:14,929 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'MEORGA MSR-Spezialmesse in Ludwigshafen - klamm.de' extrahiert +2025-08-19 10:06:14,929 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: MEORGA MSR-Spezialmesse in Ludwigshafen - klamm.de +2025-08-19 10:06:14,929 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 4 neue Artikel aus https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-19 10:06:15,965 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:06:15,965 - INFO - process_articles:310 - 🎉 Verarbeitung abgeschlossen: 63 neue Artikel in 38.74s hinzugefügt +2025-08-19 10:06:16,038 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:06:16,041 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:24:43,436 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:24:43,438 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:24:51,539 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:24:51,539 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:01,705 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:01,706 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:01,725 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:25:02,297 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:02,298 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:13,459 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:13,460 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:13,478 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:25:14,047 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:14,047 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:19,529 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:19,530 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:19,549 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:25:20,120 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:20,120 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:27,387 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:27,387 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:27,408 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:25:27,980 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:27,980 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:32,071 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:32,072 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:32,097 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:25:32,670 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:32,671 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:37,131 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:37,132 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:37,161 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:25:37,734 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:37,734 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:42,628 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:42,628 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:42,647 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:25:43,223 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:43,224 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:47,404 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:47,405 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:47,423 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:25:47,997 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:47,997 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:51,836 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:51,836 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:51,858 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:25:52,433 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:52,433 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:58,146 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:58,146 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:25:58,171 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:25:58,730 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:25:58,730 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:03,756 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:03,757 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:03,781 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:26:04,343 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:04,343 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:07,942 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:07,943 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:07,958 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:26:08,534 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:08,534 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:14,079 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:14,080 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:14,099 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:26:14,665 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:14,665 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:19,227 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:19,228 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:19,247 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:26:19,818 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:19,818 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:25,052 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:25,053 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:25,073 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:26:25,641 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:25,642 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:33,187 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:33,188 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:33,214 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:26:33,784 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:33,785 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:39,391 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:39,392 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:39,420 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:26:39,998 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:39,999 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:45,663 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:45,663 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:45,686 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:26:46,258 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:46,258 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:50,175 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:50,175 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:50,203 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:26:50,776 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:50,777 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:58,995 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:58,996 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:26:59,021 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:26:59,593 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:26:59,593 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:03,510 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:03,511 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:03,536 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:27:04,114 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:04,114 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:10,060 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:10,060 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:10,087 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:27:10,660 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:10,660 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:15,004 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:15,005 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:15,031 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:27:15,606 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:15,606 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:24,590 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:24,591 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:24,627 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:27:25,198 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:25,198 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:29,518 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:29,519 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:29,551 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:27:30,123 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:30,123 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:34,340 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:34,342 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:34,372 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:27:34,945 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:34,945 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:43,341 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:43,342 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:43,382 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:27:43,959 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:43,959 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:48,574 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:48,575 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:48,613 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:27:49,181 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:49,182 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:54,237 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:54,238 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:54,285 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:27:54,857 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:54,858 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:58,184 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:58,185 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:27:58,221 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:27:58,790 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:27:58,790 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:03,675 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:03,676 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:03,715 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:28:04,289 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:04,290 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:08,692 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:08,693 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:08,776 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:28:09,351 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:09,352 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:13,518 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:13,519 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:13,554 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:28:14,119 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:14,120 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:18,749 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:18,750 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:18,790 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:28:19,368 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:19,368 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:25,252 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:25,253 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:25,295 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:28:25,852 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:25,853 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:31,237 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:31,238 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:31,275 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:28:31,843 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:31,843 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:34,370 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:34,370 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:34,411 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:28:34,981 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:34,981 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:40,640 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:40,641 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:40,675 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:28:41,247 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:41,247 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:43,475 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:43,476 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:43,517 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:28:44,092 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:44,092 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:52,446 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:52,446 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:52,482 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:28:53,064 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:53,064 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:57,230 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:57,231 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:28:57,321 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:28:57,900 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:28:57,900 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:03,913 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:03,914 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:03,951 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:29:04,519 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:04,520 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:06,736 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:06,737 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:06,776 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:29:07,348 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:07,348 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:14,816 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:14,816 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:14,850 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:29:15,425 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:15,425 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:25,048 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:25,049 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:25,089 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:29:25,658 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:25,658 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:27,821 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:27,822 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:27,851 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:29:28,415 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:28,415 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:36,217 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:36,218 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:36,252 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:29:36,825 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:36,825 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:41,841 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:41,841 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:41,878 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:29:42,443 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:42,443 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:44,451 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:44,452 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:44,484 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:29:45,058 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:45,058 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:50,510 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:50,510 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:50,578 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:29:51,151 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:51,151 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:53,204 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:53,204 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:53,239 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:29:53,814 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:53,814 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:58,498 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:58,500 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:29:58,536 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:29:59,105 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:29:59,105 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:30:01,455 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:30:01,456 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:30:01,491 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:30:02,060 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:30:02,060 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:30:09,302 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:30:09,302 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:30:09,344 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:30:09,921 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:30:09,921 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:30:11,853 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:30:11,857 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:30:11,900 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:30:12,472 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:30:12,472 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:30:17,911 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:30:17,912 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:30:17,949 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:30:18,523 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:30:18,523 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:30:29,753 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:30:29,754 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:31:51,355 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:31:51,357 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:31:51,371 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:31:51,972 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:31:51,972 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:31:57,470 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:31:57,470 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:31:57,476 - INFO - rewrite_articles:320 - ✍️ Starte Artikel-Umschreibung +2025-08-19 10:31:57,480 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:31:57,480 - INFO - rewrite_articles:337 - ✍️ Umschreiben von: Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern +2025-08-19 10:32:02,795 - INFO - _send_single_request:1025 - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-19 10:32:05,200 - INFO - _send_single_request:1025 - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-19 10:32:05,202 - INFO - rewrite_articles:392 - ✅ Artikel erfolgreich umgeschrieben: Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern +2025-08-19 10:32:07,234 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:32:07,234 - INFO - rewrite_articles:404 - 🎉 1 Artikel erfolgreich umgeschrieben +2025-08-19 10:32:08,316 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:32:08,316 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:32:45,740 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:32:45,741 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:32:45,743 - INFO - upload_articles_to_wp:412 - 📤 Starte WordPress-Upload +2025-08-19 10:32:45,746 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:32:45,746 - INFO - upload_articles_to_wp:421 - 📦 1 Artikel für WordPress-Upload gefunden +2025-08-19 10:32:45,746 - INFO - __init__:51 - ✅ WordPress-Authentifizierung: Verwende bereitgestellten Base64-String +2025-08-19 10:32:46,245 - INFO - _get_default_category_id:87 - ✅ Standard-Kategorie 'Allgemein' gefunden: ID 1 +2025-08-19 10:32:46,245 - INFO - test_connection:338 - 🔧 Teste WordPress-API-Verbindung mit Base64-Auth... +2025-08-19 10:32:46,246 - INFO - test_connection:342 - 🔑 Authorization Header: Basic b2dpZXJ0ejp3aE... +2025-08-19 10:32:46,728 - INFO - test_connection:351 - 📡 API-Response Status: 200 +2025-08-19 10:32:46,728 - INFO - test_connection:352 - 📡 API-Response Headers: {'Content-Type': 'application/json; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'X-WS-RateLimit-Limit': '1000', 'X-WS-RateLimit-Remaining': '998', 'Date': 'Tue, 19 Aug 2025 08:32:46 GMT', 'Server': 'Apache', 'X-Powered-By': 'PHP/8.2.29', 'Pragma': 'no-cache', 'X-Robots-Tag': 'noindex', 'X-Content-Type-Options': 'nosniff', 'Access-Control-Expose-Headers': 'X-WP-Total, X-WP-TotalPages, Link', 'Access-Control-Allow-Headers': 'Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type', 'X-WP-Total': '4', 'X-WP-TotalPages': '4', 'Link': '; rel="next"', 'Allow': 'GET, POST', 'Expires': 'Wed, 11 Jan 1984 05:00:00 GMT', 'Cache-Control': 'no-cache, must-revalidate, max-age=0, no-store, private'} +2025-08-19 10:32:46,728 - INFO - test_connection:355 - ✅ WordPress-API-Verbindung erfolgreich +2025-08-19 10:32:46,729 - INFO - upload_multiple_articles:392 - 📦 Starte Batch-Upload von 1 Artikeln zu WordPress +2025-08-19 10:32:46,729 - INFO - upload_multiple_articles:396 - 📤 Upload 1/1: Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern +2025-08-19 10:32:46,729 - INFO - upload_article:249 - 📤 Starte WordPress-Upload: Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern +2025-08-19 10:32:48,058 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Herbertz GmbH' (ID: 899) +2025-08-19 10:32:48,979 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Stechmückenabwehr' (ID: 900) +2025-08-19 10:32:49,799 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Sommerabende' (ID: 901) +2025-08-19 10:32:50,618 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Geräuschloses Gerät' (ID: 902) +2025-08-19 10:32:51,662 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'News Aktuell' (ID: 903) +2025-08-19 10:32:51,662 - INFO - _get_or_create_tags:158 - 🏷️ Tags verarbeitet: 5 Tag-IDs erstellt +2025-08-19 10:32:51,662 - INFO - _prepare_post_data:194 - 📝 Post-Daten vorbereitet: Titel='Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern', Tags=5, Kategorie=1 +2025-08-19 10:32:52,139 - INFO - upload_article:274 - ✅ WordPress-Upload erfolgreich: 'Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern' (ID: 3396) +2025-08-19 10:32:52,140 - INFO - upload_article:275 - 🔗 WordPress-URL: https://vanityontour.de/?p=3396 +2025-08-19 10:32:52,140 - INFO - upload_multiple_articles:422 - 📊 Batch-Upload abgeschlossen: 1 erfolgreich, 0 fehlgeschlagen, 0 Duplikate +2025-08-19 10:32:52,141 - INFO - upload_articles_to_wp:441 - ✅ Status geändert für 'Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern': Process → WordPress Pending +2025-08-19 10:32:52,166 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:32:52,166 - INFO - upload_articles_to_wp:446 - 💾 Artikel-Status nach WordPress-Upload aktualisiert +2025-08-19 10:32:54,241 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:32:54,241 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:35:11,740 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:35:11,741 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:39:32,617 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:39:32,618 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:39:32,638 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:39:33,231 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:39:33,232 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:39:46,149 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:39:46,150 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:39:46,157 - INFO - upload_articles_to_wp:412 - 📤 Starte WordPress-Upload +2025-08-19 10:39:46,161 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:39:46,161 - INFO - upload_articles_to_wp:421 - 📦 1 Artikel für WordPress-Upload gefunden +2025-08-19 10:39:46,161 - INFO - __init__:51 - ✅ WordPress-Authentifizierung: Verwende bereitgestellten Base64-String +2025-08-19 10:39:46,771 - INFO - _get_default_category_id:87 - ✅ Standard-Kategorie 'Allgemein' gefunden: ID 1 +2025-08-19 10:39:46,772 - INFO - test_connection:338 - 🔧 Teste WordPress-API-Verbindung mit Base64-Auth... +2025-08-19 10:39:46,772 - INFO - test_connection:342 - 🔑 Authorization Header: Basic b2dpZXJ0ejp3aE... +2025-08-19 10:39:47,284 - INFO - test_connection:351 - 📡 API-Response Status: 200 +2025-08-19 10:39:47,284 - INFO - test_connection:352 - 📡 API-Response Headers: {'Content-Type': 'application/json; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'X-WS-RateLimit-Limit': '1000', 'X-WS-RateLimit-Remaining': '998', 'Date': 'Tue, 19 Aug 2025 08:39:46 GMT', 'Server': 'Apache', 'X-Powered-By': 'PHP/8.2.29', 'Pragma': 'no-cache', 'X-Robots-Tag': 'noindex', 'X-Content-Type-Options': 'nosniff', 'Access-Control-Expose-Headers': 'X-WP-Total, X-WP-TotalPages, Link', 'Access-Control-Allow-Headers': 'Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type', 'X-WP-Total': '4', 'X-WP-TotalPages': '4', 'Link': '; rel="next"', 'Allow': 'GET, POST', 'Expires': 'Wed, 11 Jan 1984 05:00:00 GMT', 'Cache-Control': 'no-cache, must-revalidate, max-age=0, no-store, private'} +2025-08-19 10:39:47,285 - INFO - test_connection:355 - ✅ WordPress-API-Verbindung erfolgreich +2025-08-19 10:39:47,285 - INFO - upload_multiple_articles:392 - 📦 Starte Batch-Upload von 1 Artikeln zu WordPress +2025-08-19 10:39:47,285 - INFO - upload_multiple_articles:396 - 📤 Upload 1/1: Inklusiver Campingurlaub am Gardasee +2025-08-19 10:39:47,286 - INFO - upload_article:249 - 📤 Starte WordPress-Upload: Inklusiver Campingurlaub am Gardasee +2025-08-19 10:39:47,749 - INFO - _prepare_post_data:194 - 📝 Post-Daten vorbereitet: Titel='Inklusiver Campingurlaub am Gardasee', Tags=0, Kategorie=1 +2025-08-19 10:39:48,205 - INFO - upload_article:274 - ✅ WordPress-Upload erfolgreich: 'Inklusiver Campingurlaub am Gardasee' (ID: 3408) +2025-08-19 10:39:48,206 - INFO - upload_article:275 - 🔗 WordPress-URL: https://vanityontour.de/?p=3408 +2025-08-19 10:39:48,206 - INFO - upload_multiple_articles:422 - 📊 Batch-Upload abgeschlossen: 1 erfolgreich, 0 fehlgeschlagen, 0 Duplikate +2025-08-19 10:39:48,206 - INFO - upload_articles_to_wp:441 - ✅ Status geändert für 'Inklusiver Campingurlaub am Gardasee': Process → WordPress Pending +2025-08-19 10:39:48,231 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:39:48,232 - INFO - upload_articles_to_wp:446 - 💾 Artikel-Status nach WordPress-Upload aktualisiert +2025-08-19 10:39:50,306 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:39:50,306 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:46:57,515 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:46:57,517 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:46:57,538 - INFO - save_articles:144 - ✅ 120 Artikel gespeichert +2025-08-19 10:46:58,118 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:46:58,119 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:47:16,327 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:47:16,333 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:47:24,707 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:47:24,712 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:47:28,922 - INFO - load_feeds:93 - ✅ 11 Feeds geladen +2025-08-19 10:47:28,927 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:47:28,940 - INFO - save_feeds:104 - ✅ 10 Feeds gespeichert +2025-08-19 10:47:28,941 - INFO - :116 - ❌ Feed gelöscht: Presseportal Polizei Langenfeld (https://www.presseportal.de/rss/polizei/r/Langenfeld+%28Rheinland%29.rss2) +2025-08-19 10:47:28,989 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 10:47:28,992 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:47:41,357 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:47:41,358 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 10:47:46,135 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:47:46,136 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 10:47:46,140 - INFO - process_articles:268 - 🚀 Starte Artikel-Verarbeitung +2025-08-19 10:47:46,141 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 10:47:46,145 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:47:46,145 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.camping-news.de/rss/ +2025-08-19 10:47:46,432 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Camping-News +2025-08-19 10:47:46,433 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-19 10:47:46,434 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 15 Jahre PremiumCamps +2025-08-19 10:47:46,434 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue Eriba Feeling und Novaline +2025-08-19 10:47:46,435 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Den eigenen Verbrauchszahlen auf der Spur +2025-08-19 10:47:46,435 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Abenteuer für die Kleinen, Entspannung für +die Großen +2025-08-19 10:47:46,436 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Das weltweit größte Caravaning-Erlebnis +2025-08-19 10:47:46,436 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Komfort und Flexibilität für moderne Camper +2025-08-19 10:47:46,437 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Frühjahrsaktionen vom Verein WOHNmobil für Klimaschutz +2025-08-19 10:47:46,437 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Viel los auf dem Klaukenhof +2025-08-19 10:47:46,438 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping Resort Allweglehen bietet "Wellness plus" +2025-08-19 10:47:46,438 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EU-Führerscheinreform kommt +2025-08-19 10:47:46,438 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.camping-news.de/rss/ +2025-08-19 10:47:47,443 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/news +2025-08-19 10:47:47,686 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: News bei www.promobil.de +2025-08-19 10:47:47,687 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-19 10:47:47,687 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-19 10:47:47,687 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/termine-veranstaltungen-juni-juli/ (Versuch 1) +2025-08-19 10:47:47,863 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:47,864 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:47,866 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 649 Wörter +2025-08-19 10:47:47,867 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 649 Wörter +2025-08-19 10:47:47,867 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-19 10:47:47,867 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-19 10:47:47,867 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ (Versuch 1) +2025-08-19 10:47:48,064 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:48,065 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:48,067 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1134 Wörter +2025-08-19 10:47:48,067 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1134 Wörter +2025-08-19 10:47:48,068 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-19 10:47:48,068 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-19 10:47:48,068 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/ (Versuch 1) +2025-08-19 10:47:48,280 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:48,281 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:48,283 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 874 Wörter +2025-08-19 10:47:48,283 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 874 Wörter +2025-08-19 10:47:48,283 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-19 10:47:48,283 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-19 10:47:48,283 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/ (Versuch 1) +2025-08-19 10:47:48,459 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:48,460 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:48,461 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 452 Wörter +2025-08-19 10:47:48,461 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 452 Wörter +2025-08-19 10:47:48,462 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-19 10:47:48,462 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-19 10:47:48,462 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ (Versuch 1) +2025-08-19 10:47:48,657 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:48,658 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:48,660 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1546 Wörter +2025-08-19 10:47:48,661 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1546 Wörter +2025-08-19 10:47:48,661 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-19 10:47:48,661 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-19 10:47:48,662 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/ (Versuch 1) +2025-08-19 10:47:48,820 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:48,820 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:48,821 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 136 Wörter +2025-08-19 10:47:48,821 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 136 Wörter +2025-08-19 10:47:48,821 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-19 10:47:48,822 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-19 10:47:48,822 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/top-10-clever-campen-videos-2024/ (Versuch 1) +2025-08-19 10:47:49,004 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:49,005 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:49,005 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:47:49,006 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 18 Paragraphen +2025-08-19 10:47:49,006 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:47:49,008 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-19 10:47:49,009 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-19 10:47:49,009 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-19 10:47:49,009 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/ (Versuch 1) +2025-08-19 10:47:49,214 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:49,216 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:49,218 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1870 Wörter +2025-08-19 10:47:49,219 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1870 Wörter +2025-08-19 10:47:49,219 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-19 10:47:49,220 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-19 10:47:49,220 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/ (Versuch 1) +2025-08-19 10:47:49,424 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:49,426 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:49,428 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1796 Wörter +2025-08-19 10:47:49,429 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1796 Wörter +2025-08-19 10:47:49,429 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-19 10:47:49,429 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-19 10:47:49,429 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ (Versuch 1) +2025-08-19 10:47:49,610 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:49,611 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:49,613 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 942 Wörter +2025-08-19 10:47:49,613 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 942 Wörter +2025-08-19 10:47:49,614 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-19 10:47:49,614 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-19 10:47:49,614 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/ (Versuch 1) +2025-08-19 10:47:49,789 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:49,790 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:49,791 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 416 Wörter +2025-08-19 10:47:49,791 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 416 Wörter +2025-08-19 10:47:49,791 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-19 10:47:49,792 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingbus Rocket Camper Ryzon beim Weltrekord: Jonas Deichmanns Camper für Ironman-Rekord +2025-08-19 10:47:49,792 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-19 10:47:49,792 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/ (Versuch 1) +2025-08-19 10:47:49,964 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:49,965 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:49,966 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 499 Wörter +2025-08-19 10:47:49,966 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 499 Wörter +2025-08-19 10:47:49,967 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-19 10:47:49,967 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-19 10:47:49,967 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/ (Versuch 1) +2025-08-19 10:47:50,189 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:50,190 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:50,192 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 894 Wörter +2025-08-19 10:47:50,192 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 894 Wörter +2025-08-19 10:47:50,192 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-19 10:47:50,193 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-19 10:47:50,193 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/can-kasim-dogan-interview-westfalia/ (Versuch 1) +2025-08-19 10:47:50,373 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:50,374 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:50,375 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 599 Wörter +2025-08-19 10:47:50,376 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 599 Wörter +2025-08-19 10:47:50,376 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-19 10:47:50,376 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-19 10:47:50,376 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/ (Versuch 1) +2025-08-19 10:47:50,614 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:50,615 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:50,616 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 639 Wörter +2025-08-19 10:47:50,616 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 639 Wörter +2025-08-19 10:47:50,616 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-19 10:47:50,617 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-19 10:47:50,617 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-frankfurt/ (Versuch 1) +2025-08-19 10:47:50,809 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:50,810 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:50,811 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 691 Wörter +2025-08-19 10:47:50,812 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 691 Wörter +2025-08-19 10:47:50,812 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-19 10:47:50,812 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-19 10:47:50,813 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/ (Versuch 1) +2025-08-19 10:47:51,018 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:51,020 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:51,021 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 923 Wörter +2025-08-19 10:47:51,022 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 923 Wörter +2025-08-19 10:47:51,022 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-19 10:47:51,022 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-19 10:47:51,022 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/camper-radio-radiosender-caravan-fm/ (Versuch 1) +2025-08-19 10:47:51,183 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:51,184 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:51,184 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 258 Wörter +2025-08-19 10:47:51,185 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 258 Wörter +2025-08-19 10:47:51,185 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-19 10:47:51,185 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-19 10:47:51,185 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/ (Versuch 1) +2025-08-19 10:47:51,353 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:47:51,354 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:51,354 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:47:51,355 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 8 Paragraphen +2025-08-19 10:47:51,355 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:47:51,358 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-19 10:47:51,358 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-19 10:47:51,359 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/news +2025-08-19 10:47:52,364 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/ratgeber +2025-08-19 10:47:52,734 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: ratgeber bei www.promobil.de +2025-08-19 10:47:52,734 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-19 10:47:52,735 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper +2025-08-19 10:47:52,736 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum perfekten Campingtag: Wo verbringen Sie den perfekten Campingurlaub? +2025-08-19 10:47:52,737 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-19 10:47:52,737 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper +2025-08-19 10:47:52,738 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Regeln auf Frankreichs Autobahnen im Pannenfall: Kein Schutz durch ADAC & Co. auf Autobahnen +2025-08-19 10:47:52,738 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht? +2025-08-19 10:47:52,740 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box +2025-08-19 10:47:52,740 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Film-Stunt mit Caravan – wie realistisch ist das?: Sexsymbol Jensen Ackles wagt Stunt auf Wohnwagen +2025-08-19 10:47:52,742 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CLEVER CAMPEN Podcast Folge 40: Gravelbikes und Camping – die beste Kombi? +2025-08-19 10:47:52,743 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Stellplatz-Radar Sommeraktion 2025: 30 Tage Stellplatz-Radar PLUS gratis testen +2025-08-19 10:47:52,743 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Digitaler Fahrzeugschein für Camper: promobil testet den digitalen Fahrzeugschein +2025-08-19 10:47:52,744 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Badezimmer beim Camping - Umfrage: Welches Bad brauchen Sie im Wohnmobil? +2025-08-19 10:47:52,745 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum Kaffeegenuss beim Camping: So kochen Sie am liebsten Ihren Kaffee +2025-08-19 10:47:52,746 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zwei Menschen, zwei Meinungen: Das Mietbad spaltet die Campingwelt +2025-08-19 10:47:52,746 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zubehör auf der größten Campingmesse kaufen: Deshalb müssen Zubehör-Shopper zum Caravan Salon +2025-08-19 10:47:52,747 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tipps für die größte Camping-Messe Deutschlands: Darum dürfen Sie den Caravan Salon nicht verpassen +2025-08-19 10:47:52,749 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Sommerhitze im Wohnmobil & Wohnwagen: Die besten Tipps gegen Hitze im Camper +2025-08-19 10:47:52,749 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dethleffs Reiselust-Prämie: Bis zu 20.000 Euro Rabatt auf Wohnmobile +2025-08-19 10:47:52,750 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue promobil-Newsletter - gratis!: Zum Frühstück die spannendsten Camping-Themen +2025-08-19 10:47:52,751 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Drittes Camping-Rekordjahr in Folge: Süd schlägt Nord – Hier wird am häufigsten gecampt +2025-08-19 10:47:52,751 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/ratgeber +2025-08-19 10:47:53,756 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-19 10:47:54,012 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach camping +2025-08-19 10:47:54,012 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-19 10:47:54,013 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern +2025-08-19 10:47:54,014 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-19 10:47:54,015 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: IFA 2025: Jackery präsentiert neue 500-Watt-Powerstation im flachen Format, Solardachziegel und DIY-Balkonkraftwerk mit integriertem Brandschutzsystem +2025-08-19 10:47:54,016 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Inklusiver Campingurlaub am Gardasee +2025-08-19 10:47:54,016 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/153661/6094377 (Versuch 1) +2025-08-19 10:47:54,365 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:54,366 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 616 Wörter +2025-08-19 10:47:54,367 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 616 Wörter +2025-08-19 10:47:54,367 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Inklusiver Campingurlaub am Gardasee +2025-08-19 10:47:54,368 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neuheiten-Feuerwerk bei vanexxt auf dem Caravan Salon Düsseldorf 2025 +2025-08-19 10:47:54,369 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-19 10:47:54,369 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/170000/6091414 (Versuch 1) +2025-08-19 10:47:54,651 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:54,652 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 191 Wörter +2025-08-19 10:47:54,652 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 191 Wörter +2025-08-19 10:47:54,653 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-19 10:47:54,654 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 50 Jahre ADAC Tourset: Vom Kartenstapel zum digitalen Reisebegleiter / Erfolgreicher Reisebegleiter / 657.000 Toursets in 2024 bestellt +2025-08-19 10:47:54,655 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: RTLZWEI: Erfolgreicher Montag mit "Bella Italia - Camping auf Deutsch" +2025-08-19 10:47:54,656 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-19 10:47:54,656 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-19 10:47:54,968 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:54,969 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-19 10:47:54,969 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-19 10:47:54,970 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: So ist man beim Camping richtig versichert +2025-08-19 10:47:54,971 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Family Spots: Diese Reiseziele begeistern Groß und Klein +2025-08-19 10:47:54,971 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/102577/6085137 (Versuch 1) +2025-08-19 10:47:55,258 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:55,260 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 1226 Wörter +2025-08-19 10:47:55,260 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1226 Wörter +2025-08-19 10:47:55,261 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Family Spots: Diese Reiseziele begeistern Groß und Klein +2025-08-19 10:47:55,261 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-19 10:47:56,266 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-19 10:47:56,520 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil +2025-08-19 10:47:56,520 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-19 10:47:56,522 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-19 10:47:56,523 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Maximale Flexibilität trifft volle Power: Intelligente Tiefenreinigung ohne Kabel mit der PURE ONE S Serie von Tineco +2025-08-19 10:47:56,524 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Urlaub mit dem Wohnmobil: Was tun bei Panne oder Unfall +2025-08-19 10:47:56,525 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-19 10:47:56,525 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/105254/6091837 (Versuch 1) +2025-08-19 10:47:56,793 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:56,794 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-19 10:47:56,795 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-19 10:47:56,795 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-19 10:47:57,102 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:57,103 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-19 10:47:57,103 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-19 10:47:57,104 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: So ist man beim Camping richtig versichert +2025-08-19 10:47:57,105 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Trotz Camper-Hype: Der Pkw ist die unangefochtene Nummer 1 für Sommerreisen +2025-08-19 10:47:57,106 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Doppelfolge am 24. Juli "Oksana & Family - Alles auf Anfang": Abwasserprobleme, Jobsuche und Tonstudiobesuch +2025-08-19 10:47:57,108 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Oksana & Family - Alles auf Anfang": Zwischen Camping-Chaos und einer schweren Entscheidung +2025-08-19 10:47:57,108 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Umfrage: Mehrheit will mehr Freiheiten für Wohnmobile und Camper +2025-08-19 10:47:57,108 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/13984/6077676 (Versuch 1) +2025-08-19 10:47:57,397 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 10:47:57,398 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 891 Wörter +2025-08-19 10:47:57,399 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 891 Wörter +2025-08-19 10:47:57,400 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage: Mehrheit will mehr Freiheiten für Wohnmobile und Camper +2025-08-19 10:47:57,401 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Urlaub mit Wohnmobil: erhöhte Unfallgefahr +2025-08-19 10:47:57,401 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-19 10:47:58,406 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://caravan-news.de/rss/schlagzeilen.php +2025-08-19 10:47:58,919 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: CARAVAN-NEWS.de +2025-08-19 10:47:58,919 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://caravan-news.de/rss/schlagzeilen.php +2025-08-19 10:47:59,923 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-19 10:48:00,447 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Campingplatz +2025-08-19 10:48:00,448 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-19 10:48:00,448 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hundefreundliche Campingplätze: Top 10 von Ostsee bis NRW entdecken - T-Online +2025-08-19 10:48:00,448 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.t-online.de/leben/reisen/deutschland/id_100871658/hundefreundliche-campingplaetze-top-10-von-ostsee-bis-nrw-entdecken.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2MLwYap5S4s8YXemp9_4B7 (Versuch 1) +2025-08-19 10:48:00,609 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:00,610 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:00,610 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:00,610 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.t-online.de/leben/reisen/deutschland/id_100871658/hundefreundliche-campingplaetze-top-10-von-ostsee-bis-nrw-entdecken.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2MLwYap5S4s8YXemp9_4B7 +2025-08-19 10:48:00,613 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hundefreundliche Campingplätze: Top 10 von Ostsee bis NRW entdecken - T-Online +2025-08-19 10:48:00,613 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Go's und No-Go's auf dem Husumer Campingplatz - SHZ +2025-08-19 10:48:00,614 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.shz.de/lokales/husum/artikel/gos-und-no-gos-auf-dem-husumer-campingplatz-49140857&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2QF6COS0JJi1OJck-Moqnc (Versuch 1) +2025-08-19 10:48:00,729 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:00,729 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:00,730 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:00,730 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.shz.de/lokales/husum/artikel/gos-und-no-gos-auf-dem-husumer-campingplatz-49140857&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2QF6COS0JJi1OJck-Moqnc +2025-08-19 10:48:00,732 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Go's und No-Go's auf dem Husumer Campingplatz - SHZ +2025-08-19 10:48:00,733 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping: Grenzüberschreitung! Gäste greifen zu harten Maßnahmen - moin.de +2025-08-19 10:48:00,733 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.moin.de/norddeutschland/camping-platz-nachbarn-was-tun-voll-verrueckt-plaetze-id300643691.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3yKD6zM5C0GGtXMIRQ476n (Versuch 1) +2025-08-19 10:48:00,853 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:00,854 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:00,854 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:00,855 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.moin.de/norddeutschland/camping-platz-nachbarn-was-tun-voll-verrueckt-plaetze-id300643691.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3yKD6zM5C0GGtXMIRQ476n +2025-08-19 10:48:00,857 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping: Grenzüberschreitung! Gäste greifen zu harten Maßnahmen - moin.de +2025-08-19 10:48:00,858 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping erobert neue Zielgruppen | Trends - Counter vor9 +2025-08-19 10:48:00,858 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.countervor9.de/trends/camping-erobert-neue-zielgruppen&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw25FhwEFlV2_J6vE622fq-G (Versuch 1) +2025-08-19 10:48:00,971 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:00,972 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:00,972 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:00,972 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.countervor9.de/trends/camping-erobert-neue-zielgruppen&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw25FhwEFlV2_J6vE622fq-G +2025-08-19 10:48:00,974 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping erobert neue Zielgruppen | Trends - Counter vor9 +2025-08-19 10:48:00,975 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Liveschalte - Vom DDR-Intercamping zum modernen Campingplatz Berlin | rbb - rbb24 +2025-08-19 10:48:00,975 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.rbb-online.de/der-tag/ort/schmoekwitzwerder-camping-am-krossinsee.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2DBDdZLr3yZhvUrdhKDBMZ (Versuch 1) +2025-08-19 10:48:01,093 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:01,094 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:01,094 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:01,095 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.rbb-online.de/der-tag/ort/schmoekwitzwerder-camping-am-krossinsee.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2DBDdZLr3yZhvUrdhKDBMZ +2025-08-19 10:48:01,097 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Liveschalte - Vom DDR-Intercamping zum modernen Campingplatz Berlin | rbb - rbb24 +2025-08-19 10:48:01,098 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Verträge laufen aus – Steht der Dauercampingplatz in Karlstein am Main vor dem Aus? +2025-08-19 10:48:01,098 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.tvmainfranken.de/mediathek/video/vertraege-laufen-aus-steht-der-dauercampingplatz-in-karlstein-am-main-vor-dem-aus/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1DnOUC_hBM-Pi_zSeQ-Agv (Versuch 1) +2025-08-19 10:48:01,217 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:01,218 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:01,218 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:01,219 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.tvmainfranken.de/mediathek/video/vertraege-laufen-aus-steht-der-dauercampingplatz-in-karlstein-am-main-vor-dem-aus/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1DnOUC_hBM-Pi_zSeQ-Agv +2025-08-19 10:48:01,221 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Verträge laufen aus – Steht der Dauercampingplatz in Karlstein am Main vor dem Aus? +2025-08-19 10:48:01,222 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Urlaub mit Hund in Mecklenburg-Vorpommern: Hier sind Vierbeiner willkommen +2025-08-19 10:48:01,222 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.ostsee-zeitung.de/mecklenburg-vorpommern/urlaub-mit-hund-in-mv-hier-sind-vierbeiner-willkommen-BRLVGYNE2VE6JCGSNWVMQ6MQ64.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw28_kG-NzvJuF08jgbQyzeZ (Versuch 1) +2025-08-19 10:48:01,335 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:01,336 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:01,336 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:01,337 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.ostsee-zeitung.de/mecklenburg-vorpommern/urlaub-mit-hund-in-mv-hier-sind-vierbeiner-willkommen-BRLVGYNE2VE6JCGSNWVMQ6MQ64.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw28_kG-NzvJuF08jgbQyzeZ +2025-08-19 10:48:01,339 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Urlaub mit Hund in Mecklenburg-Vorpommern: Hier sind Vierbeiner willkommen +2025-08-19 10:48:01,339 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Deutsche auf größtem Campingplatz der Welt: „Musst du in Therapie“ - news38.de +2025-08-19 10:48:01,340 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.news38.de/panorama/promi-tv/article300594965/camping-bella-italia-rtl2-usa-fingerhuth.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1LclJVLbC4CWJ-Z13ITJAE (Versuch 1) +2025-08-19 10:48:01,470 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:01,470 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:01,471 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:01,471 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.news38.de/panorama/promi-tv/article300594965/camping-bella-italia-rtl2-usa-fingerhuth.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1LclJVLbC4CWJ-Z13ITJAE +2025-08-19 10:48:01,473 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Deutsche auf größtem Campingplatz der Welt: „Musst du in Therapie“ - news38.de +2025-08-19 10:48:01,474 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hitze mit 30 Grad und mehr: Tropensturm bringt Europa nochmal Spätsommer-Wetter +2025-08-19 10:48:01,474 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/hitze-mit-30-grad-und-mehr-tropensturm-bringt-europa-nochmal-spaetsommer-wetter-zr-93887738.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw04IwICepfw_rAkj4MdEEpf (Versuch 1) +2025-08-19 10:48:01,594 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:01,594 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:01,595 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:01,595 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/hitze-mit-30-grad-und-mehr-tropensturm-bringt-europa-nochmal-spaetsommer-wetter-zr-93887738.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw04IwICepfw_rAkj4MdEEpf +2025-08-19 10:48:01,597 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hitze mit 30 Grad und mehr: Tropensturm bringt Europa nochmal Spätsommer-Wetter +2025-08-19 10:48:01,598 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Urlaub vor der Haustür: Warum der Innenhof des Zschopauer Seniorenzentrums für zwei ... +2025-08-19 10:48:01,598 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.freiepresse.de/erzgebirge/zschopau/urlaub-vor-der-haustuer-warum-der-innenhof-des-zschopauer-seniorenzentrums-fuer-zwei-tage-zum-campingplatz-wurde-artikel13923271&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw18Q6crLrGxT2s5ouNzshac (Versuch 1) +2025-08-19 10:48:01,753 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:01,753 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:01,754 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:01,754 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.freiepresse.de/erzgebirge/zschopau/urlaub-vor-der-haustuer-warum-der-innenhof-des-zschopauer-seniorenzentrums-fuer-zwei-tage-zum-campingplatz-wurde-artikel13923271&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw18Q6crLrGxT2s5ouNzshac +2025-08-19 10:48:01,757 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Urlaub vor der Haustür: Warum der Innenhof des Zschopauer Seniorenzentrums für zwei ... +2025-08-19 10:48:01,757 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: A40: Vollsperrung zwischen Bochum und Essen kostet Nerven - PiNCAMP Magazin +2025-08-19 10:48:01,758 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.pincamp.de/magazin/nachrichten/a40-vollsperrung-zwischen-bochum-und-essen-kostet-nerven&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1CIEQ13m8IuurSSpp6nZFO (Versuch 1) +2025-08-19 10:48:01,877 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:01,878 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:01,878 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:01,878 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.pincamp.de/magazin/nachrichten/a40-vollsperrung-zwischen-bochum-und-essen-kostet-nerven&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1CIEQ13m8IuurSSpp6nZFO +2025-08-19 10:48:01,881 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: A40: Vollsperrung zwischen Bochum und Essen kostet Nerven - PiNCAMP Magazin +2025-08-19 10:48:01,882 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Surfer (85) am Chiemsee verschwunden: Großanlegte Suchaktion auch am Montag - Rosenheim24 +2025-08-19 10:48:01,882 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.rosenheim24.de/rosenheim/polizeimeldungen/uebersee-polizei-und-wasserwacht-suchen-vermissten-surfer-am-chiemsee-bis-dato-ohne-erfolg-93887306.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2w_irRYdoJKzLR0X84Ad8e (Versuch 1) +2025-08-19 10:48:01,995 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:01,996 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:01,996 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:01,997 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.rosenheim24.de/rosenheim/polizeimeldungen/uebersee-polizei-und-wasserwacht-suchen-vermissten-surfer-am-chiemsee-bis-dato-ohne-erfolg-93887306.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2w_irRYdoJKzLR0X84Ad8e +2025-08-19 10:48:01,999 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Surfer (85) am Chiemsee verschwunden: Großanlegte Suchaktion auch am Montag - Rosenheim24 +2025-08-19 10:48:02,000 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Toter 13-Jähriger: Ermittler gehen von Unfall aus - DieSachsen.de +2025-08-19 10:48:02,000 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.diesachsen.de/unfall-und-verkehr/toter-13-jaehriger-ermittler-gehen-von-unfall-aus-3045700&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2lqwMLXlVEe-Tds0lRaXMi (Versuch 1) +2025-08-19 10:48:02,114 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:02,114 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:02,115 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:02,115 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.diesachsen.de/unfall-und-verkehr/toter-13-jaehriger-ermittler-gehen-von-unfall-aus-3045700&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2lqwMLXlVEe-Tds0lRaXMi +2025-08-19 10:48:02,117 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Toter 13-Jähriger: Ermittler gehen von Unfall aus - DieSachsen.de +2025-08-19 10:48:02,118 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Angriff mit Yoga-Matten: Mutter mit zwei Kindern auf Campingplatz Langlau in Not +2025-08-19 10:48:02,118 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nn.de/region/gunzenhausen/angriff-mit-yoga-matten-mutter-mit-zwei-kindern-auf-campingplatz-langlau-in-not-1.14800747&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ugUpG1IfTlR1FCFcgsHvG (Versuch 1) +2025-08-19 10:48:02,235 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:02,235 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:02,236 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:02,236 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.nn.de/region/gunzenhausen/angriff-mit-yoga-matten-mutter-mit-zwei-kindern-auf-campingplatz-langlau-in-not-1.14800747&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ugUpG1IfTlR1FCFcgsHvG +2025-08-19 10:48:02,238 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Angriff mit Yoga-Matten: Mutter mit zwei Kindern auf Campingplatz Langlau in Not +2025-08-19 10:48:02,239 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Übersee: 85-jähriger Surfer wird auf dem Chiemsee vermisst - Traunsteiner Tagblatt +2025-08-19 10:48:02,239 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.traunsteiner-tagblatt.de/region/landkreis-traunstein/uebersee_artikel,-85jaehriger-surfer-wird-auf-dem-chiemsee-vermisst-_arid,952723.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0dJa3tuybPxYdMYo3oV320 (Versuch 1) +2025-08-19 10:48:02,357 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:02,357 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:02,358 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:02,358 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.traunsteiner-tagblatt.de/region/landkreis-traunstein/uebersee_artikel,-85jaehriger-surfer-wird-auf-dem-chiemsee-vermisst-_arid,952723.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0dJa3tuybPxYdMYo3oV320 +2025-08-19 10:48:02,360 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Übersee: 85-jähriger Surfer wird auf dem Chiemsee vermisst - Traunsteiner Tagblatt +2025-08-19 10:48:02,361 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Weinsberg CaraTour 600 ME im Test: Abenteuer auf vier Rädern? - IMTEST +2025-08-19 10:48:02,361 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.imtest.de/mobilitaet-reise/weinsberg-caratour-600-me-camping-van-kompakt-kastenwagen-test-ziemlich/424550&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3y4Gx77nyLDlu4T5QBAh_- (Versuch 1) +2025-08-19 10:48:02,476 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:02,477 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:02,477 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:02,477 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.imtest.de/mobilitaet-reise/weinsberg-caratour-600-me-camping-van-kompakt-kastenwagen-test-ziemlich/424550&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3y4Gx77nyLDlu4T5QBAh_- +2025-08-19 10:48:02,480 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Weinsberg CaraTour 600 ME im Test: Abenteuer auf vier Rädern? - IMTEST +2025-08-19 10:48:02,481 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: An Weilburger Tankstelle fliegen die Fäuste - Echo Online +2025-08-19 10:48:02,481 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/kreis-limburg-weilburg/weilburg/an-weilburger-tankstelle-fliegen-die-faeuste-4892024&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l7jUxG7664vJ69cHwv20M (Versuch 1) +2025-08-19 10:48:02,601 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:02,602 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:02,602 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:02,603 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/kreis-limburg-weilburg/weilburg/an-weilburger-tankstelle-fliegen-die-faeuste-4892024&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l7jUxG7664vJ69cHwv20M +2025-08-19 10:48:02,605 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: An Weilburger Tankstelle fliegen die Fäuste - Echo Online +2025-08-19 10:48:02,606 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Ein spannendes Wochenende für kleine Abenteurer - BLICK aktuell +2025-08-19 10:48:02,606 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.blick-aktuell.de/Termine/Ein-spannendes-Wochenende-fuer-kleine-Abenteurer--636547.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0kVA76weLMICuiplUm9G5M (Versuch 1) +2025-08-19 10:48:02,734 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:02,735 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:02,735 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:02,735 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.blick-aktuell.de/Termine/Ein-spannendes-Wochenende-fuer-kleine-Abenteurer--636547.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0kVA76weLMICuiplUm9G5M +2025-08-19 10:48:02,737 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Ein spannendes Wochenende für kleine Abenteurer - BLICK aktuell +2025-08-19 10:48:02,738 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Woran ein Campingplatz-Experte des ADAC deutsche Urlauber direkt erkennt +2025-08-19 10:48:02,738 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.lauterbacher-anzeiger.de/panorama/woran-ein-campingplatz-experte-des-adac-deutsche-urlauber-direkt-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw14jziy82R0xboz7sPEvmaR (Versuch 1) +2025-08-19 10:48:02,853 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:02,853 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:02,853 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:02,854 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.lauterbacher-anzeiger.de/panorama/woran-ein-campingplatz-experte-des-adac-deutsche-urlauber-direkt-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw14jziy82R0xboz7sPEvmaR +2025-08-19 10:48:02,855 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Woran ein Campingplatz-Experte des ADAC deutsche Urlauber direkt erkennt +2025-08-19 10:48:02,855 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Vermisster Junge bei Lohsa: Obduktion des toten 13-Jährigen abgeschlossen | Lausitzer Rundschau +2025-08-19 10:48:02,855 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.lr-online.de/lausitz/hoyerswerda/vermisster-junge-bei-lohsa-obduktion-des-toten-13-jaehrigen-abgeschlossen-78252705.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2bCvU4jnneGEZTl3uf48qo (Versuch 1) +2025-08-19 10:48:02,995 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:02,996 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:02,996 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:02,996 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.lr-online.de/lausitz/hoyerswerda/vermisster-junge-bei-lohsa-obduktion-des-toten-13-jaehrigen-abgeschlossen-78252705.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2bCvU4jnneGEZTl3uf48qo +2025-08-19 10:48:02,997 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Vermisster Junge bei Lohsa: Obduktion des toten 13-Jährigen abgeschlossen | Lausitzer Rundschau +2025-08-19 10:48:02,997 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-19 10:48:03,999 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-19 10:48:04,574 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Vanlife +2025-08-19 10:48:04,574 - INFO - fetch_and_process_feed:187 - 📰 3 Einträge gefunden +2025-08-19 10:48:04,575 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Jeep Cherokee als Camper – der einfache Weg zum autarken Urlaub - vanlifemag.de +2025-08-19 10:48:04,575 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/jeep-cherokee-als-camper/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0A-3nq90dUx96JAA9j2VYX (Versuch 1) +2025-08-19 10:48:04,695 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:04,696 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:04,696 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:04,696 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/jeep-cherokee-als-camper/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0A-3nq90dUx96JAA9j2VYX +2025-08-19 10:48:04,699 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Jeep Cherokee als Camper – der einfache Weg zum autarken Urlaub - vanlifemag.de +2025-08-19 10:48:04,700 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: RC-1 SEMA Build: Ein Show-Camper setzt neue Maßstäbe - vanlifemag.de +2025-08-19 10:48:04,700 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/rc-1-sema-build-ein-show-camper-setzt-neue-massstaebe/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0gYNfiVFof8MRF16Pp8QEt (Versuch 1) +2025-08-19 10:48:04,817 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:04,818 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:04,818 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:04,818 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/rc-1-sema-build-ein-show-camper-setzt-neue-massstaebe/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0gYNfiVFof8MRF16Pp8QEt +2025-08-19 10:48:04,821 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: RC-1 SEMA Build: Ein Show-Camper setzt neue Maßstäbe - vanlifemag.de +2025-08-19 10:48:04,821 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Festival-Flair, Fachwissen und Musik – das bietet das Rahmenprogramm der CARAVAN und +2025-08-19 10:48:04,822 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.presseportal.de/pm/179965/6098434&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw2Lv2GimqzrQfgtJIY7asee (Versuch 1) +2025-08-19 10:48:04,950 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:04,950 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:04,951 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:04,951 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.presseportal.de/pm/179965/6098434&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw2Lv2GimqzrQfgtJIY7asee +2025-08-19 10:48:04,953 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Festival-Flair, Fachwissen und Musik – das bietet das Rahmenprogramm der CARAVAN und +2025-08-19 10:48:04,954 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-19 10:48:05,956 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-19 10:48:06,521 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Camping Termine 2024 +2025-08-19 10:48:06,522 - INFO - fetch_and_process_feed:187 - 📰 3 Einträge gefunden +2025-08-19 10:48:06,522 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: San Hejmo Festival 2026: Datum, Line-up, Neuheiten, Fotos - Düsseldorf Tonight +2025-08-19 10:48:06,523 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.tonight.de/freizeit/san-hejmo-festival-2026-datum-line-up-neuheiten-fotos_150121.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw1oblZYw0b618LHsaVJWsDI (Versuch 1) +2025-08-19 10:48:06,643 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:06,643 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:06,644 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:06,644 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.tonight.de/freizeit/san-hejmo-festival-2026-datum-line-up-neuheiten-fotos_150121.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw1oblZYw0b618LHsaVJWsDI +2025-08-19 10:48:06,646 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: San Hejmo Festival 2026: Datum, Line-up, Neuheiten, Fotos - Düsseldorf Tonight +2025-08-19 10:48:06,647 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Familie Ochsenknecht: Camping-Urlaub mit Jimi Blue | GALA.de +2025-08-19 10:48:06,648 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.gala.de/stars/news/familie-ochsenknecht--camping-urlaub-mit-jimi-blue-24437026.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw2sgq15V-Z-mJUEaEvTyAdQ (Versuch 1) +2025-08-19 10:48:06,763 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:06,764 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:06,764 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:06,764 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.gala.de/stars/news/familie-ochsenknecht--camping-urlaub-mit-jimi-blue-24437026.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw2sgq15V-Z-mJUEaEvTyAdQ +2025-08-19 10:48:06,767 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Familie Ochsenknecht: Camping-Urlaub mit Jimi Blue | GALA.de +2025-08-19 10:48:06,768 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Echo Open Air 2025 in Mindelheim (Westernach): Termin, Line-Up, Tickets, Bezahlung, Camping ... +2025-08-19 10:48:06,768 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.augsburger-allgemeine.de/mindelheim/echo-open-air-2025-mindelheim-westernach-am-wochenende-line-up-tickets-parken-camping-110529337&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw2QZff-JniMKd0gb3ZzaRQ0 (Versuch 1) +2025-08-19 10:48:06,890 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:06,890 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:06,891 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:06,891 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.augsburger-allgemeine.de/mindelheim/echo-open-air-2025-mindelheim-westernach-am-wochenende-line-up-tickets-parken-camping-110529337&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw2QZff-JniMKd0gb3ZzaRQ0 +2025-08-19 10:48:06,894 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Echo Open Air 2025 in Mindelheim (Westernach): Termin, Line-Up, Tickets, Bezahlung, Camping ... +2025-08-19 10:48:06,894 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-19 10:48:07,898 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-19 10:48:08,472 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert - Camping Messe 2025 +2025-08-19 10:48:08,472 - INFO - fetch_and_process_feed:187 - 📰 6 Einträge gefunden +2025-08-19 10:48:08,473 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: A40: Vollsperrung zwischen Bochum und Essen kostet Nerven - PiNCAMP Magazin +2025-08-19 10:48:08,473 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.pincamp.de/magazin/nachrichten/a40-vollsperrung-zwischen-bochum-und-essen-kostet-nerven&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1CIEQ13m8IuurSSpp6nZFO (Versuch 1) +2025-08-19 10:48:08,592 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:08,593 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:08,594 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:08,594 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.pincamp.de/magazin/nachrichten/a40-vollsperrung-zwischen-bochum-und-essen-kostet-nerven&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1CIEQ13m8IuurSSpp6nZFO +2025-08-19 10:48:08,596 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: A40: Vollsperrung zwischen Bochum und Essen kostet Nerven - PiNCAMP Magazin +2025-08-19 10:48:08,597 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gamescom 2025: Aston Martin im Zenless Zone Zero-Design - Autozeitung +2025-08-19 10:48:08,598 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.autozeitung.de/gamescom-2025-messe-highlights-fuer-autofans-209057.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0FXrDgBBR2LkRWJXcWhY_P (Versuch 1) +2025-08-19 10:48:08,743 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:08,744 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:08,744 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:08,744 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.autozeitung.de/gamescom-2025-messe-highlights-fuer-autofans-209057.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0FXrDgBBR2LkRWJXcWhY_P +2025-08-19 10:48:08,747 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Gamescom 2025: Aston Martin im Zenless Zone Zero-Design - Autozeitung +2025-08-19 10:48:08,748 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Caravan Salon und Ed Sheeran zeitgleich: Droht ein Verkehrskollaps? | Regional - BILD.de +2025-08-19 10:48:08,748 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.bild.de/regional/duesseldorf/caravan-salon-und-ed-sheeran-zeitgleich-droht-ein-verkehrskollaps-689c5654149faf081095d6cc&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1SRpJIm3W_DbR7mUVWZ4WS (Versuch 1) +2025-08-19 10:48:08,862 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:08,862 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:08,862 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:08,862 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.bild.de/regional/duesseldorf/caravan-salon-und-ed-sheeran-zeitgleich-droht-ein-verkehrskollaps-689c5654149faf081095d6cc&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1SRpJIm3W_DbR7mUVWZ4WS +2025-08-19 10:48:08,864 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Caravan Salon und Ed Sheeran zeitgleich: Droht ein Verkehrskollaps? | Regional - BILD.de +2025-08-19 10:48:08,865 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Neu bei Steam: Die gamescom 2025 wirft ihren Schatten voraus - GameStar +2025-08-19 10:48:08,865 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.gamestar.de/artikel/neu-bei-steam,3437937.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2sHEDYfSnIyZwh9_ssIU_y (Versuch 1) +2025-08-19 10:48:08,981 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:08,981 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:08,982 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:08,982 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.gamestar.de/artikel/neu-bei-steam,3437937.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2sHEDYfSnIyZwh9_ssIU_y +2025-08-19 10:48:08,985 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neu bei Steam: Die gamescom 2025 wirft ihren Schatten voraus - GameStar +2025-08-19 10:48:08,986 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Festival-Flair, Fachwissen und Musik – das bietet das Rahmenprogramm der CARAVAN und +2025-08-19 10:48:08,986 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.presseportal.de/pm/179965/6098434&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2Lv2GimqzrQfgtJIY7asee (Versuch 1) +2025-08-19 10:48:09,104 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:09,105 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:09,105 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:09,106 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.presseportal.de/pm/179965/6098434&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2Lv2GimqzrQfgtJIY7asee +2025-08-19 10:48:09,108 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Festival-Flair, Fachwissen und Musik – das bietet das Rahmenprogramm der CARAVAN und +2025-08-19 10:48:09,109 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: MEORGA MSR-Spezialmesse in Ludwigshafen - klamm.de +2025-08-19 10:48:09,110 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.klamm.de/news/meorga-msr-spezialmesse-in-ludwigshafen-4N1254481.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11VrqOODIm34SfZyc87aDJ (Versuch 1) +2025-08-19 10:48:09,230 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 10:48:09,230 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 10:48:09,231 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 10:48:09,231 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.klamm.de/news/meorga-msr-spezialmesse-in-ludwigshafen-4N1254481.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11VrqOODIm34SfZyc87aDJ +2025-08-19 10:48:09,233 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: MEORGA MSR-Spezialmesse in Ludwigshafen - klamm.de +2025-08-19 10:48:09,233 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-19 10:48:10,234 - INFO - process_articles:312 - ℹ️ Keine neuen Artikel gefunden +2025-08-19 10:48:11,323 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 10:48:11,323 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:11:25,473 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 20:11:25,474 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:15:53,507 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 20:15:53,508 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:16:08,327 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 20:16:08,328 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:16:08,333 - INFO - process_articles:268 - 🚀 Starte Artikel-Verarbeitung +2025-08-19 20:16:08,334 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:16:08,340 - INFO - load_articles:124 - ✅ 120 Artikel geladen +2025-08-19 20:16:08,340 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.camping-news.de/rss/ +2025-08-19 20:16:09,007 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Camping-News +2025-08-19 20:16:09,007 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-19 20:16:09,008 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 15 Jahre PremiumCamps +2025-08-19 20:16:09,009 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue Eriba Feeling und Novaline +2025-08-19 20:16:09,010 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Den eigenen Verbrauchszahlen auf der Spur +2025-08-19 20:16:09,010 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Abenteuer für die Kleinen, Entspannung für +die Großen +2025-08-19 20:16:09,011 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Das weltweit größte Caravaning-Erlebnis +2025-08-19 20:16:09,011 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Komfort und Flexibilität für moderne Camper +2025-08-19 20:16:09,012 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Frühjahrsaktionen vom Verein WOHNmobil für Klimaschutz +2025-08-19 20:16:09,012 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Viel los auf dem Klaukenhof +2025-08-19 20:16:09,013 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping Resort Allweglehen bietet "Wellness plus" +2025-08-19 20:16:09,013 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EU-Führerscheinreform kommt +2025-08-19 20:16:09,013 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.camping-news.de/rss/ +2025-08-19 20:16:10,018 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/news +2025-08-19 20:16:10,812 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: News bei www.promobil.de +2025-08-19 20:16:10,812 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-19 20:16:10,813 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-19 20:16:10,813 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/termine-veranstaltungen-juni-juli/ (Versuch 1) +2025-08-19 20:16:11,348 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:11,350 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:11,351 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 649 Wörter +2025-08-19 20:16:11,352 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 649 Wörter +2025-08-19 20:16:11,352 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-19 20:16:11,352 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-19 20:16:11,352 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ (Versuch 1) +2025-08-19 20:16:12,024 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:12,026 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:12,027 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1134 Wörter +2025-08-19 20:16:12,028 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1134 Wörter +2025-08-19 20:16:12,028 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-19 20:16:12,028 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-19 20:16:12,029 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/ (Versuch 1) +2025-08-19 20:16:12,619 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:12,621 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:12,622 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 874 Wörter +2025-08-19 20:16:12,622 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 874 Wörter +2025-08-19 20:16:12,623 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-19 20:16:12,623 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-19 20:16:12,623 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/ (Versuch 1) +2025-08-19 20:16:13,162 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:13,164 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:13,164 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 452 Wörter +2025-08-19 20:16:13,165 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 452 Wörter +2025-08-19 20:16:13,165 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-19 20:16:13,165 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-19 20:16:13,165 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ (Versuch 1) +2025-08-19 20:16:13,811 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:13,812 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:13,815 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1546 Wörter +2025-08-19 20:16:13,815 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1546 Wörter +2025-08-19 20:16:13,816 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-19 20:16:13,816 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-19 20:16:13,816 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/ (Versuch 1) +2025-08-19 20:16:14,585 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:14,592 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:14,592 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 136 Wörter +2025-08-19 20:16:14,593 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 136 Wörter +2025-08-19 20:16:14,594 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-19 20:16:14,594 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-19 20:16:14,594 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/top-10-clever-campen-videos-2024/ (Versuch 1) +2025-08-19 20:16:16,206 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:16,208 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:16,208 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:16,209 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 18 Paragraphen +2025-08-19 20:16:16,209 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:16,212 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-19 20:16:16,212 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-19 20:16:16,213 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-19 20:16:16,213 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/ (Versuch 1) +2025-08-19 20:16:16,824 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:16,825 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:16,828 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1870 Wörter +2025-08-19 20:16:16,828 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1870 Wörter +2025-08-19 20:16:16,828 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-19 20:16:16,829 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-19 20:16:16,829 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/ (Versuch 1) +2025-08-19 20:16:17,589 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:17,591 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:17,592 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1796 Wörter +2025-08-19 20:16:17,592 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1796 Wörter +2025-08-19 20:16:17,593 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-19 20:16:17,593 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-19 20:16:17,593 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ (Versuch 1) +2025-08-19 20:16:18,185 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:18,187 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:18,189 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 942 Wörter +2025-08-19 20:16:18,189 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 942 Wörter +2025-08-19 20:16:18,190 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-19 20:16:18,190 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-19 20:16:18,190 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/ (Versuch 1) +2025-08-19 20:16:20,607 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:20,608 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:20,609 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 416 Wörter +2025-08-19 20:16:20,610 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 416 Wörter +2025-08-19 20:16:20,610 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-19 20:16:20,610 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingbus Rocket Camper Ryzon beim Weltrekord: Jonas Deichmanns Camper für Ironman-Rekord +2025-08-19 20:16:20,611 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-19 20:16:20,611 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/ (Versuch 1) +2025-08-19 20:16:21,540 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:21,541 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:21,541 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 499 Wörter +2025-08-19 20:16:21,541 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 499 Wörter +2025-08-19 20:16:21,542 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-19 20:16:21,542 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-19 20:16:21,542 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/ (Versuch 1) +2025-08-19 20:16:22,632 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:22,634 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:22,634 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 894 Wörter +2025-08-19 20:16:22,635 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 894 Wörter +2025-08-19 20:16:22,635 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-19 20:16:22,635 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-19 20:16:22,635 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/can-kasim-dogan-interview-westfalia/ (Versuch 1) +2025-08-19 20:16:24,007 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:24,008 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:24,009 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 599 Wörter +2025-08-19 20:16:24,010 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 599 Wörter +2025-08-19 20:16:24,010 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-19 20:16:24,010 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-19 20:16:24,010 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/ (Versuch 1) +2025-08-19 20:16:25,160 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:25,162 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:25,163 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 639 Wörter +2025-08-19 20:16:25,163 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 639 Wörter +2025-08-19 20:16:25,164 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-19 20:16:25,164 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-19 20:16:25,164 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-frankfurt/ (Versuch 1) +2025-08-19 20:16:26,436 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:26,438 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:26,439 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 691 Wörter +2025-08-19 20:16:26,439 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 691 Wörter +2025-08-19 20:16:26,440 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-19 20:16:26,440 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-19 20:16:26,440 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/ (Versuch 1) +2025-08-19 20:16:28,093 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:28,094 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:28,095 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 923 Wörter +2025-08-19 20:16:28,095 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 923 Wörter +2025-08-19 20:16:28,095 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-19 20:16:28,096 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-19 20:16:28,096 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/camper-radio-radiosender-caravan-fm/ (Versuch 1) +2025-08-19 20:16:29,390 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:29,391 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:29,392 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 258 Wörter +2025-08-19 20:16:29,392 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 258 Wörter +2025-08-19 20:16:29,392 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-19 20:16:29,393 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-19 20:16:29,393 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/ (Versuch 1) +2025-08-19 20:16:30,593 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:30,594 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:30,595 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:30,595 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 8 Paragraphen +2025-08-19 20:16:30,596 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:30,599 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-19 20:16:30,599 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-19 20:16:30,599 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/news +2025-08-19 20:16:31,605 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/ratgeber +2025-08-19 20:16:32,631 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: ratgeber bei www.promobil.de +2025-08-19 20:16:32,631 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-19 20:16:32,632 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper +2025-08-19 20:16:32,633 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum perfekten Campingtag: Wo verbringen Sie den perfekten Campingurlaub? +2025-08-19 20:16:32,634 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-19 20:16:32,635 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper +2025-08-19 20:16:32,635 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Regeln auf Frankreichs Autobahnen im Pannenfall: Kein Schutz durch ADAC & Co. auf Autobahnen +2025-08-19 20:16:32,636 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht? +2025-08-19 20:16:32,644 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box +2025-08-19 20:16:32,644 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Film-Stunt mit Caravan – wie realistisch ist das?: Sexsymbol Jensen Ackles wagt Stunt auf Wohnwagen +2025-08-19 20:16:32,645 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CLEVER CAMPEN Podcast Folge 40: Gravelbikes und Camping – die beste Kombi? +2025-08-19 20:16:32,646 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Stellplatz-Radar Sommeraktion 2025: 30 Tage Stellplatz-Radar PLUS gratis testen +2025-08-19 20:16:32,647 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Digitaler Fahrzeugschein für Camper: promobil testet den digitalen Fahrzeugschein +2025-08-19 20:16:32,647 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Badezimmer beim Camping - Umfrage: Welches Bad brauchen Sie im Wohnmobil? +2025-08-19 20:16:32,648 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum Kaffeegenuss beim Camping: So kochen Sie am liebsten Ihren Kaffee +2025-08-19 20:16:32,649 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zwei Menschen, zwei Meinungen: Das Mietbad spaltet die Campingwelt +2025-08-19 20:16:32,649 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zubehör auf der größten Campingmesse kaufen: Deshalb müssen Zubehör-Shopper zum Caravan Salon +2025-08-19 20:16:32,650 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tipps für die größte Camping-Messe Deutschlands: Darum dürfen Sie den Caravan Salon nicht verpassen +2025-08-19 20:16:32,652 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Sommerhitze im Wohnmobil & Wohnwagen: Die besten Tipps gegen Hitze im Camper +2025-08-19 20:16:32,653 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dethleffs Reiselust-Prämie: Bis zu 20.000 Euro Rabatt auf Wohnmobile +2025-08-19 20:16:32,653 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue promobil-Newsletter - gratis!: Zum Frühstück die spannendsten Camping-Themen +2025-08-19 20:16:32,654 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Drittes Camping-Rekordjahr in Folge: Süd schlägt Nord – Hier wird am häufigsten gecampt +2025-08-19 20:16:32,654 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/ratgeber +2025-08-19 20:16:33,659 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-19 20:16:34,380 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach camping +2025-08-19 20:16:34,380 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-19 20:16:34,382 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern +2025-08-19 20:16:34,384 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-19 20:16:34,385 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: IFA 2025: Jackery präsentiert neue 500-Watt-Powerstation im flachen Format, Solardachziegel und DIY-Balkonkraftwerk mit integriertem Brandschutzsystem +2025-08-19 20:16:34,385 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Inklusiver Campingurlaub am Gardasee +2025-08-19 20:16:34,385 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/153661/6094377 (Versuch 1) +2025-08-19 20:16:35,040 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:35,041 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 616 Wörter +2025-08-19 20:16:35,041 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 616 Wörter +2025-08-19 20:16:35,041 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Inklusiver Campingurlaub am Gardasee +2025-08-19 20:16:35,042 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neuheiten-Feuerwerk bei vanexxt auf dem Caravan Salon Düsseldorf 2025 +2025-08-19 20:16:35,042 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-19 20:16:35,042 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/170000/6091414 (Versuch 1) +2025-08-19 20:16:35,671 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:35,671 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 191 Wörter +2025-08-19 20:16:35,672 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 191 Wörter +2025-08-19 20:16:35,672 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-19 20:16:35,673 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 50 Jahre ADAC Tourset: Vom Kartenstapel zum digitalen Reisebegleiter / Erfolgreicher Reisebegleiter / 657.000 Toursets in 2024 bestellt +2025-08-19 20:16:35,674 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: RTLZWEI: Erfolgreicher Montag mit "Bella Italia - Camping auf Deutsch" +2025-08-19 20:16:35,675 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-19 20:16:35,675 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-19 20:16:36,793 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:36,794 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-19 20:16:36,795 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-19 20:16:36,796 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: So ist man beim Camping richtig versichert +2025-08-19 20:16:36,796 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Family Spots: Diese Reiseziele begeistern Groß und Klein +2025-08-19 20:16:36,796 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/102577/6085137 (Versuch 1) +2025-08-19 20:16:38,021 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:38,022 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 1226 Wörter +2025-08-19 20:16:38,022 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1226 Wörter +2025-08-19 20:16:38,023 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Family Spots: Diese Reiseziele begeistern Groß und Klein +2025-08-19 20:16:38,023 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-19 20:16:39,028 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-19 20:16:39,558 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil +2025-08-19 20:16:39,558 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-19 20:16:39,560 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/63400/6099613 +2025-08-19 20:16:40,137 - INFO - extract_images_with_metadata:167 - 🔍 7 img-Tags gefunden +2025-08-19 20:16:40,138 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: R+V Infocenter... +2025-08-19 20:16:40,138 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.presseportal.de/pm/63400/6099613: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-19 20:16:40,139 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Akku leer: Gefahren beim Laden von E-Bikes' extrahiert +2025-08-19 20:16:40,139 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Akku leer: Gefahren beim Laden von E-Bikes +2025-08-19 20:16:40,140 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-19 20:16:40,141 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Maximale Flexibilität trifft volle Power: Intelligente Tiefenreinigung ohne Kabel mit der PURE ONE S Serie von Tineco +2025-08-19 20:16:40,142 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Urlaub mit dem Wohnmobil: Was tun bei Panne oder Unfall +2025-08-19 20:16:40,143 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-19 20:16:40,143 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/105254/6091837 (Versuch 1) +2025-08-19 20:16:40,747 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:40,749 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-19 20:16:40,749 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-19 20:16:40,749 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-19 20:16:41,370 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:41,372 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-19 20:16:41,372 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-19 20:16:41,373 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: So ist man beim Camping richtig versichert +2025-08-19 20:16:41,374 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Trotz Camper-Hype: Der Pkw ist die unangefochtene Nummer 1 für Sommerreisen +2025-08-19 20:16:41,375 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Doppelfolge am 24. Juli "Oksana & Family - Alles auf Anfang": Abwasserprobleme, Jobsuche und Tonstudiobesuch +2025-08-19 20:16:41,376 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Oksana & Family - Alles auf Anfang": Zwischen Camping-Chaos und einer schweren Entscheidung +2025-08-19 20:16:41,376 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Umfrage: Mehrheit will mehr Freiheiten für Wohnmobile und Camper +2025-08-19 20:16:41,376 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/13984/6077676 (Versuch 1) +2025-08-19 20:16:41,930 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-19 20:16:41,931 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 891 Wörter +2025-08-19 20:16:41,932 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 891 Wörter +2025-08-19 20:16:41,933 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage: Mehrheit will mehr Freiheiten für Wohnmobile und Camper +2025-08-19 20:16:41,933 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 1 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-19 20:16:42,938 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://caravan-news.de/rss/schlagzeilen.php +2025-08-19 20:16:43,694 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: CARAVAN-NEWS.de +2025-08-19 20:16:43,694 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://caravan-news.de/rss/schlagzeilen.php +2025-08-19 20:16:44,700 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-19 20:16:46,176 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Campingplatz +2025-08-19 20:16:46,176 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-19 20:16:46,176 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Winterthur: Campingplatz Schützenweiher kommt an die Urne - Tages-Anzeiger +2025-08-19 20:16:46,176 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.tagesanzeiger.ch/winterthur-campingplatz-schuetzenweiher-kommt-an-die-urne-637538306386&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0agfyAxzRqVvd3uX5bhaA- (Versuch 1) +2025-08-19 20:16:46,787 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:46,787 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:46,787 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:46,788 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.tagesanzeiger.ch/winterthur-campingplatz-schuetzenweiher-kommt-an-die-urne-637538306386&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0agfyAxzRqVvd3uX5bhaA- +2025-08-19 20:16:46,789 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.tagesanzeiger.ch/winterthur-campingplatz-schuetzenweiher-kommt-an-die-urne-637538306386&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0agfyAxzRqVvd3uX5bhaA- +2025-08-19 20:16:47,258 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 20:16:47,259 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.tagesanzeiger.ch/winterthur-campingplatz-schuetzenweiher-kommt-an-die-urne-637538306386&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0agfyAxzRqVvd3uX5bhaA- +2025-08-19 20:16:47,259 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Winterthur: Campingplatz Schützenweiher kommt an die Urne - Tages-Anzeiger' extrahiert +2025-08-19 20:16:47,259 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Winterthur: Campingplatz Schützenweiher kommt an die Urne - Tages-Anzeiger +2025-08-19 20:16:47,260 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Erste, worauf ich achte": Camping-Experte erkennt Deutsche sofort an einem Detail +2025-08-19 20:16:47,260 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.focus.de/reisen/erste-worauf-ich-achte-camping-experte-erkennt-deutsche-sofort-an-einem-detail_b0ccac54-bb2b-4d0a-be65-f76fca52e00d.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0oZHkJrCJTQ2P3DjOmaMq1 (Versuch 1) +2025-08-19 20:16:47,678 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:47,679 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:47,679 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:47,679 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.focus.de/reisen/erste-worauf-ich-achte-camping-experte-erkennt-deutsche-sofort-an-einem-detail_b0ccac54-bb2b-4d0a-be65-f76fca52e00d.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0oZHkJrCJTQ2P3DjOmaMq1 +2025-08-19 20:16:47,680 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.focus.de/reisen/erste-worauf-ich-achte-camping-experte-erkennt-deutsche-sofort-an-einem-detail_b0ccac54-bb2b-4d0a-be65-f76fca52e00d.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0oZHkJrCJTQ2P3DjOmaMq1 +2025-08-19 20:16:48,151 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 20:16:48,151 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.focus.de/reisen/erste-worauf-ich-achte-camping-experte-erkennt-deutsche-sofort-an-einem-detail_b0ccac54-bb2b-4d0a-be65-f76fca52e00d.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0oZHkJrCJTQ2P3DjOmaMq1 +2025-08-19 20:16:48,152 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Erste, worauf ich achte": Camping-Experte erkennt Deutsche sofort an einem Detail' extrahiert +2025-08-19 20:16:48,152 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Erste, worauf ich achte": Camping-Experte erkennt Deutsche sofort an einem Detail +2025-08-19 20:16:48,152 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Woran ein Campingplatz-Experte deutsche Urlauber sofort erkennt +2025-08-19 20:16:48,153 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/woran-ein-campingplatz-experte-deutsche-urlauber-sofort-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2bjSwJduCIDU44lYDuu22U (Versuch 1) +2025-08-19 20:16:48,589 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:48,590 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:48,590 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:48,591 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/woran-ein-campingplatz-experte-deutsche-urlauber-sofort-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2bjSwJduCIDU44lYDuu22U +2025-08-19 20:16:48,593 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/woran-ein-campingplatz-experte-deutsche-urlauber-sofort-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2bjSwJduCIDU44lYDuu22U +2025-08-19 20:16:49,108 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 20:16:49,108 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/woran-ein-campingplatz-experte-deutsche-urlauber-sofort-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2bjSwJduCIDU44lYDuu22U +2025-08-19 20:16:49,109 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Woran ein Campingplatz-Experte deutsche Urlauber sofort erkennt' extrahiert +2025-08-19 20:16:49,109 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Woran ein Campingplatz-Experte deutsche Urlauber sofort erkennt +2025-08-19 20:16:49,110 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: WTG-Insolvenz in Hooksiel: Investor für Campingplatz und Hallenbad gefunden +2025-08-19 20:16:49,110 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nwzonline.de/friesland/wtg-insolvenz-in-hooksiel-investor-fuer-campingplatz-und-hallenbad-gefunden_a_4,2,1744055285.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2NSatmqIKkGVEo26UyQfCS (Versuch 1) +2025-08-19 20:16:49,478 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:49,479 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:49,479 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:49,479 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.nwzonline.de/friesland/wtg-insolvenz-in-hooksiel-investor-fuer-campingplatz-und-hallenbad-gefunden_a_4,2,1744055285.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2NSatmqIKkGVEo26UyQfCS +2025-08-19 20:16:49,481 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nwzonline.de/friesland/wtg-insolvenz-in-hooksiel-investor-fuer-campingplatz-und-hallenbad-gefunden_a_4,2,1744055285.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2NSatmqIKkGVEo26UyQfCS +2025-08-19 20:16:49,957 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 20:16:49,957 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.nwzonline.de/friesland/wtg-insolvenz-in-hooksiel-investor-fuer-campingplatz-und-hallenbad-gefunden_a_4,2,1744055285.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2NSatmqIKkGVEo26UyQfCS +2025-08-19 20:16:49,958 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'WTG-Insolvenz in Hooksiel: Investor für Campingplatz und Hallenbad gefunden' extrahiert +2025-08-19 20:16:49,958 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: WTG-Insolvenz in Hooksiel: Investor für Campingplatz und Hallenbad gefunden +2025-08-19 20:16:49,959 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Nach Krisentreffen in Karlstein: Mögliche Rettung für die Dauercamper am Großwelzheimer Weißsee +2025-08-19 20:16:49,959 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.main-echo.de/region/stadt-kreis-aschaffenburg/nach-dem-krisentreffen-in-karlstein-moegliche-rettung-fuer-die-dauercamper-art-8562505&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0F7beKEClnDEQsNAUMuWIr (Versuch 1) +2025-08-19 20:16:50,397 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:50,398 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:50,398 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:50,399 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.main-echo.de/region/stadt-kreis-aschaffenburg/nach-dem-krisentreffen-in-karlstein-moegliche-rettung-fuer-die-dauercamper-art-8562505&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0F7beKEClnDEQsNAUMuWIr +2025-08-19 20:16:50,402 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.main-echo.de/region/stadt-kreis-aschaffenburg/nach-dem-krisentreffen-in-karlstein-moegliche-rettung-fuer-die-dauercamper-art-8562505&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0F7beKEClnDEQsNAUMuWIr +2025-08-19 20:16:50,852 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 20:16:50,853 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.main-echo.de/region/stadt-kreis-aschaffenburg/nach-dem-krisentreffen-in-karlstein-moegliche-rettung-fuer-die-dauercamper-art-8562505&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0F7beKEClnDEQsNAUMuWIr +2025-08-19 20:16:50,853 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Nach Krisentreffen in Karlstein: Mögliche Rettung für die Dauercamper am Großwelzheimer Weißsee' extrahiert +2025-08-19 20:16:50,853 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Nach Krisentreffen in Karlstein: Mögliche Rettung für die Dauercamper am Großwelzheimer Weißsee +2025-08-19 20:16:50,854 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Sassari: Polizei greift bei illegalem Camping zwischen Lake Baratz und Porto Ferro ein. +2025-08-19 20:16:50,854 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.unionesarda.it/de/sardinien/sassari-polizei-greift-bei-illegalem-camping-zwischen-lake-baratz-und-porto-ferro-ein-gb90frrb&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2uUKNIFkm1Rvv58CAVg2_U (Versuch 1) +2025-08-19 20:16:51,282 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:51,283 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:51,283 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:51,283 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.unionesarda.it/de/sardinien/sassari-polizei-greift-bei-illegalem-camping-zwischen-lake-baratz-und-porto-ferro-ein-gb90frrb&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2uUKNIFkm1Rvv58CAVg2_U +2025-08-19 20:16:51,287 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.unionesarda.it/de/sardinien/sassari-polizei-greift-bei-illegalem-camping-zwischen-lake-baratz-und-porto-ferro-ein-gb90frrb&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2uUKNIFkm1Rvv58CAVg2_U +2025-08-19 20:16:51,750 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 20:16:51,751 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.unionesarda.it/de/sardinien/sassari-polizei-greift-bei-illegalem-camping-zwischen-lake-baratz-und-porto-ferro-ein-gb90frrb&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2uUKNIFkm1Rvv58CAVg2_U +2025-08-19 20:16:51,751 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Sassari: Polizei greift bei illegalem Camping zwischen Lake Baratz und Porto Ferro ein.' extrahiert +2025-08-19 20:16:51,751 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Sassari: Polizei greift bei illegalem Camping zwischen Lake Baratz und Porto Ferro ein. +2025-08-19 20:16:51,752 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping am See in Brandenburg – 5 besonders schöne Plätze +2025-08-19 20:16:51,752 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.bz-berlin.de/ratgeber/camping-in-brandenburg-am-see&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw28Yp1DHAiG7pUNIJF_tLkC (Versuch 1) +2025-08-19 20:16:52,175 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:52,176 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:52,177 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:52,177 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.bz-berlin.de/ratgeber/camping-in-brandenburg-am-see&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw28Yp1DHAiG7pUNIJF_tLkC +2025-08-19 20:16:52,179 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.bz-berlin.de/ratgeber/camping-in-brandenburg-am-see&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw28Yp1DHAiG7pUNIJF_tLkC +2025-08-19 20:16:52,653 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 20:16:52,654 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.bz-berlin.de/ratgeber/camping-in-brandenburg-am-see&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw28Yp1DHAiG7pUNIJF_tLkC +2025-08-19 20:16:52,654 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Camping am See in Brandenburg – 5 besonders schöne Plätze' extrahiert +2025-08-19 20:16:52,655 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Camping am See in Brandenburg – 5 besonders schöne Plätze +2025-08-19 20:16:52,655 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Lost Place im Odenwald: Verlassener Campingplatz lockt Menschen an - Echo Online +2025-08-19 20:16:52,655 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/odenwaldkreis/oberzent-odenwaldkreis/lost-place-odenwald-verlassener-campingplatz-muellkippe-forum-oberzent-4805851&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw39nSnV29WHn7ytbY8s4wkI (Versuch 1) +2025-08-19 20:16:53,075 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:53,076 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:53,077 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:53,077 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/odenwaldkreis/oberzent-odenwaldkreis/lost-place-odenwald-verlassener-campingplatz-muellkippe-forum-oberzent-4805851&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw39nSnV29WHn7ytbY8s4wkI +2025-08-19 20:16:53,079 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/odenwaldkreis/oberzent-odenwaldkreis/lost-place-odenwald-verlassener-campingplatz-muellkippe-forum-oberzent-4805851&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw39nSnV29WHn7ytbY8s4wkI +2025-08-19 20:16:53,551 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 20:16:53,552 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/odenwaldkreis/oberzent-odenwaldkreis/lost-place-odenwald-verlassener-campingplatz-muellkippe-forum-oberzent-4805851&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw39nSnV29WHn7ytbY8s4wkI +2025-08-19 20:16:53,552 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Lost Place im Odenwald: Verlassener Campingplatz lockt Menschen an - Echo Online' extrahiert +2025-08-19 20:16:53,553 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Lost Place im Odenwald: Verlassener Campingplatz lockt Menschen an - Echo Online +2025-08-19 20:16:53,553 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Sachsens Campingplätze: Hier können Naturliebhaber Urlaub machen +2025-08-19 20:16:53,553 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.saechsische.de/sachsen/sachsens-campingplaetze-hier-koennen-naturliebhaber-urlaub-machen-LISYQBT5XRCHDEHUZUU66IKT7Y.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3LZG2TbqgyYMDOING19TpS (Versuch 1) +2025-08-19 20:16:53,982 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:53,983 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:53,983 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:53,983 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.saechsische.de/sachsen/sachsens-campingplaetze-hier-koennen-naturliebhaber-urlaub-machen-LISYQBT5XRCHDEHUZUU66IKT7Y.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3LZG2TbqgyYMDOING19TpS +2025-08-19 20:16:53,984 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.saechsische.de/sachsen/sachsens-campingplaetze-hier-koennen-naturliebhaber-urlaub-machen-LISYQBT5XRCHDEHUZUU66IKT7Y.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3LZG2TbqgyYMDOING19TpS +2025-08-19 20:16:54,450 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 20:16:54,450 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.saechsische.de/sachsen/sachsens-campingplaetze-hier-koennen-naturliebhaber-urlaub-machen-LISYQBT5XRCHDEHUZUU66IKT7Y.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3LZG2TbqgyYMDOING19TpS +2025-08-19 20:16:54,451 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Sachsens Campingplätze: Hier können Naturliebhaber Urlaub machen' extrahiert +2025-08-19 20:16:54,451 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Sachsens Campingplätze: Hier können Naturliebhaber Urlaub machen +2025-08-19 20:16:54,452 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Herford: Betrüger mit Machete auf Campingplatz verhaftet - WELT +2025-08-19 20:16:54,453 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.welt.de/regionales/duesseldorf/article118823818/Herford-Betrueger-mit-Machete-auf-Campingplatz-verhaftet.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1SrZmj-KpWRtFejPpNVBcw (Versuch 1) +2025-08-19 20:16:54,870 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:54,870 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:54,870 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:54,871 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.welt.de/regionales/duesseldorf/article118823818/Herford-Betrueger-mit-Machete-auf-Campingplatz-verhaftet.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1SrZmj-KpWRtFejPpNVBcw +2025-08-19 20:16:54,873 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.welt.de/regionales/duesseldorf/article118823818/Herford-Betrueger-mit-Machete-auf-Campingplatz-verhaftet.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1SrZmj-KpWRtFejPpNVBcw +2025-08-19 20:16:55,350 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 20:16:55,350 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.welt.de/regionales/duesseldorf/article118823818/Herford-Betrueger-mit-Machete-auf-Campingplatz-verhaftet.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1SrZmj-KpWRtFejPpNVBcw +2025-08-19 20:16:55,351 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Herford: Betrüger mit Machete auf Campingplatz verhaftet - WELT' extrahiert +2025-08-19 20:16:55,351 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Herford: Betrüger mit Machete auf Campingplatz verhaftet - WELT +2025-08-19 20:16:55,351 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Neuer Campingplatz in Niedersachsen eröffnet: Betreiber sind europaweit bekannt - HNA +2025-08-19 20:16:55,351 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.hna.de/niedersachsen/in-europa-wohlbekannt-neuer-campingplatz-in-niedersachsen-eroeffnet-betreiber-93885856.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0KfYM1g3v_ASkaG5-L4e1w (Versuch 1) +2025-08-19 20:16:55,765 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:55,765 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:55,765 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:55,765 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.hna.de/niedersachsen/in-europa-wohlbekannt-neuer-campingplatz-in-niedersachsen-eroeffnet-betreiber-93885856.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0KfYM1g3v_ASkaG5-L4e1w +2025-08-19 20:16:55,767 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.hna.de/niedersachsen/in-europa-wohlbekannt-neuer-campingplatz-in-niedersachsen-eroeffnet-betreiber-93885856.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0KfYM1g3v_ASkaG5-L4e1w +2025-08-19 20:16:56,250 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 20:16:56,250 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.hna.de/niedersachsen/in-europa-wohlbekannt-neuer-campingplatz-in-niedersachsen-eroeffnet-betreiber-93885856.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0KfYM1g3v_ASkaG5-L4e1w +2025-08-19 20:16:56,250 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Neuer Campingplatz in Niedersachsen eröffnet: Betreiber sind europaweit bekannt - HNA' extrahiert +2025-08-19 20:16:56,251 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Neuer Campingplatz in Niedersachsen eröffnet: Betreiber sind europaweit bekannt - HNA +2025-08-19 20:16:56,251 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Effizient und umweltfreundlich: Campingplatz in Erden mit neuer LED-Beleuchtung +2025-08-19 20:16:56,251 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://lokalo.de/artikel/376714/effizient-und-umweltfreundlich-campingplatz-in-erden-mit-neuer-led-beleuchtung/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2fXa6aZmE3BqkAsNbHCnwC (Versuch 1) +2025-08-19 20:16:56,667 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:56,667 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:56,668 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:56,668 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://lokalo.de/artikel/376714/effizient-und-umweltfreundlich-campingplatz-in-erden-mit-neuer-led-beleuchtung/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2fXa6aZmE3BqkAsNbHCnwC +2025-08-19 20:16:56,669 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://lokalo.de/artikel/376714/effizient-und-umweltfreundlich-campingplatz-in-erden-mit-neuer-led-beleuchtung/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2fXa6aZmE3BqkAsNbHCnwC +2025-08-19 20:16:57,156 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 20:16:57,156 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://lokalo.de/artikel/376714/effizient-und-umweltfreundlich-campingplatz-in-erden-mit-neuer-led-beleuchtung/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2fXa6aZmE3BqkAsNbHCnwC +2025-08-19 20:16:57,157 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Effizient und umweltfreundlich: Campingplatz in Erden mit neuer LED-Beleuchtung' extrahiert +2025-08-19 20:16:57,157 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Effizient und umweltfreundlich: Campingplatz in Erden mit neuer LED-Beleuchtung +2025-08-19 20:16:57,157 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hundefreundliche Campingplätze: Top 10 von Ostsee bis NRW entdecken - T-Online +2025-08-19 20:16:57,157 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.t-online.de/leben/reisen/deutschland/id_100871658/hundefreundliche-campingplaetze-top-10-von-ostsee-bis-nrw-entdecken.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2MLwYap5S4s8YXemp9_4B7 (Versuch 1) +2025-08-19 20:16:57,571 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:57,572 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:57,572 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:57,572 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.t-online.de/leben/reisen/deutschland/id_100871658/hundefreundliche-campingplaetze-top-10-von-ostsee-bis-nrw-entdecken.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2MLwYap5S4s8YXemp9_4B7 +2025-08-19 20:16:57,574 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hundefreundliche Campingplätze: Top 10 von Ostsee bis NRW entdecken - T-Online +2025-08-19 20:16:57,575 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Go's und No-Go's auf dem Husumer Campingplatz - SHZ +2025-08-19 20:16:57,575 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.shz.de/lokales/husum/artikel/gos-und-no-gos-auf-dem-husumer-campingplatz-49140857&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2QF6COS0JJi1OJck-Moqnc (Versuch 1) +2025-08-19 20:16:58,050 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:58,050 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:58,051 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:58,051 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.shz.de/lokales/husum/artikel/gos-und-no-gos-auf-dem-husumer-campingplatz-49140857&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2QF6COS0JJi1OJck-Moqnc +2025-08-19 20:16:58,054 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Go's und No-Go's auf dem Husumer Campingplatz - SHZ +2025-08-19 20:16:58,054 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Seit 60 Jahren Campingurlaub auf Usedom: Leipzigerin hat sich ihren Stammplatz in ... +2025-08-19 20:16:58,055 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.ostsee-zeitung.de/lokales/vorpommern-greifswald/usedom/seit-60-jahren-campingurlaub-auf-usedom-leipzigerin-hat-sich-ihren-stammplatz-in-ueckeritz-YWTEPQ3CHBFIDJQZLTYNTQG3DU.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw02dVQz4QETTNH0fLbVCXSy (Versuch 1) +2025-08-19 20:16:58,476 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:16:58,477 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:16:58,477 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:16:58,477 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.ostsee-zeitung.de/lokales/vorpommern-greifswald/usedom/seit-60-jahren-campingurlaub-auf-usedom-leipzigerin-hat-sich-ihren-stammplatz-in-ueckeritz-YWTEPQ3CHBFIDJQZLTYNTQG3DU.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw02dVQz4QETTNH0fLbVCXSy +2025-08-19 20:16:58,480 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.ostsee-zeitung.de/lokales/vorpommern-greifswald/usedom/seit-60-jahren-campingurlaub-auf-usedom-leipzigerin-hat-sich-ihren-stammplatz-in-ueckeritz-YWTEPQ3CHBFIDJQZLTYNTQG3DU.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw02dVQz4QETTNH0fLbVCXSy +2025-08-19 20:16:59,366 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 20:16:59,366 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.ostsee-zeitung.de/lokales/vorpommern-greifswald/usedom/seit-60-jahren-campingurlaub-auf-usedom-leipzigerin-hat-sich-ihren-stammplatz-in-ueckeritz-YWTEPQ3CHBFIDJQZLTYNTQG3DU.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw02dVQz4QETTNH0fLbVCXSy +2025-08-19 20:16:59,366 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Seit 60 Jahren Campingurlaub auf Usedom: Leipzigerin hat sich ihren Stammplatz in ...' extrahiert +2025-08-19 20:16:59,367 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Seit 60 Jahren Campingurlaub auf Usedom: Leipzigerin hat sich ihren Stammplatz in ... +2025-08-19 20:16:59,367 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping: Grenzüberschreitung! Gäste greifen zu harten Maßnahmen - moin.de +2025-08-19 20:16:59,367 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.moin.de/norddeutschland/camping-platz-nachbarn-was-tun-voll-verrueckt-plaetze-id300643691.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3yKD6zM5C0GGtXMIRQ476n (Versuch 1) +2025-08-19 20:17:00,570 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:17:00,571 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:17:00,571 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:17:00,571 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.moin.de/norddeutschland/camping-platz-nachbarn-was-tun-voll-verrueckt-plaetze-id300643691.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3yKD6zM5C0GGtXMIRQ476n +2025-08-19 20:17:00,573 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping: Grenzüberschreitung! Gäste greifen zu harten Maßnahmen - moin.de +2025-08-19 20:17:00,574 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping erobert neue Zielgruppen | Trends - Counter vor9 +2025-08-19 20:17:00,574 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.countervor9.de/trends/camping-erobert-neue-zielgruppen&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw25FhwEFlV2_J6vE622fq-G (Versuch 1) +2025-08-19 20:17:01,790 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:17:01,793 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:17:01,793 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:17:01,793 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.countervor9.de/trends/camping-erobert-neue-zielgruppen&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw25FhwEFlV2_J6vE622fq-G +2025-08-19 20:17:01,794 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping erobert neue Zielgruppen | Trends - Counter vor9 +2025-08-19 20:17:01,795 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Liveschalte - Vom DDR-Intercamping zum modernen Campingplatz Berlin | rbb - rbb24 +2025-08-19 20:17:01,795 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.rbb-online.de/der-tag/ort/schmoekwitzwerder-camping-am-krossinsee.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2DBDdZLr3yZhvUrdhKDBMZ (Versuch 1) +2025-08-19 20:17:02,584 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:17:02,585 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:17:02,585 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:17:02,586 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.rbb-online.de/der-tag/ort/schmoekwitzwerder-camping-am-krossinsee.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2DBDdZLr3yZhvUrdhKDBMZ +2025-08-19 20:17:02,587 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Liveschalte - Vom DDR-Intercamping zum modernen Campingplatz Berlin | rbb - rbb24 +2025-08-19 20:17:02,588 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Verträge laufen aus – Steht der Dauercampingplatz in Karlstein am Main vor dem Aus? +2025-08-19 20:17:02,588 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.tvmainfranken.de/mediathek/video/vertraege-laufen-aus-steht-der-dauercampingplatz-in-karlstein-am-main-vor-dem-aus/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1DnOUC_hBM-Pi_zSeQ-Agv (Versuch 1) +2025-08-19 20:17:03,181 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:17:03,181 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:17:03,181 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:17:03,181 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.tvmainfranken.de/mediathek/video/vertraege-laufen-aus-steht-der-dauercampingplatz-in-karlstein-am-main-vor-dem-aus/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1DnOUC_hBM-Pi_zSeQ-Agv +2025-08-19 20:17:03,183 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Verträge laufen aus – Steht der Dauercampingplatz in Karlstein am Main vor dem Aus? +2025-08-19 20:17:03,184 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: An Weilburger Tankstelle fliegen die Fäuste - Echo Online +2025-08-19 20:17:03,184 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/kreis-limburg-weilburg/weilburg/an-weilburger-tankstelle-fliegen-die-faeuste-4892024&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l7jUxG7664vJ69cHwv20M (Versuch 1) +2025-08-19 20:17:03,764 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:17:03,765 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:17:03,765 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:17:03,766 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/kreis-limburg-weilburg/weilburg/an-weilburger-tankstelle-fliegen-die-faeuste-4892024&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l7jUxG7664vJ69cHwv20M +2025-08-19 20:17:03,768 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: An Weilburger Tankstelle fliegen die Fäuste - Echo Online +2025-08-19 20:17:03,768 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 13 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-19 20:17:04,774 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-19 20:17:05,553 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Vanlife +2025-08-19 20:17:05,554 - INFO - fetch_and_process_feed:187 - 📰 1 Einträge gefunden +2025-08-19 20:17:05,555 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Jeep Cherokee als Camper – der einfache Weg zum autarken Urlaub - vanlifemag.de +2025-08-19 20:17:05,555 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/jeep-cherokee-als-camper/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0A-3nq90dUx96JAA9j2VYX (Versuch 1) +2025-08-19 20:17:05,970 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:17:05,971 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:17:05,971 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:17:05,971 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/jeep-cherokee-als-camper/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw0A-3nq90dUx96JAA9j2VYX +2025-08-19 20:17:05,974 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Jeep Cherokee als Camper – der einfache Weg zum autarken Urlaub - vanlifemag.de +2025-08-19 20:17:05,974 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-19 20:17:06,979 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-19 20:17:07,756 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Camping Termine 2024 +2025-08-19 20:17:07,756 - INFO - fetch_and_process_feed:187 - 📰 2 Einträge gefunden +2025-08-19 20:17:07,757 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Erste, worauf ich achte": Camping-Experte erkennt Deutsche sofort an einem Detail +2025-08-19 20:17:07,757 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.focus.de/reisen/erste-worauf-ich-achte-camping-experte-erkennt-deutsche-sofort-an-einem-detail_b0ccac54-bb2b-4d0a-be65-f76fca52e00d.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw0oZHkJrCJTQ2P3DjOmaMq1 (Versuch 1) +2025-08-19 20:17:08,246 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:17:08,246 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:17:08,246 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:17:08,246 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.focus.de/reisen/erste-worauf-ich-achte-camping-experte-erkennt-deutsche-sofort-an-einem-detail_b0ccac54-bb2b-4d0a-be65-f76fca52e00d.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw0oZHkJrCJTQ2P3DjOmaMq1 +2025-08-19 20:17:08,247 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.focus.de/reisen/erste-worauf-ich-achte-camping-experte-erkennt-deutsche-sofort-an-einem-detail_b0ccac54-bb2b-4d0a-be65-f76fca52e00d.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw0oZHkJrCJTQ2P3DjOmaMq1 +2025-08-19 20:17:08,556 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-19 20:17:08,556 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.focus.de/reisen/erste-worauf-ich-achte-camping-experte-erkennt-deutsche-sofort-an-einem-detail_b0ccac54-bb2b-4d0a-be65-f76fca52e00d.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw0oZHkJrCJTQ2P3DjOmaMq1 +2025-08-19 20:17:08,557 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Erste, worauf ich achte": Camping-Experte erkennt Deutsche sofort an einem Detail' extrahiert +2025-08-19 20:17:08,557 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Erste, worauf ich achte": Camping-Experte erkennt Deutsche sofort an einem Detail +2025-08-19 20:17:08,558 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: San Hejmo Festival 2026: Datum, Line-up, Neuheiten, Fotos - Düsseldorf Tonight +2025-08-19 20:17:08,558 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.tonight.de/freizeit/san-hejmo-festival-2026-datum-line-up-neuheiten-fotos_150121.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw1oblZYw0b618LHsaVJWsDI (Versuch 1) +2025-08-19 20:17:08,978 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:17:08,979 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:17:08,979 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:17:08,979 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.tonight.de/freizeit/san-hejmo-festival-2026-datum-line-up-neuheiten-fotos_150121.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw1oblZYw0b618LHsaVJWsDI +2025-08-19 20:17:08,982 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: San Hejmo Festival 2026: Datum, Line-up, Neuheiten, Fotos - Düsseldorf Tonight +2025-08-19 20:17:08,982 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 1 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-19 20:17:09,984 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-19 20:17:10,723 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert - Camping Messe 2025 +2025-08-19 20:17:10,723 - INFO - fetch_and_process_feed:187 - 📰 2 Einträge gefunden +2025-08-19 20:17:10,724 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: A40: Vollsperrung zwischen Bochum und Essen kostet Nerven - PiNCAMP Magazin +2025-08-19 20:17:10,724 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.pincamp.de/magazin/nachrichten/a40-vollsperrung-zwischen-bochum-und-essen-kostet-nerven&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1CIEQ13m8IuurSSpp6nZFO (Versuch 1) +2025-08-19 20:17:11,065 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:17:11,066 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:17:11,066 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:17:11,066 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.pincamp.de/magazin/nachrichten/a40-vollsperrung-zwischen-bochum-und-essen-kostet-nerven&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1CIEQ13m8IuurSSpp6nZFO +2025-08-19 20:17:11,067 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: A40: Vollsperrung zwischen Bochum und Essen kostet Nerven - PiNCAMP Magazin +2025-08-19 20:17:11,068 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gamescom 2025: Aston Martin im Zenless Zone Zero-Design - Autozeitung +2025-08-19 20:17:11,069 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.autozeitung.de/gamescom-2025-messe-highlights-fuer-autofans-209057.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0FXrDgBBR2LkRWJXcWhY_P (Versuch 1) +2025-08-19 20:17:11,647 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-19 20:17:11,647 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-19 20:17:11,647 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-19 20:17:11,647 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.autozeitung.de/gamescom-2025-messe-highlights-fuer-autofans-209057.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0FXrDgBBR2LkRWJXcWhY_P +2025-08-19 20:17:11,649 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Gamescom 2025: Aston Martin im Zenless Zone Zero-Design - Autozeitung +2025-08-19 20:17:11,649 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-19 20:17:12,683 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-19 20:17:12,683 - INFO - process_articles:310 - 🎉 Verarbeitung abgeschlossen: 15 neue Artikel in 64.35s hinzugefügt +2025-08-19 20:17:13,777 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:17:13,777 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:17:50,843 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:17:50,844 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:17:50,872 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-19 20:17:51,442 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:17:51,442 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:17:56,956 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:17:56,957 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:17:56,986 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-19 20:17:57,554 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:17:57,554 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:18:03,052 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:18:03,053 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:18:03,084 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-19 20:18:03,653 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:18:03,653 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:18:20,105 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:18:20,106 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:18:20,138 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-19 20:18:20,703 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:18:20,704 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:18:25,426 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:18:25,426 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:18:25,461 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-19 20:18:26,024 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:18:26,024 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:18:35,133 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:18:35,134 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:18:35,186 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-19 20:18:35,752 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:18:35,752 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:18:41,945 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:18:41,946 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:18:41,980 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-19 20:18:42,545 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:18:42,545 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:18:50,303 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:18:50,304 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:18:50,340 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-19 20:18:50,905 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:18:50,906 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:18:54,819 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:18:54,820 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:18:54,872 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-19 20:18:55,435 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:18:55,435 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:19:02,633 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:19:02,634 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:19:02,672 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-19 20:19:03,238 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:19:03,238 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:19:08,802 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:19:08,803 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:19:08,850 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-19 20:19:09,416 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:19:09,416 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:19:38,588 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:19:38,589 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:20:37,310 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:20:37,311 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:40:25,582 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:40:25,583 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:40:25,605 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-19 20:40:26,188 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:40:26,188 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:40:37,384 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:40:37,384 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-19 20:40:37,408 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-19 20:40:37,997 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-19 20:40:37,997 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:02:34,003 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:02:34,003 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:02:52,568 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:02:52,570 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:10:21,160 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:10:21,162 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:10:21,182 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-20 08:10:21,778 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:10:21,779 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:10:26,302 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:10:26,303 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:18:20,909 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:18:20,910 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:18:20,930 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-20 08:18:21,507 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:18:21,508 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:19:31,891 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:19:31,892 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:19:57,300 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:19:57,301 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:19:57,327 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-20 08:19:57,912 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:19:57,912 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:20:02,632 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:20:02,633 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:20:17,376 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:20:17,378 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:20:17,397 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-20 08:20:17,986 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:20:17,986 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:20:23,654 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:20:23,655 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:20:40,375 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:20:40,378 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:20:40,416 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-20 08:20:41,004 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:20:41,004 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:20:49,837 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:20:49,837 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:20:49,843 - INFO - rewrite_articles:320 - ✍️ Starte Artikel-Umschreibung +2025-08-20 08:20:49,846 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:20:49,847 - INFO - rewrite_articles:337 - ✍️ Umschreiben von: WTG-Insolvenz in Hooksiel: Investor für Campingplatz und Hallenbad gefunden +2025-08-20 08:20:54,066 - INFO - _send_single_request:1025 - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-20 08:20:56,726 - INFO - _send_single_request:1025 - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-20 08:20:56,739 - INFO - rewrite_articles:392 - ✅ Artikel erfolgreich umgeschrieben: WTG-Insolvenz in Hooksiel: Investor für Campingplatz und Hallenbad gefunden +2025-08-20 08:20:58,766 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-20 08:20:58,766 - INFO - rewrite_articles:404 - 🎉 1 Artikel erfolgreich umgeschrieben +2025-08-20 08:20:59,847 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:20:59,848 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:21:09,618 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:21:09,619 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:21:18,981 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:21:18,982 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:21:35,338 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:21:35,339 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:21:53,776 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:21:53,777 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:21:53,796 - INFO - save_articles:144 - ✅ 135 Artikel gespeichert +2025-08-20 08:21:54,371 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:21:54,372 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:26:38,905 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:26:38,906 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:26:50,782 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:26:50,783 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:26:50,789 - INFO - process_articles:268 - 🚀 Starte Artikel-Verarbeitung +2025-08-20 08:26:50,789 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:26:50,795 - INFO - load_articles:124 - ✅ 135 Artikel geladen +2025-08-20 08:26:50,795 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.camping-news.de/rss/ +2025-08-20 08:26:51,301 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Camping-News +2025-08-20 08:26:51,302 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-20 08:26:51,303 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 15 Jahre PremiumCamps +2025-08-20 08:26:51,304 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue Eriba Feeling und Novaline +2025-08-20 08:26:51,304 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Den eigenen Verbrauchszahlen auf der Spur +2025-08-20 08:26:51,305 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Abenteuer für die Kleinen, Entspannung für +die Großen +2025-08-20 08:26:51,305 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Das weltweit größte Caravaning-Erlebnis +2025-08-20 08:26:51,306 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Komfort und Flexibilität für moderne Camper +2025-08-20 08:26:51,306 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Frühjahrsaktionen vom Verein WOHNmobil für Klimaschutz +2025-08-20 08:26:51,307 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Viel los auf dem Klaukenhof +2025-08-20 08:26:51,307 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping Resort Allweglehen bietet "Wellness plus" +2025-08-20 08:26:51,308 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EU-Führerscheinreform kommt +2025-08-20 08:26:51,308 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.camping-news.de/rss/ +2025-08-20 08:26:52,313 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/news +2025-08-20 08:26:52,749 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: News bei www.promobil.de +2025-08-20 08:26:52,750 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-20 08:26:52,750 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-20 08:26:52,751 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/termine-veranstaltungen-juni-juli/ (Versuch 1) +2025-08-20 08:26:53,389 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:26:53,390 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:26:53,391 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 649 Wörter +2025-08-20 08:26:53,392 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 649 Wörter +2025-08-20 08:26:53,392 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-20 08:26:53,392 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-20 08:26:53,392 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ (Versuch 1) +2025-08-20 08:26:54,544 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:26:54,545 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:26:54,547 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1134 Wörter +2025-08-20 08:26:54,547 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1134 Wörter +2025-08-20 08:26:54,547 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-20 08:26:54,548 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-20 08:26:54,548 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/ (Versuch 1) +2025-08-20 08:26:54,882 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:26:54,883 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:26:54,885 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 874 Wörter +2025-08-20 08:26:54,885 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 874 Wörter +2025-08-20 08:26:54,885 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-20 08:26:54,885 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-20 08:26:54,886 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/ (Versuch 1) +2025-08-20 08:26:55,665 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:26:55,666 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:26:55,667 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 452 Wörter +2025-08-20 08:26:55,667 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 452 Wörter +2025-08-20 08:26:55,667 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-20 08:26:55,668 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-20 08:26:55,668 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ (Versuch 1) +2025-08-20 08:26:55,951 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:26:55,952 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:26:55,955 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1546 Wörter +2025-08-20 08:26:55,955 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1546 Wörter +2025-08-20 08:26:55,956 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-20 08:26:55,956 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-20 08:26:55,956 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/ (Versuch 1) +2025-08-20 08:26:56,539 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:26:56,540 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:26:56,541 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 136 Wörter +2025-08-20 08:26:56,541 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 136 Wörter +2025-08-20 08:26:56,541 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-20 08:26:56,542 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-20 08:26:56,542 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/top-10-clever-campen-videos-2024/ (Versuch 1) +2025-08-20 08:26:58,036 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:26:58,037 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:26:58,037 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:26:58,038 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 18 Paragraphen +2025-08-20 08:26:58,038 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:26:58,041 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-20 08:26:58,041 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-20 08:26:58,041 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-20 08:26:58,041 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/ (Versuch 1) +2025-08-20 08:26:58,726 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:26:58,728 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:26:58,730 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1870 Wörter +2025-08-20 08:26:58,731 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1870 Wörter +2025-08-20 08:26:58,731 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-20 08:26:58,732 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-20 08:26:58,732 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/ (Versuch 1) +2025-08-20 08:26:59,047 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:26:59,049 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:26:59,051 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1796 Wörter +2025-08-20 08:26:59,051 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1796 Wörter +2025-08-20 08:26:59,052 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-20 08:26:59,052 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-20 08:26:59,052 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ (Versuch 1) +2025-08-20 08:26:59,688 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:26:59,689 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:26:59,691 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 942 Wörter +2025-08-20 08:26:59,691 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 942 Wörter +2025-08-20 08:26:59,692 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-20 08:26:59,692 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-20 08:26:59,692 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/ (Versuch 1) +2025-08-20 08:27:01,058 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:01,059 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:01,060 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 416 Wörter +2025-08-20 08:27:01,061 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 416 Wörter +2025-08-20 08:27:01,061 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-20 08:27:01,061 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingbus Rocket Camper Ryzon beim Weltrekord: Jonas Deichmanns Camper für Ironman-Rekord +2025-08-20 08:27:01,061 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-20 08:27:01,062 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/ (Versuch 1) +2025-08-20 08:27:01,778 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:01,779 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:01,780 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 499 Wörter +2025-08-20 08:27:01,780 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 499 Wörter +2025-08-20 08:27:01,781 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-20 08:27:01,781 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-20 08:27:01,781 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/ (Versuch 1) +2025-08-20 08:27:03,047 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:03,048 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:03,050 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 894 Wörter +2025-08-20 08:27:03,050 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 894 Wörter +2025-08-20 08:27:03,050 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-20 08:27:03,051 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-20 08:27:03,051 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/can-kasim-dogan-interview-westfalia/ (Versuch 1) +2025-08-20 08:27:03,833 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:03,834 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:03,836 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 599 Wörter +2025-08-20 08:27:03,836 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 599 Wörter +2025-08-20 08:27:03,836 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-20 08:27:03,837 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-20 08:27:03,837 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/ (Versuch 1) +2025-08-20 08:27:04,557 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:04,558 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:04,559 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 639 Wörter +2025-08-20 08:27:04,560 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 639 Wörter +2025-08-20 08:27:04,560 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-20 08:27:04,560 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-20 08:27:04,560 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-frankfurt/ (Versuch 1) +2025-08-20 08:27:05,494 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:05,496 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:05,497 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 691 Wörter +2025-08-20 08:27:05,497 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 691 Wörter +2025-08-20 08:27:05,497 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-20 08:27:05,497 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-20 08:27:05,497 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/ (Versuch 1) +2025-08-20 08:27:06,217 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:06,219 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:06,220 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 923 Wörter +2025-08-20 08:27:06,220 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 923 Wörter +2025-08-20 08:27:06,221 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-20 08:27:06,221 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-20 08:27:06,221 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/camper-radio-radiosender-caravan-fm/ (Versuch 1) +2025-08-20 08:27:06,988 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:06,989 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:06,990 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 258 Wörter +2025-08-20 08:27:06,990 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 258 Wörter +2025-08-20 08:27:06,990 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-20 08:27:06,991 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-20 08:27:06,991 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/ (Versuch 1) +2025-08-20 08:27:08,021 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:08,022 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:08,022 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:08,023 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 8 Paragraphen +2025-08-20 08:27:08,023 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:08,026 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-20 08:27:08,027 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-20 08:27:08,027 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/news +2025-08-20 08:27:09,032 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/ratgeber +2025-08-20 08:27:09,593 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: ratgeber bei www.promobil.de +2025-08-20 08:27:09,594 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-20 08:27:09,595 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.promobil.de/weitere-ratgeber/moderne-windschutzscheiben-mehr-als-nur-glas/ +2025-08-20 08:27:09,826 - INFO - extract_images_with_metadata:167 - 🔍 13 img-Tags gefunden +2025-08-20 08:27:09,827 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Windschutzsscheibe, Aufbau... +2025-08-20 08:27:09,827 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-20 08:27:09,827 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.promobil.de/weitere-ratgeber/moderne-windschutzscheiben-mehr-als-nur-glas/: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-20 08:27:09,828 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Fahrzeugtechnik am Wohnmobil im Detail: Windschutzscheiben sind längst mehr als Glas' extrahiert +2025-08-20 08:27:09,828 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Fahrzeugtechnik am Wohnmobil im Detail: Windschutzscheiben sind längst mehr als Glas +2025-08-20 08:27:09,830 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper +2025-08-20 08:27:09,831 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum perfekten Campingtag: Wo verbringen Sie den perfekten Campingurlaub? +2025-08-20 08:27:09,832 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-20 08:27:09,834 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper +2025-08-20 08:27:09,835 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Regeln auf Frankreichs Autobahnen im Pannenfall: Kein Schutz durch ADAC & Co. auf Autobahnen +2025-08-20 08:27:09,836 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht? +2025-08-20 08:27:09,839 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box +2025-08-20 08:27:09,840 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Film-Stunt mit Caravan – wie realistisch ist das?: Sexsymbol Jensen Ackles wagt Stunt auf Wohnwagen +2025-08-20 08:27:09,842 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CLEVER CAMPEN Podcast Folge 40: Gravelbikes und Camping – die beste Kombi? +2025-08-20 08:27:09,843 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Stellplatz-Radar Sommeraktion 2025: 30 Tage Stellplatz-Radar PLUS gratis testen +2025-08-20 08:27:09,844 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Digitaler Fahrzeugschein für Camper: promobil testet den digitalen Fahrzeugschein +2025-08-20 08:27:09,846 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Badezimmer beim Camping - Umfrage: Welches Bad brauchen Sie im Wohnmobil? +2025-08-20 08:27:09,847 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum Kaffeegenuss beim Camping: So kochen Sie am liebsten Ihren Kaffee +2025-08-20 08:27:09,848 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zwei Menschen, zwei Meinungen: Das Mietbad spaltet die Campingwelt +2025-08-20 08:27:09,849 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zubehör auf der größten Campingmesse kaufen: Deshalb müssen Zubehör-Shopper zum Caravan Salon +2025-08-20 08:27:09,850 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tipps für die größte Camping-Messe Deutschlands: Darum dürfen Sie den Caravan Salon nicht verpassen +2025-08-20 08:27:09,853 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Sommerhitze im Wohnmobil & Wohnwagen: Die besten Tipps gegen Hitze im Camper +2025-08-20 08:27:09,855 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dethleffs Reiselust-Prämie: Bis zu 20.000 Euro Rabatt auf Wohnmobile +2025-08-20 08:27:09,856 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue promobil-Newsletter - gratis!: Zum Frühstück die spannendsten Camping-Themen +2025-08-20 08:27:09,856 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 1 neue Artikel aus https://www.promobil.de/rss/ratgeber +2025-08-20 08:27:10,862 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-20 08:27:11,197 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach camping +2025-08-20 08:27:11,197 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-20 08:27:11,199 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern +2025-08-20 08:27:11,200 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-20 08:27:11,201 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: IFA 2025: Jackery präsentiert neue 500-Watt-Powerstation im flachen Format, Solardachziegel und DIY-Balkonkraftwerk mit integriertem Brandschutzsystem +2025-08-20 08:27:11,202 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Inklusiver Campingurlaub am Gardasee +2025-08-20 08:27:11,202 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/153661/6094377 (Versuch 1) +2025-08-20 08:27:11,556 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:11,557 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 616 Wörter +2025-08-20 08:27:11,558 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 616 Wörter +2025-08-20 08:27:11,558 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Inklusiver Campingurlaub am Gardasee +2025-08-20 08:27:11,559 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neuheiten-Feuerwerk bei vanexxt auf dem Caravan Salon Düsseldorf 2025 +2025-08-20 08:27:11,560 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-20 08:27:11,560 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/170000/6091414 (Versuch 1) +2025-08-20 08:27:11,989 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:11,989 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 191 Wörter +2025-08-20 08:27:11,990 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 191 Wörter +2025-08-20 08:27:11,990 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-20 08:27:11,992 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 50 Jahre ADAC Tourset: Vom Kartenstapel zum digitalen Reisebegleiter / Erfolgreicher Reisebegleiter / 657.000 Toursets in 2024 bestellt +2025-08-20 08:27:11,993 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: RTLZWEI: Erfolgreicher Montag mit "Bella Italia - Camping auf Deutsch" +2025-08-20 08:27:11,993 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-20 08:27:11,993 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-20 08:27:12,353 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:12,354 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-20 08:27:12,355 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-20 08:27:12,356 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: So ist man beim Camping richtig versichert +2025-08-20 08:27:12,356 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Family Spots: Diese Reiseziele begeistern Groß und Klein +2025-08-20 08:27:12,356 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/102577/6085137 (Versuch 1) +2025-08-20 08:27:12,781 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:12,783 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 1226 Wörter +2025-08-20 08:27:12,783 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1226 Wörter +2025-08-20 08:27:12,784 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Family Spots: Diese Reiseziele begeistern Groß und Klein +2025-08-20 08:27:12,784 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-20 08:27:13,789 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-20 08:27:14,088 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil +2025-08-20 08:27:14,088 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-20 08:27:14,090 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Akku leer: Gefahren beim Laden von E-Bikes +2025-08-20 08:27:14,091 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-20 08:27:14,093 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Maximale Flexibilität trifft volle Power: Intelligente Tiefenreinigung ohne Kabel mit der PURE ONE S Serie von Tineco +2025-08-20 08:27:14,094 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Urlaub mit dem Wohnmobil: Was tun bei Panne oder Unfall +2025-08-20 08:27:14,095 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-20 08:27:14,095 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/105254/6091837 (Versuch 1) +2025-08-20 08:27:14,416 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:14,418 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-20 08:27:14,419 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-20 08:27:14,419 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-20 08:27:14,801 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:14,802 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-20 08:27:14,802 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-20 08:27:14,803 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: So ist man beim Camping richtig versichert +2025-08-20 08:27:14,804 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Trotz Camper-Hype: Der Pkw ist die unangefochtene Nummer 1 für Sommerreisen +2025-08-20 08:27:14,805 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Doppelfolge am 24. Juli "Oksana & Family - Alles auf Anfang": Abwasserprobleme, Jobsuche und Tonstudiobesuch +2025-08-20 08:27:14,807 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Oksana & Family - Alles auf Anfang": Zwischen Camping-Chaos und einer schweren Entscheidung +2025-08-20 08:27:14,807 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Umfrage: Mehrheit will mehr Freiheiten für Wohnmobile und Camper +2025-08-20 08:27:14,807 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/13984/6077676 (Versuch 1) +2025-08-20 08:27:15,183 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-20 08:27:15,185 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 891 Wörter +2025-08-20 08:27:15,185 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 891 Wörter +2025-08-20 08:27:15,186 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage: Mehrheit will mehr Freiheiten für Wohnmobile und Camper +2025-08-20 08:27:15,186 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-20 08:27:16,192 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://caravan-news.de/rss/schlagzeilen.php +2025-08-20 08:27:16,581 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: CARAVAN-NEWS.de +2025-08-20 08:27:16,581 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://caravan-news.de/rss/schlagzeilen.php +2025-08-20 08:27:17,582 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-20 08:27:18,188 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Campingplatz +2025-08-20 08:27:18,189 - INFO - fetch_and_process_feed:187 - 📰 18 Einträge gefunden +2025-08-20 08:27:18,189 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Campingplatz Arendsee: Handlungsbedarf bei Dauercampern - AZ-Online +2025-08-20 08:27:18,189 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.az-online.de/altmark/arendsee/campingplatz-arendsee-handlungsbedarf-bei-dauercampern-93891117.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3pMfHlZ-X_c1tydcMGsUKz (Versuch 1) +2025-08-20 08:27:18,446 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:18,447 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:18,447 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:18,447 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.az-online.de/altmark/arendsee/campingplatz-arendsee-handlungsbedarf-bei-dauercampern-93891117.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3pMfHlZ-X_c1tydcMGsUKz +2025-08-20 08:27:18,450 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.az-online.de/altmark/arendsee/campingplatz-arendsee-handlungsbedarf-bei-dauercampern-93891117.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3pMfHlZ-X_c1tydcMGsUKz +2025-08-20 08:27:18,647 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-20 08:27:18,648 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.az-online.de/altmark/arendsee/campingplatz-arendsee-handlungsbedarf-bei-dauercampern-93891117.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3pMfHlZ-X_c1tydcMGsUKz +2025-08-20 08:27:18,648 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Campingplatz Arendsee: Handlungsbedarf bei Dauercampern - AZ-Online' extrahiert +2025-08-20 08:27:18,648 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Campingplatz Arendsee: Handlungsbedarf bei Dauercampern - AZ-Online +2025-08-20 08:27:18,649 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: „Tante Henni“: Haslohs idyllischer Mini-Campingplatz an der A7 - Hamburger Abendblatt +2025-08-20 08:27:18,649 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.abendblatt.de/schleswig-holstein/norderstedt/article409752359/tante-henni-haslohs-idyllischer-mini-campingplatz-an-der-a7.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l1jr7kdJVDA3nrTWt9vaE (Versuch 1) +2025-08-20 08:27:18,843 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:18,844 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:18,844 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:18,845 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.abendblatt.de/schleswig-holstein/norderstedt/article409752359/tante-henni-haslohs-idyllischer-mini-campingplatz-an-der-a7.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l1jr7kdJVDA3nrTWt9vaE +2025-08-20 08:27:18,847 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.abendblatt.de/schleswig-holstein/norderstedt/article409752359/tante-henni-haslohs-idyllischer-mini-campingplatz-an-der-a7.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l1jr7kdJVDA3nrTWt9vaE +2025-08-20 08:27:19,072 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-20 08:27:19,072 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.abendblatt.de/schleswig-holstein/norderstedt/article409752359/tante-henni-haslohs-idyllischer-mini-campingplatz-an-der-a7.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l1jr7kdJVDA3nrTWt9vaE +2025-08-20 08:27:19,073 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für '„Tante Henni“: Haslohs idyllischer Mini-Campingplatz an der A7 - Hamburger Abendblatt' extrahiert +2025-08-20 08:27:19,073 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: „Tante Henni“: Haslohs idyllischer Mini-Campingplatz an der A7 - Hamburger Abendblatt +2025-08-20 08:27:19,074 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Toter 13-Jähriger: Jetzt liegt das Obduktionsergebnis vor - MSN +2025-08-20 08:27:19,074 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/toter-13-j%25C3%25A4hriger-jetzt-liegt-das-obduktionsergebnis-vor/ar-AA1KIBko&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3WZAfu7i39_TT7qgG7OXgi (Versuch 1) +2025-08-20 08:27:19,269 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:19,269 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:19,270 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:19,270 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/toter-13-j%25C3%25A4hriger-jetzt-liegt-das-obduktionsergebnis-vor/ar-AA1KIBko&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3WZAfu7i39_TT7qgG7OXgi +2025-08-20 08:27:19,273 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/toter-13-j%25C3%25A4hriger-jetzt-liegt-das-obduktionsergebnis-vor/ar-AA1KIBko&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3WZAfu7i39_TT7qgG7OXgi +2025-08-20 08:27:19,469 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-20 08:27:19,470 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/toter-13-j%25C3%25A4hriger-jetzt-liegt-das-obduktionsergebnis-vor/ar-AA1KIBko&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3WZAfu7i39_TT7qgG7OXgi +2025-08-20 08:27:19,470 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Toter 13-Jähriger: Jetzt liegt das Obduktionsergebnis vor - MSN' extrahiert +2025-08-20 08:27:19,470 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Toter 13-Jähriger: Jetzt liegt das Obduktionsergebnis vor - MSN +2025-08-20 08:27:19,470 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Woran ein Campingplatz-Experte deutsche Urlauber direkt erkennt +2025-08-20 08:27:19,471 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/woran-ein-campingplatz-experte-deutsche-urlauber-direkt-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3jJhVNzmOoLWdIEPL4NLUD (Versuch 1) +2025-08-20 08:27:19,667 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:19,667 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:19,667 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:19,668 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/woran-ein-campingplatz-experte-deutsche-urlauber-direkt-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3jJhVNzmOoLWdIEPL4NLUD +2025-08-20 08:27:19,669 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/woran-ein-campingplatz-experte-deutsche-urlauber-direkt-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3jJhVNzmOoLWdIEPL4NLUD +2025-08-20 08:27:19,872 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-20 08:27:19,873 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/woran-ein-campingplatz-experte-deutsche-urlauber-direkt-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3jJhVNzmOoLWdIEPL4NLUD +2025-08-20 08:27:19,873 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Woran ein Campingplatz-Experte deutsche Urlauber direkt erkennt' extrahiert +2025-08-20 08:27:19,874 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Woran ein Campingplatz-Experte deutsche Urlauber direkt erkennt +2025-08-20 08:27:19,874 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Winterthur: Campingplatz Schützenweiher kommt an die Urne - Tages-Anzeiger +2025-08-20 08:27:19,874 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.tagesanzeiger.ch/winterthur-campingplatz-schuetzenweiher-kommt-an-die-urne-637538306386&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0agfyAxzRqVvd3uX5bhaA- (Versuch 1) +2025-08-20 08:27:20,068 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:20,069 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:20,069 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:20,069 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.tagesanzeiger.ch/winterthur-campingplatz-schuetzenweiher-kommt-an-die-urne-637538306386&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0agfyAxzRqVvd3uX5bhaA- +2025-08-20 08:27:20,072 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Winterthur: Campingplatz Schützenweiher kommt an die Urne - Tages-Anzeiger +2025-08-20 08:27:20,072 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Erste, worauf ich achte": Camping-Experte erkennt Deutsche sofort an einem Detail +2025-08-20 08:27:20,073 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.focus.de/reisen/erste-worauf-ich-achte-camping-experte-erkennt-deutsche-sofort-an-einem-detail_b0ccac54-bb2b-4d0a-be65-f76fca52e00d.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0oZHkJrCJTQ2P3DjOmaMq1 (Versuch 1) +2025-08-20 08:27:20,272 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:20,272 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:20,273 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:20,273 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.focus.de/reisen/erste-worauf-ich-achte-camping-experte-erkennt-deutsche-sofort-an-einem-detail_b0ccac54-bb2b-4d0a-be65-f76fca52e00d.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0oZHkJrCJTQ2P3DjOmaMq1 +2025-08-20 08:27:20,276 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Erste, worauf ich achte": Camping-Experte erkennt Deutsche sofort an einem Detail +2025-08-20 08:27:20,276 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Woran ein Campingplatz-Experte deutsche Urlauber sofort erkennt +2025-08-20 08:27:20,277 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/woran-ein-campingplatz-experte-deutsche-urlauber-sofort-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2bjSwJduCIDU44lYDuu22U (Versuch 1) +2025-08-20 08:27:20,478 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:20,479 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:20,479 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:20,480 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/deutschland/woran-ein-campingplatz-experte-deutsche-urlauber-sofort-erkennt-zr-93886767.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2bjSwJduCIDU44lYDuu22U +2025-08-20 08:27:20,482 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Woran ein Campingplatz-Experte deutsche Urlauber sofort erkennt +2025-08-20 08:27:20,482 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: WTG-Insolvenz in Hooksiel: Investor für Campingplatz und Hallenbad gefunden +2025-08-20 08:27:20,483 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nwzonline.de/friesland/wtg-insolvenz-in-hooksiel-investor-fuer-campingplatz-und-hallenbad-gefunden_a_4,2,1744055285.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2NSatmqIKkGVEo26UyQfCS (Versuch 1) +2025-08-20 08:27:20,672 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:20,672 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:20,673 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:20,673 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.nwzonline.de/friesland/wtg-insolvenz-in-hooksiel-investor-fuer-campingplatz-und-hallenbad-gefunden_a_4,2,1744055285.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2NSatmqIKkGVEo26UyQfCS +2025-08-20 08:27:20,675 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: WTG-Insolvenz in Hooksiel: Investor für Campingplatz und Hallenbad gefunden +2025-08-20 08:27:20,676 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Nach Krisentreffen in Karlstein: Mögliche Rettung für die Dauercamper am Großwelzheimer Weißsee +2025-08-20 08:27:20,676 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.main-echo.de/region/stadt-kreis-aschaffenburg/nach-dem-krisentreffen-in-karlstein-moegliche-rettung-fuer-die-dauercamper-art-8562505&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0F7beKEClnDEQsNAUMuWIr (Versuch 1) +2025-08-20 08:27:20,876 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:20,877 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:20,877 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:20,878 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.main-echo.de/region/stadt-kreis-aschaffenburg/nach-dem-krisentreffen-in-karlstein-moegliche-rettung-fuer-die-dauercamper-art-8562505&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0F7beKEClnDEQsNAUMuWIr +2025-08-20 08:27:20,881 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Nach Krisentreffen in Karlstein: Mögliche Rettung für die Dauercamper am Großwelzheimer Weißsee +2025-08-20 08:27:20,882 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Sassari: Polizei greift bei illegalem Camping zwischen Lake Baratz und Porto Ferro ein. +2025-08-20 08:27:20,882 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.unionesarda.it/de/sardinien/sassari-polizei-greift-bei-illegalem-camping-zwischen-lake-baratz-und-porto-ferro-ein-gb90frrb&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2uUKNIFkm1Rvv58CAVg2_U (Versuch 1) +2025-08-20 08:27:21,098 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:21,099 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:21,099 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:21,099 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.unionesarda.it/de/sardinien/sassari-polizei-greift-bei-illegalem-camping-zwischen-lake-baratz-und-porto-ferro-ein-gb90frrb&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2uUKNIFkm1Rvv58CAVg2_U +2025-08-20 08:27:21,102 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Sassari: Polizei greift bei illegalem Camping zwischen Lake Baratz und Porto Ferro ein. +2025-08-20 08:27:21,103 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping am See in Brandenburg – 5 besonders schöne Plätze +2025-08-20 08:27:21,103 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.bz-berlin.de/ratgeber/camping-in-brandenburg-am-see&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw28Yp1DHAiG7pUNIJF_tLkC (Versuch 1) +2025-08-20 08:27:21,312 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:21,313 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:21,313 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:21,313 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.bz-berlin.de/ratgeber/camping-in-brandenburg-am-see&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw28Yp1DHAiG7pUNIJF_tLkC +2025-08-20 08:27:21,316 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping am See in Brandenburg – 5 besonders schöne Plätze +2025-08-20 08:27:21,317 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Lost Place im Odenwald: Verlassener Campingplatz lockt Menschen an - Echo Online +2025-08-20 08:27:21,317 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/odenwaldkreis/oberzent-odenwaldkreis/lost-place-odenwald-verlassener-campingplatz-muellkippe-forum-oberzent-4805851&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw39nSnV29WHn7ytbY8s4wkI (Versuch 1) +2025-08-20 08:27:21,543 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:21,544 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:21,544 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:21,544 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.echo-online.de/lokales/odenwaldkreis/oberzent-odenwaldkreis/lost-place-odenwald-verlassener-campingplatz-muellkippe-forum-oberzent-4805851&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw39nSnV29WHn7ytbY8s4wkI +2025-08-20 08:27:21,547 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Lost Place im Odenwald: Verlassener Campingplatz lockt Menschen an - Echo Online +2025-08-20 08:27:21,548 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Sachsens Campingplätze: Hier können Naturliebhaber Urlaub machen +2025-08-20 08:27:21,548 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.saechsische.de/sachsen/sachsens-campingplaetze-hier-koennen-naturliebhaber-urlaub-machen-LISYQBT5XRCHDEHUZUU66IKT7Y.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3LZG2TbqgyYMDOING19TpS (Versuch 1) +2025-08-20 08:27:22,107 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:22,107 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:22,108 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:22,108 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.saechsische.de/sachsen/sachsens-campingplaetze-hier-koennen-naturliebhaber-urlaub-machen-LISYQBT5XRCHDEHUZUU66IKT7Y.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3LZG2TbqgyYMDOING19TpS +2025-08-20 08:27:22,110 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Sachsens Campingplätze: Hier können Naturliebhaber Urlaub machen +2025-08-20 08:27:22,112 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Herford: Betrüger mit Machete auf Campingplatz verhaftet - WELT +2025-08-20 08:27:22,112 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.welt.de/regionales/duesseldorf/article118823818/Herford-Betrueger-mit-Machete-auf-Campingplatz-verhaftet.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1SrZmj-KpWRtFejPpNVBcw (Versuch 1) +2025-08-20 08:27:22,773 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:22,773 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:22,774 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:22,774 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.welt.de/regionales/duesseldorf/article118823818/Herford-Betrueger-mit-Machete-auf-Campingplatz-verhaftet.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1SrZmj-KpWRtFejPpNVBcw +2025-08-20 08:27:22,776 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Herford: Betrüger mit Machete auf Campingplatz verhaftet - WELT +2025-08-20 08:27:22,777 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Neuer Campingplatz in Niedersachsen eröffnet: Betreiber sind europaweit bekannt - HNA +2025-08-20 08:27:22,777 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.hna.de/niedersachsen/in-europa-wohlbekannt-neuer-campingplatz-in-niedersachsen-eroeffnet-betreiber-93885856.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0KfYM1g3v_ASkaG5-L4e1w (Versuch 1) +2025-08-20 08:27:23,147 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:23,147 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:23,148 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:23,148 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.hna.de/niedersachsen/in-europa-wohlbekannt-neuer-campingplatz-in-niedersachsen-eroeffnet-betreiber-93885856.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0KfYM1g3v_ASkaG5-L4e1w +2025-08-20 08:27:23,150 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neuer Campingplatz in Niedersachsen eröffnet: Betreiber sind europaweit bekannt - HNA +2025-08-20 08:27:23,151 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Effizient und umweltfreundlich: Campingplatz in Erden mit neuer LED-Beleuchtung +2025-08-20 08:27:23,151 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://lokalo.de/artikel/376714/effizient-und-umweltfreundlich-campingplatz-in-erden-mit-neuer-led-beleuchtung/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2fXa6aZmE3BqkAsNbHCnwC (Versuch 1) +2025-08-20 08:27:23,567 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:23,567 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:23,568 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:23,568 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://lokalo.de/artikel/376714/effizient-und-umweltfreundlich-campingplatz-in-erden-mit-neuer-led-beleuchtung/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2fXa6aZmE3BqkAsNbHCnwC +2025-08-20 08:27:23,571 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Effizient und umweltfreundlich: Campingplatz in Erden mit neuer LED-Beleuchtung +2025-08-20 08:27:23,571 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hundefreundliche Campingplätze: Top 10 von Ostsee bis NRW entdecken - T-Online +2025-08-20 08:27:23,571 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.t-online.de/leben/reisen/deutschland/id_100871658/hundefreundliche-campingplaetze-top-10-von-ostsee-bis-nrw-entdecken.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2MLwYap5S4s8YXemp9_4B7 (Versuch 1) +2025-08-20 08:27:23,952 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:23,953 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:23,953 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:23,953 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.t-online.de/leben/reisen/deutschland/id_100871658/hundefreundliche-campingplaetze-top-10-von-ostsee-bis-nrw-entdecken.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2MLwYap5S4s8YXemp9_4B7 +2025-08-20 08:27:23,955 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hundefreundliche Campingplätze: Top 10 von Ostsee bis NRW entdecken - T-Online +2025-08-20 08:27:23,956 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Seit 60 Jahren Campingurlaub auf Usedom: Leipzigerin hat sich ihren Stammplatz in ... +2025-08-20 08:27:23,956 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.ostsee-zeitung.de/lokales/vorpommern-greifswald/usedom/seit-60-jahren-campingurlaub-auf-usedom-leipzigerin-hat-sich-ihren-stammplatz-in-ueckeritz-YWTEPQ3CHBFIDJQZLTYNTQG3DU.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw02dVQz4QETTNH0fLbVCXSy (Versuch 1) +2025-08-20 08:27:24,373 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:24,374 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:24,374 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:24,374 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.ostsee-zeitung.de/lokales/vorpommern-greifswald/usedom/seit-60-jahren-campingurlaub-auf-usedom-leipzigerin-hat-sich-ihren-stammplatz-in-ueckeritz-YWTEPQ3CHBFIDJQZLTYNTQG3DU.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw02dVQz4QETTNH0fLbVCXSy +2025-08-20 08:27:24,377 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Seit 60 Jahren Campingurlaub auf Usedom: Leipzigerin hat sich ihren Stammplatz in ... +2025-08-20 08:27:24,378 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 4 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-20 08:27:25,380 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-20 08:27:26,033 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Vanlife +2025-08-20 08:27:26,033 - INFO - fetch_and_process_feed:187 - 📰 3 Einträge gefunden +2025-08-20 08:27:26,033 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: PicOli Light 2.0 im Praxistest: Vanlife-Grillaufsatz im Härtetest - Vanlifemag +2025-08-20 08:27:26,033 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/picoli-light-2-0-im-praxistest-vanlife-grillaufsatz-im-haertetest/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw1_sGi-W7VUoJmclmaolF5T (Versuch 1) +2025-08-20 08:27:26,687 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:26,688 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:26,688 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:26,688 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/picoli-light-2-0-im-praxistest-vanlife-grillaufsatz-im-haertetest/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw1_sGi-W7VUoJmclmaolF5T +2025-08-20 08:27:26,691 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/picoli-light-2-0-im-praxistest-vanlife-grillaufsatz-im-haertetest/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw1_sGi-W7VUoJmclmaolF5T +2025-08-20 08:27:27,435 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-20 08:27:27,435 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/picoli-light-2-0-im-praxistest-vanlife-grillaufsatz-im-haertetest/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw1_sGi-W7VUoJmclmaolF5T +2025-08-20 08:27:27,436 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'PicOli Light 2.0 im Praxistest: Vanlife-Grillaufsatz im Härtetest - Vanlifemag' extrahiert +2025-08-20 08:27:27,436 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: PicOli Light 2.0 im Praxistest: Vanlife-Grillaufsatz im Härtetest - Vanlifemag +2025-08-20 08:27:27,437 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Einhell TE-COL 18/2 Li Kühlbox im Vanlife-Praxistest - vanlifemag.de +2025-08-20 08:27:27,437 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/einhell-te-col-18-2-li-kuehlbox-im-vanlife-praxistest/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw3Pcz_ZggLAFD6QGjl_LVMd (Versuch 1) +2025-08-20 08:27:28,117 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:28,117 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:28,118 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:28,118 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/einhell-te-col-18-2-li-kuehlbox-im-vanlife-praxistest/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw3Pcz_ZggLAFD6QGjl_LVMd +2025-08-20 08:27:28,119 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/einhell-te-col-18-2-li-kuehlbox-im-vanlife-praxistest/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw3Pcz_ZggLAFD6QGjl_LVMd +2025-08-20 08:27:28,646 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-20 08:27:28,647 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/einhell-te-col-18-2-li-kuehlbox-im-vanlife-praxistest/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw3Pcz_ZggLAFD6QGjl_LVMd +2025-08-20 08:27:28,647 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Einhell TE-COL 18/2 Li Kühlbox im Vanlife-Praxistest - vanlifemag.de' extrahiert +2025-08-20 08:27:28,648 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Einhell TE-COL 18/2 Li Kühlbox im Vanlife-Praxistest - vanlifemag.de +2025-08-20 08:27:28,649 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Toyota Hilux mit Eigenbau-Wohnkabine - vanlifemag.de +2025-08-20 08:27:28,649 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/toyota-hilux-mit-eigenbau-wohnkabine/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw3EAfLd1L-OC7rE84KQDRCE (Versuch 1) +2025-08-20 08:27:28,992 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:28,992 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:28,993 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:28,993 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/toyota-hilux-mit-eigenbau-wohnkabine/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw3EAfLd1L-OC7rE84KQDRCE +2025-08-20 08:27:28,994 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/toyota-hilux-mit-eigenbau-wohnkabine/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw3EAfLd1L-OC7rE84KQDRCE +2025-08-20 08:27:29,326 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-20 08:27:29,326 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/toyota-hilux-mit-eigenbau-wohnkabine/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw3EAfLd1L-OC7rE84KQDRCE +2025-08-20 08:27:29,327 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Toyota Hilux mit Eigenbau-Wohnkabine - vanlifemag.de' extrahiert +2025-08-20 08:27:29,327 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Toyota Hilux mit Eigenbau-Wohnkabine - vanlifemag.de +2025-08-20 08:27:29,327 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 3 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-20 08:27:30,331 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-20 08:27:30,864 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Camping Termine 2024 +2025-08-20 08:27:30,865 - INFO - fetch_and_process_feed:187 - 📰 1 Einträge gefunden +2025-08-20 08:27:30,865 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Erste, worauf ich achte": Camping-Experte erkennt Deutsche sofort an einem Detail +2025-08-20 08:27:30,866 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.focus.de/reisen/erste-worauf-ich-achte-camping-experte-erkennt-deutsche-sofort-an-einem-detail_b0ccac54-bb2b-4d0a-be65-f76fca52e00d.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw0oZHkJrCJTQ2P3DjOmaMq1 (Versuch 1) +2025-08-20 08:27:31,072 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:31,072 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:31,072 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:31,073 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.focus.de/reisen/erste-worauf-ich-achte-camping-experte-erkennt-deutsche-sofort-an-einem-detail_b0ccac54-bb2b-4d0a-be65-f76fca52e00d.html&ct=ga&cd=CAIyGTU5MzhlYmNkNDkzNWFiYWI6ZGU6ZGU6REU&usg=AOvVaw0oZHkJrCJTQ2P3DjOmaMq1 +2025-08-20 08:27:31,078 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Erste, worauf ich achte": Camping-Experte erkennt Deutsche sofort an einem Detail +2025-08-20 08:27:31,080 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-20 08:27:32,085 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-20 08:27:32,576 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert - Camping Messe 2025 +2025-08-20 08:27:32,576 - INFO - fetch_and_process_feed:187 - 📰 5 Einträge gefunden +2025-08-20 08:27:32,577 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Opel Corsa GSE Vision (2025): Elektro-Studie auf Lambo-Niveau - Autozeitung +2025-08-20 08:27:32,577 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.autozeitung.de/opel-corsa-gse-vision-gran-turismo-2025-elektro-studie-209130.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1HzJt6GJ0DkRsbYPmlqUee (Versuch 1) +2025-08-20 08:27:32,816 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:32,817 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:32,817 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:32,817 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.autozeitung.de/opel-corsa-gse-vision-gran-turismo-2025-elektro-studie-209130.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1HzJt6GJ0DkRsbYPmlqUee +2025-08-20 08:27:32,820 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.autozeitung.de/opel-corsa-gse-vision-gran-turismo-2025-elektro-studie-209130.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1HzJt6GJ0DkRsbYPmlqUee +2025-08-20 08:27:33,052 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-20 08:27:33,052 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.autozeitung.de/opel-corsa-gse-vision-gran-turismo-2025-elektro-studie-209130.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1HzJt6GJ0DkRsbYPmlqUee +2025-08-20 08:27:33,053 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Opel Corsa GSE Vision (2025): Elektro-Studie auf Lambo-Niveau - Autozeitung' extrahiert +2025-08-20 08:27:33,053 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Opel Corsa GSE Vision (2025): Elektro-Studie auf Lambo-Niveau - Autozeitung +2025-08-20 08:27:33,053 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: IFA 2025: Jackery mit Solarneuheiten - Presseportal fair-NEWS +2025-08-20 08:27:33,053 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fair-news.de/3797899/ifa-2025-jackery-mit-solarneuheiten&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0dSlwjcVA83vgTV2l9TZ5- (Versuch 1) +2025-08-20 08:27:33,266 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:33,267 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:33,267 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:33,268 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fair-news.de/3797899/ifa-2025-jackery-mit-solarneuheiten&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0dSlwjcVA83vgTV2l9TZ5- +2025-08-20 08:27:33,270 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fair-news.de/3797899/ifa-2025-jackery-mit-solarneuheiten&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0dSlwjcVA83vgTV2l9TZ5- +2025-08-20 08:27:33,484 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-20 08:27:33,485 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.fair-news.de/3797899/ifa-2025-jackery-mit-solarneuheiten&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0dSlwjcVA83vgTV2l9TZ5- +2025-08-20 08:27:33,485 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'IFA 2025: Jackery mit Solarneuheiten - Presseportal fair-NEWS' extrahiert +2025-08-20 08:27:33,486 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: IFA 2025: Jackery mit Solarneuheiten - Presseportal fair-NEWS +2025-08-20 08:27:33,486 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gamescom 2025 in Köln: Harte Zeiten für die Spaßbranche - DER SPIEGEL +2025-08-20 08:27:33,487 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.spiegel.de/netzwelt/games/gamescom-2025-in-koeln-harte-zeiten-fuer-die-spassbranche-a-8c9bf6ff-7c79-4b41-a258-a8b0fe60c4f7&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3WHPfdQA9_GLb7dunmnB1a (Versuch 1) +2025-08-20 08:27:33,705 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:33,706 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:33,706 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:33,706 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.spiegel.de/netzwelt/games/gamescom-2025-in-koeln-harte-zeiten-fuer-die-spassbranche-a-8c9bf6ff-7c79-4b41-a258-a8b0fe60c4f7&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3WHPfdQA9_GLb7dunmnB1a +2025-08-20 08:27:33,709 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.spiegel.de/netzwelt/games/gamescom-2025-in-koeln-harte-zeiten-fuer-die-spassbranche-a-8c9bf6ff-7c79-4b41-a258-a8b0fe60c4f7&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3WHPfdQA9_GLb7dunmnB1a +2025-08-20 08:27:33,946 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-20 08:27:33,946 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.spiegel.de/netzwelt/games/gamescom-2025-in-koeln-harte-zeiten-fuer-die-spassbranche-a-8c9bf6ff-7c79-4b41-a258-a8b0fe60c4f7&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3WHPfdQA9_GLb7dunmnB1a +2025-08-20 08:27:33,947 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Gamescom 2025 in Köln: Harte Zeiten für die Spaßbranche - DER SPIEGEL' extrahiert +2025-08-20 08:27:33,947 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Gamescom 2025 in Köln: Harte Zeiten für die Spaßbranche - DER SPIEGEL +2025-08-20 08:27:33,948 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Videospiel-Messe in Köln: Gamescom 2025 – Parkplätze, Toiletten, Verpflegung +2025-08-20 08:27:33,948 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://rp-online.de/digitales/games/gamescom/videospiel-messe-in-koeln-gamescom-2025-parkplaetze-toiletten-verpflegung-v1_aid-24360691&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0gvygeAFwk9oOITrE1LeGY (Versuch 1) +2025-08-20 08:27:34,183 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:34,183 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:34,184 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:34,184 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://rp-online.de/digitales/games/gamescom/videospiel-messe-in-koeln-gamescom-2025-parkplaetze-toiletten-verpflegung-v1_aid-24360691&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0gvygeAFwk9oOITrE1LeGY +2025-08-20 08:27:34,187 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://rp-online.de/digitales/games/gamescom/videospiel-messe-in-koeln-gamescom-2025-parkplaetze-toiletten-verpflegung-v1_aid-24360691&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0gvygeAFwk9oOITrE1LeGY +2025-08-20 08:27:34,390 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-20 08:27:34,390 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://rp-online.de/digitales/games/gamescom/videospiel-messe-in-koeln-gamescom-2025-parkplaetze-toiletten-verpflegung-v1_aid-24360691&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0gvygeAFwk9oOITrE1LeGY +2025-08-20 08:27:34,391 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Videospiel-Messe in Köln: Gamescom 2025 – Parkplätze, Toiletten, Verpflegung' extrahiert +2025-08-20 08:27:34,391 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Videospiel-Messe in Köln: Gamescom 2025 – Parkplätze, Toiletten, Verpflegung +2025-08-20 08:27:34,392 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Das sind die Spiele der gamescom 2025 - Fragster +2025-08-20 08:27:34,392 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fragster.de/das-sind-die-spiele-der-gamescom-2025/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3zb8d-Ga08YcvwVYYzFYlH (Versuch 1) +2025-08-20 08:27:34,601 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-20 08:27:34,602 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-20 08:27:34,602 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-20 08:27:34,602 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fragster.de/das-sind-die-spiele-der-gamescom-2025/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3zb8d-Ga08YcvwVYYzFYlH +2025-08-20 08:27:34,605 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fragster.de/das-sind-die-spiele-der-gamescom-2025/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3zb8d-Ga08YcvwVYYzFYlH +2025-08-20 08:27:34,860 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-20 08:27:34,860 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.fragster.de/das-sind-die-spiele-der-gamescom-2025/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3zb8d-Ga08YcvwVYYzFYlH +2025-08-20 08:27:34,861 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Das sind die Spiele der gamescom 2025 - Fragster' extrahiert +2025-08-20 08:27:34,861 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Das sind die Spiele der gamescom 2025 - Fragster +2025-08-20 08:27:34,862 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 5 neue Artikel aus https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-20 08:27:35,885 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-20 08:27:35,885 - INFO - process_articles:310 - 🎉 Verarbeitung abgeschlossen: 13 neue Artikel in 45.10s hinzugefügt +2025-08-20 08:27:36,966 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:27:36,966 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:28:11,800 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:28:11,802 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:28:11,836 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-20 08:28:12,432 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:28:12,432 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:28:25,058 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:28:25,060 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:28:25,091 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-20 08:28:25,661 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:28:25,661 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:28:29,947 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:28:29,948 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:28:29,979 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-20 08:28:30,551 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:28:30,551 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:28:35,883 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:28:35,884 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:28:35,926 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-20 08:28:36,526 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:28:36,526 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:28:47,735 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:28:47,736 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:28:47,769 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-20 08:28:48,373 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:28:48,374 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:28:52,801 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:28:52,802 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:28:52,837 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-20 08:28:53,418 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:28:53,418 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:28:58,392 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:28:58,393 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:28:58,426 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-20 08:28:59,019 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:28:59,019 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:29:51,584 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:29:51,586 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:30:30,725 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:30:30,726 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:30:30,760 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-20 08:30:31,336 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:30:31,337 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:30:43,469 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:30:43,470 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:30:43,507 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-20 08:30:44,085 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:30:44,086 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:30:52,581 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:30:52,582 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:30:52,606 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-20 08:30:53,170 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:30:53,170 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:31:02,271 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:31:02,272 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:38:33,587 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:38:33,590 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:38:33,620 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-20 08:38:34,244 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:38:34,244 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:38:38,790 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:38:38,790 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:38:58,420 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:38:58,421 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-20 08:38:58,440 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-20 08:38:59,018 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-20 08:38:59,018 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-22 20:04:02,055 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-22 20:04:02,056 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-22 20:04:19,289 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-22 20:04:19,290 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-22 20:12:56,470 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-22 20:12:56,472 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-22 20:12:56,489 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-22 20:12:57,079 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-22 20:12:57,079 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-22 20:13:00,439 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-22 20:13:00,440 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-22 20:24:28,719 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-22 20:24:28,721 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-22 20:24:28,739 - INFO - save_articles:144 - ✅ 148 Artikel gespeichert +2025-08-22 20:24:29,312 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-22 20:24:29,312 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:09:59,010 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-24 10:09:59,012 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:10:03,980 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-24 10:10:03,980 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:10:03,984 - INFO - process_articles:268 - 🚀 Starte Artikel-Verarbeitung +2025-08-24 10:10:03,984 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:10:03,987 - INFO - load_articles:124 - ✅ 148 Artikel geladen +2025-08-24 10:10:03,987 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.camping-news.de/rss/ +2025-08-24 10:10:04,472 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Camping-News +2025-08-24 10:10:04,472 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-24 10:10:04,474 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 15 Jahre PremiumCamps +2025-08-24 10:10:04,474 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue Eriba Feeling und Novaline +2025-08-24 10:10:04,475 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Den eigenen Verbrauchszahlen auf der Spur +2025-08-24 10:10:04,475 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Abenteuer für die Kleinen, Entspannung für +die Großen +2025-08-24 10:10:04,476 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Das weltweit größte Caravaning-Erlebnis +2025-08-24 10:10:04,477 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Komfort und Flexibilität für moderne Camper +2025-08-24 10:10:04,477 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Frühjahrsaktionen vom Verein WOHNmobil für Klimaschutz +2025-08-24 10:10:04,478 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Viel los auf dem Klaukenhof +2025-08-24 10:10:04,478 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping Resort Allweglehen bietet "Wellness plus" +2025-08-24 10:10:04,479 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EU-Führerscheinreform kommt +2025-08-24 10:10:04,479 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.camping-news.de/rss/ +2025-08-24 10:10:05,485 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/news +2025-08-24 10:10:05,997 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: News bei www.promobil.de +2025-08-24 10:10:05,998 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-24 10:10:05,999 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-24 10:10:05,999 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/termine-veranstaltungen-juni-juli/ (Versuch 1) +2025-08-24 10:10:06,364 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:06,365 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:06,367 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 649 Wörter +2025-08-24 10:10:06,367 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 649 Wörter +2025-08-24 10:10:06,368 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-24 10:10:06,368 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-24 10:10:06,368 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ (Versuch 1) +2025-08-24 10:10:07,473 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:07,475 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:07,477 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1134 Wörter +2025-08-24 10:10:07,477 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1134 Wörter +2025-08-24 10:10:07,477 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-24 10:10:07,478 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-24 10:10:07,478 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/ (Versuch 1) +2025-08-24 10:10:07,990 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:07,991 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:07,991 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 874 Wörter +2025-08-24 10:10:07,992 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 874 Wörter +2025-08-24 10:10:07,992 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-24 10:10:07,992 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-24 10:10:07,992 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/ (Versuch 1) +2025-08-24 10:10:08,630 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:08,631 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:08,632 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 452 Wörter +2025-08-24 10:10:08,632 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 452 Wörter +2025-08-24 10:10:08,632 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-24 10:10:08,633 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-24 10:10:08,633 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ (Versuch 1) +2025-08-24 10:10:09,006 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:09,008 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:09,010 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1546 Wörter +2025-08-24 10:10:09,010 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1546 Wörter +2025-08-24 10:10:09,011 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-24 10:10:09,011 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-24 10:10:09,011 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/ (Versuch 1) +2025-08-24 10:10:09,530 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:09,531 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:09,532 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 136 Wörter +2025-08-24 10:10:09,532 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 136 Wörter +2025-08-24 10:10:09,532 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-24 10:10:09,532 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-24 10:10:09,532 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/top-10-clever-campen-videos-2024/ (Versuch 1) +2025-08-24 10:10:09,773 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:09,774 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:09,774 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:09,775 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 18 Paragraphen +2025-08-24 10:10:09,775 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:09,778 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-24 10:10:09,778 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-24 10:10:09,779 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-24 10:10:09,779 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/ (Versuch 1) +2025-08-24 10:10:10,672 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:10,674 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:10,677 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1870 Wörter +2025-08-24 10:10:10,686 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1870 Wörter +2025-08-24 10:10:10,686 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-24 10:10:10,687 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-24 10:10:10,687 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/ (Versuch 1) +2025-08-24 10:10:10,946 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:10,948 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:10,950 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1796 Wörter +2025-08-24 10:10:10,951 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1796 Wörter +2025-08-24 10:10:10,951 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-24 10:10:10,951 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-24 10:10:10,951 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ (Versuch 1) +2025-08-24 10:10:11,784 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:11,785 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:11,787 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 942 Wörter +2025-08-24 10:10:11,787 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 942 Wörter +2025-08-24 10:10:11,788 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-24 10:10:11,788 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-24 10:10:11,788 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/ (Versuch 1) +2025-08-24 10:10:12,934 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:12,935 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:12,936 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 416 Wörter +2025-08-24 10:10:12,937 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 416 Wörter +2025-08-24 10:10:12,937 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-24 10:10:12,937 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingbus Rocket Camper Ryzon beim Weltrekord: Jonas Deichmanns Camper für Ironman-Rekord +2025-08-24 10:10:12,937 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-24 10:10:12,938 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/ (Versuch 1) +2025-08-24 10:10:13,832 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:13,834 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:13,834 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 499 Wörter +2025-08-24 10:10:13,835 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 499 Wörter +2025-08-24 10:10:13,835 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-24 10:10:13,835 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-24 10:10:13,836 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/ (Versuch 1) +2025-08-24 10:10:14,887 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:14,889 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:14,890 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 894 Wörter +2025-08-24 10:10:14,890 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 894 Wörter +2025-08-24 10:10:14,891 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-24 10:10:14,891 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-24 10:10:14,891 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/can-kasim-dogan-interview-westfalia/ (Versuch 1) +2025-08-24 10:10:15,824 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:15,825 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:15,826 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 599 Wörter +2025-08-24 10:10:15,827 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 599 Wörter +2025-08-24 10:10:15,827 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-24 10:10:15,827 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-24 10:10:15,827 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/ (Versuch 1) +2025-08-24 10:10:16,519 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:16,520 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:16,521 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 639 Wörter +2025-08-24 10:10:16,521 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 639 Wörter +2025-08-24 10:10:16,522 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-24 10:10:16,522 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-24 10:10:16,522 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-frankfurt/ (Versuch 1) +2025-08-24 10:10:17,373 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:17,374 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:17,375 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 691 Wörter +2025-08-24 10:10:17,376 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 691 Wörter +2025-08-24 10:10:17,376 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-24 10:10:17,376 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-24 10:10:17,376 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/ (Versuch 1) +2025-08-24 10:10:18,466 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:18,468 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:18,469 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 923 Wörter +2025-08-24 10:10:18,470 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 923 Wörter +2025-08-24 10:10:18,470 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-24 10:10:18,470 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-24 10:10:18,470 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/camper-radio-radiosender-caravan-fm/ (Versuch 1) +2025-08-24 10:10:19,250 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:19,251 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:19,252 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 258 Wörter +2025-08-24 10:10:19,252 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 258 Wörter +2025-08-24 10:10:19,252 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-24 10:10:19,253 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-24 10:10:19,253 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/ (Versuch 1) +2025-08-24 10:10:20,159 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:20,160 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:20,161 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:20,161 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 8 Paragraphen +2025-08-24 10:10:20,162 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:20,165 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-24 10:10:20,165 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-24 10:10:20,166 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/news +2025-08-24 10:10:21,171 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/ratgeber +2025-08-24 10:10:21,749 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: ratgeber bei www.promobil.de +2025-08-24 10:10:21,749 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-24 10:10:21,750 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.promobil.de/tipps/lesestoff-buch-tipps-camping-freizeit/ +2025-08-24 10:10:22,243 - INFO - extract_images_with_metadata:167 - 🔍 16 img-Tags gefunden +2025-08-24 10:10:22,244 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Frau lesend beim Camping... +2025-08-24 10:10:22,244 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Buchtipps, Lesestoff, Camping, Bücher... +2025-08-24 10:10:22,244 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-24 10:10:22,245 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-24 10:10:22,245 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.promobil.de/tipps/lesestoff-buch-tipps-camping-freizeit/: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-24 10:10:22,245 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für '5 Buchtipps für Campingfans: Spannende und lustige Bücher rund ums Camping' extrahiert +2025-08-24 10:10:22,245 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: 5 Buchtipps für Campingfans: Spannende und lustige Bücher rund ums Camping +2025-08-24 10:10:22,249 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.promobil.de/tipps/download-stellplatz-radar-app-kostenlos/ +2025-08-24 10:10:22,651 - INFO - extract_images_with_metadata:167 - 🔍 25 img-Tags gefunden +2025-08-24 10:10:22,651 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Stellplatz-Radar-App... +2025-08-24 10:10:22,652 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Stellplatz-Radar-App... +2025-08-24 10:10:22,652 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Stellplatz-Radar-App... +2025-08-24 10:10:22,652 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Mit der Touren-Funktion können Sie Ihre ganz persö... +2025-08-24 10:10:22,652 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Einfache Suche - entweder direkt über die Karte mi... +2025-08-24 10:10:22,652 - INFO - extract_images_with_metadata:193 - 🎉 5 Bilder erfolgreich extrahiert von https://www.promobil.de/tipps/download-stellplatz-radar-app-kostenlos/ +2025-08-24 10:10:22,653 - INFO - fetch_and_process_feed:244 - 🖼️ 5 Bilder für 'Campingplätze, Stellplätze und mehr finden : „Stellplatz-Radar“-App bekommt neue Funktionen' extrahiert +2025-08-24 10:10:22,653 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Campingplätze, Stellplätze und mehr finden : „Stellplatz-Radar“-App bekommt neue Funktionen +2025-08-24 10:10:22,654 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrzeugtechnik am Wohnmobil im Detail: Windschutzscheiben sind längst mehr als Glas +2025-08-24 10:10:22,657 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper +2025-08-24 10:10:22,658 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum perfekten Campingtag: Wo verbringen Sie den perfekten Campingurlaub? +2025-08-24 10:10:22,659 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-24 10:10:22,660 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper +2025-08-24 10:10:22,661 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Regeln auf Frankreichs Autobahnen im Pannenfall: Kein Schutz durch ADAC & Co. auf Autobahnen +2025-08-24 10:10:22,662 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht? +2025-08-24 10:10:22,664 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box +2025-08-24 10:10:22,665 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Film-Stunt mit Caravan – wie realistisch ist das?: Sexsymbol Jensen Ackles wagt Stunt auf Wohnwagen +2025-08-24 10:10:22,667 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CLEVER CAMPEN Podcast Folge 40: Gravelbikes und Camping – die beste Kombi? +2025-08-24 10:10:22,668 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Stellplatz-Radar Sommeraktion 2025: 30 Tage Stellplatz-Radar PLUS gratis testen +2025-08-24 10:10:22,669 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Digitaler Fahrzeugschein für Camper: promobil testet den digitalen Fahrzeugschein +2025-08-24 10:10:22,670 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Badezimmer beim Camping - Umfrage: Welches Bad brauchen Sie im Wohnmobil? +2025-08-24 10:10:22,671 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum Kaffeegenuss beim Camping: So kochen Sie am liebsten Ihren Kaffee +2025-08-24 10:10:22,673 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zwei Menschen, zwei Meinungen: Das Mietbad spaltet die Campingwelt +2025-08-24 10:10:22,673 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zubehör auf der größten Campingmesse kaufen: Deshalb müssen Zubehör-Shopper zum Caravan Salon +2025-08-24 10:10:22,674 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tipps für die größte Camping-Messe Deutschlands: Darum dürfen Sie den Caravan Salon nicht verpassen +2025-08-24 10:10:22,677 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Sommerhitze im Wohnmobil & Wohnwagen: Die besten Tipps gegen Hitze im Camper +2025-08-24 10:10:22,677 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 2 neue Artikel aus https://www.promobil.de/rss/ratgeber +2025-08-24 10:10:23,682 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-24 10:10:24,170 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach camping +2025-08-24 10:10:24,170 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-24 10:10:24,172 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern +2025-08-24 10:10:24,174 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-24 10:10:24,176 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: IFA 2025: Jackery präsentiert neue 500-Watt-Powerstation im flachen Format, Solardachziegel und DIY-Balkonkraftwerk mit integriertem Brandschutzsystem +2025-08-24 10:10:24,177 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Inklusiver Campingurlaub am Gardasee +2025-08-24 10:10:24,177 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/153661/6094377 (Versuch 1) +2025-08-24 10:10:24,509 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:24,510 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 616 Wörter +2025-08-24 10:10:24,510 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 616 Wörter +2025-08-24 10:10:24,511 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Inklusiver Campingurlaub am Gardasee +2025-08-24 10:10:24,512 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neuheiten-Feuerwerk bei vanexxt auf dem Caravan Salon Düsseldorf 2025 +2025-08-24 10:10:24,512 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-24 10:10:24,512 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/170000/6091414 (Versuch 1) +2025-08-24 10:10:25,296 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:25,297 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 191 Wörter +2025-08-24 10:10:25,297 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 191 Wörter +2025-08-24 10:10:25,298 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-24 10:10:25,299 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 50 Jahre ADAC Tourset: Vom Kartenstapel zum digitalen Reisebegleiter / Erfolgreicher Reisebegleiter / 657.000 Toursets in 2024 bestellt +2025-08-24 10:10:25,300 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: RTLZWEI: Erfolgreicher Montag mit "Bella Italia - Camping auf Deutsch" +2025-08-24 10:10:25,301 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-24 10:10:25,301 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-24 10:10:25,781 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:25,783 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-24 10:10:25,783 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-24 10:10:25,784 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: So ist man beim Camping richtig versichert +2025-08-24 10:10:25,785 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Family Spots: Diese Reiseziele begeistern Groß und Klein +2025-08-24 10:10:25,785 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/102577/6085137 (Versuch 1) +2025-08-24 10:10:26,326 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:26,328 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 1226 Wörter +2025-08-24 10:10:26,328 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1226 Wörter +2025-08-24 10:10:26,329 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Family Spots: Diese Reiseziele begeistern Groß und Klein +2025-08-24 10:10:26,329 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-24 10:10:27,334 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-24 10:10:27,599 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil +2025-08-24 10:10:27,599 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-24 10:10:27,601 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/67955/6101192 +2025-08-24 10:10:28,082 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-24 10:10:28,083 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/67955/6101192 +2025-08-24 10:10:28,083 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Fast jeder Zweite träumt vom Van-Life / HEM-Umfrage zeigt: Das Fahrzeug wird immer häufiger zur mobilen Unterkunft' extrahiert +2025-08-24 10:10:28,083 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Fast jeder Zweite träumt vom Van-Life / HEM-Umfrage zeigt: Das Fahrzeug wird immer häufiger zur mobilen Unterkunft +2025-08-24 10:10:28,083 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: TÜV-Verband: Neues Merkblatt zum Anbau von Solaranlagen an Wohnmobilen +2025-08-24 10:10:28,083 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/65031/6100268 (Versuch 1) +2025-08-24 10:10:28,393 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:28,393 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 576 Wörter +2025-08-24 10:10:28,393 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 576 Wörter +2025-08-24 10:10:28,394 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/65031/6100268 +2025-08-24 10:10:28,703 - INFO - extract_images_with_metadata:167 - 🔍 7 img-Tags gefunden +2025-08-24 10:10:28,703 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/65031/6100268 +2025-08-24 10:10:28,703 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'TÜV-Verband: Neues Merkblatt zum Anbau von Solaranlagen an Wohnmobilen' extrahiert +2025-08-24 10:10:28,703 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: TÜV-Verband: Neues Merkblatt zum Anbau von Solaranlagen an Wohnmobilen +2025-08-24 10:10:28,704 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Akku leer: Gefahren beim Laden von E-Bikes +2025-08-24 10:10:28,705 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-24 10:10:28,705 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Maximale Flexibilität trifft volle Power: Intelligente Tiefenreinigung ohne Kabel mit der PURE ONE S Serie von Tineco +2025-08-24 10:10:28,706 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Urlaub mit dem Wohnmobil: Was tun bei Panne oder Unfall +2025-08-24 10:10:28,706 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-24 10:10:28,706 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/105254/6091837 (Versuch 1) +2025-08-24 10:10:29,188 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:29,190 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-24 10:10:29,190 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-24 10:10:29,190 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-24 10:10:29,684 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 10:10:29,685 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-24 10:10:29,686 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-24 10:10:29,686 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: So ist man beim Camping richtig versichert +2025-08-24 10:10:29,688 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Trotz Camper-Hype: Der Pkw ist die unangefochtene Nummer 1 für Sommerreisen +2025-08-24 10:10:29,689 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Doppelfolge am 24. Juli "Oksana & Family - Alles auf Anfang": Abwasserprobleme, Jobsuche und Tonstudiobesuch +2025-08-24 10:10:29,689 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 2 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-24 10:10:30,694 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://caravan-news.de/rss/schlagzeilen.php +2025-08-24 10:10:31,177 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: CARAVAN-NEWS.de +2025-08-24 10:10:31,177 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://caravan-news.de/rss/schlagzeilen.php +2025-08-24 10:10:32,182 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-24 10:10:32,757 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Campingplatz +2025-08-24 10:10:32,757 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-24 10:10:32,758 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping auf Schloss Sigrön: Natururlaub mit Stil in Brandenburg - AUTO BILD +2025-08-24 10:10:32,758 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.autobild.de/artikel/luxus-camping-auf-schloss-sigroen-28240471.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zNVAffLcLpjFYvlSTrl2J (Versuch 1) +2025-08-24 10:10:33,136 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:33,137 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:33,137 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:33,137 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.autobild.de/artikel/luxus-camping-auf-schloss-sigroen-28240471.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zNVAffLcLpjFYvlSTrl2J +2025-08-24 10:10:33,140 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.autobild.de/artikel/luxus-camping-auf-schloss-sigroen-28240471.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zNVAffLcLpjFYvlSTrl2J +2025-08-24 10:10:33,347 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:33,347 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.autobild.de/artikel/luxus-camping-auf-schloss-sigroen-28240471.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zNVAffLcLpjFYvlSTrl2J +2025-08-24 10:10:33,348 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Camping auf Schloss Sigrön: Natururlaub mit Stil in Brandenburg - AUTO BILD' extrahiert +2025-08-24 10:10:33,348 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Camping auf Schloss Sigrön: Natururlaub mit Stil in Brandenburg - AUTO BILD +2025-08-24 10:10:33,348 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Baden-Württemberg punktet mit einem der schönsten Wellness-Campingplätze - FNP +2025-08-24 10:10:33,349 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fnp.de/deutschland/wellness-campingplatz-schoenster-europas-baden-wuerttemberg-schwarzwaelder-hof-zr-93897610.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0B3Cmtfk2_cSBV9jpW2E29 (Versuch 1) +2025-08-24 10:10:33,680 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:33,681 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:33,681 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:33,681 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fnp.de/deutschland/wellness-campingplatz-schoenster-europas-baden-wuerttemberg-schwarzwaelder-hof-zr-93897610.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0B3Cmtfk2_cSBV9jpW2E29 +2025-08-24 10:10:33,684 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fnp.de/deutschland/wellness-campingplatz-schoenster-europas-baden-wuerttemberg-schwarzwaelder-hof-zr-93897610.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0B3Cmtfk2_cSBV9jpW2E29 +2025-08-24 10:10:33,876 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:33,876 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.fnp.de/deutschland/wellness-campingplatz-schoenster-europas-baden-wuerttemberg-schwarzwaelder-hof-zr-93897610.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0B3Cmtfk2_cSBV9jpW2E29 +2025-08-24 10:10:33,877 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Baden-Württemberg punktet mit einem der schönsten Wellness-Campingplätze - FNP' extrahiert +2025-08-24 10:10:33,877 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Baden-Württemberg punktet mit einem der schönsten Wellness-Campingplätze - FNP +2025-08-24 10:10:33,878 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Bleibt häufig unbemerkt: Problematischer Trend bei Schulausflügen breitet sich aus +2025-08-24 10:10:33,878 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bleibt-haeufig-unbemerkt-problematischer-trend-bei-schulausfluegen-breitet-sich-aus-zr-93893032.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0gk8c4QL1MtBwuHQJQHYXL (Versuch 1) +2025-08-24 10:10:34,215 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:34,215 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:34,215 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:34,215 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bleibt-haeufig-unbemerkt-problematischer-trend-bei-schulausfluegen-breitet-sich-aus-zr-93893032.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0gk8c4QL1MtBwuHQJQHYXL +2025-08-24 10:10:34,217 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bleibt-haeufig-unbemerkt-problematischer-trend-bei-schulausfluegen-breitet-sich-aus-zr-93893032.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0gk8c4QL1MtBwuHQJQHYXL +2025-08-24 10:10:34,403 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:34,403 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bleibt-haeufig-unbemerkt-problematischer-trend-bei-schulausfluegen-breitet-sich-aus-zr-93893032.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0gk8c4QL1MtBwuHQJQHYXL +2025-08-24 10:10:34,403 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Bleibt häufig unbemerkt: Problematischer Trend bei Schulausflügen breitet sich aus' extrahiert +2025-08-24 10:10:34,403 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Bleibt häufig unbemerkt: Problematischer Trend bei Schulausflügen breitet sich aus +2025-08-24 10:10:34,403 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Falkensteiner Favorit - Containerdorf als Nächtigungskrösus Klagenfurts | krone.at +2025-08-24 10:10:34,403 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.krone.at/3876891&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1woffiV_WLFd90nrB2FkoT (Versuch 1) +2025-08-24 10:10:34,709 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:34,710 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:34,710 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:34,710 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.krone.at/3876891&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1woffiV_WLFd90nrB2FkoT +2025-08-24 10:10:34,713 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.krone.at/3876891&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1woffiV_WLFd90nrB2FkoT +2025-08-24 10:10:34,918 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:34,918 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.krone.at/3876891&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1woffiV_WLFd90nrB2FkoT +2025-08-24 10:10:34,919 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Falkensteiner Favorit - Containerdorf als Nächtigungskrösus Klagenfurts | krone.at' extrahiert +2025-08-24 10:10:34,919 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Falkensteiner Favorit - Containerdorf als Nächtigungskrösus Klagenfurts | krone.at +2025-08-24 10:10:34,920 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Markanter Umschwung steht bevor – Am 27. August dreht sich das Wetter erneut +2025-08-24 10:10:34,920 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/sich-das-wetter-erneut-naechster-markanter-umschwung-bevor-am-27-august-dreht-zr-93893449.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ML-ydsKFV3aAS_kW-OJoY (Versuch 1) +2025-08-24 10:10:35,265 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:35,266 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:35,266 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:35,267 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/sich-das-wetter-erneut-naechster-markanter-umschwung-bevor-am-27-august-dreht-zr-93893449.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ML-ydsKFV3aAS_kW-OJoY +2025-08-24 10:10:35,270 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/sich-das-wetter-erneut-naechster-markanter-umschwung-bevor-am-27-august-dreht-zr-93893449.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ML-ydsKFV3aAS_kW-OJoY +2025-08-24 10:10:35,490 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:35,491 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/sich-das-wetter-erneut-naechster-markanter-umschwung-bevor-am-27-august-dreht-zr-93893449.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ML-ydsKFV3aAS_kW-OJoY +2025-08-24 10:10:35,491 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Markanter Umschwung steht bevor – Am 27. August dreht sich das Wetter erneut' extrahiert +2025-08-24 10:10:35,491 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Markanter Umschwung steht bevor – Am 27. August dreht sich das Wetter erneut +2025-08-24 10:10:35,492 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Reportage: Sommerparadies Bodensee - Camping in Gohren - SWR Aktuell +2025-08-24 10:10:35,492 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/sommerparadies-bodensee-dokumentation-vom-campingplatz-gohren-bei-kressbronn-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3dRHXspfNHNEiPRBrJOeLi (Versuch 1) +2025-08-24 10:10:35,819 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:35,820 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:35,821 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:35,821 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/sommerparadies-bodensee-dokumentation-vom-campingplatz-gohren-bei-kressbronn-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3dRHXspfNHNEiPRBrJOeLi +2025-08-24 10:10:35,824 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/sommerparadies-bodensee-dokumentation-vom-campingplatz-gohren-bei-kressbronn-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3dRHXspfNHNEiPRBrJOeLi +2025-08-24 10:10:36,026 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:36,026 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/sommerparadies-bodensee-dokumentation-vom-campingplatz-gohren-bei-kressbronn-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3dRHXspfNHNEiPRBrJOeLi +2025-08-24 10:10:36,027 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Reportage: Sommerparadies Bodensee - Camping in Gohren - SWR Aktuell' extrahiert +2025-08-24 10:10:36,027 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Reportage: Sommerparadies Bodensee - Camping in Gohren - SWR Aktuell +2025-08-24 10:10:36,028 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Im Video: Wie Nadine Zappe Marmeladenglasmomente auf ihrem Campingplatz schafft +2025-08-24 10:10:36,028 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nordschleswiger.dk/de/nordschleswig-hadersleben/im-video-wie-nadine-zappe-marmeladenglasmomente-ihrem-campingplatz&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0GFYeBShFgu1NUoM6G-5G_ (Versuch 1) +2025-08-24 10:10:36,377 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:36,378 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:36,378 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:36,378 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.nordschleswiger.dk/de/nordschleswig-hadersleben/im-video-wie-nadine-zappe-marmeladenglasmomente-ihrem-campingplatz&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0GFYeBShFgu1NUoM6G-5G_ +2025-08-24 10:10:36,380 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nordschleswiger.dk/de/nordschleswig-hadersleben/im-video-wie-nadine-zappe-marmeladenglasmomente-ihrem-campingplatz&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0GFYeBShFgu1NUoM6G-5G_ +2025-08-24 10:10:36,572 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:36,572 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.nordschleswiger.dk/de/nordschleswig-hadersleben/im-video-wie-nadine-zappe-marmeladenglasmomente-ihrem-campingplatz&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0GFYeBShFgu1NUoM6G-5G_ +2025-08-24 10:10:36,573 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Im Video: Wie Nadine Zappe Marmeladenglasmomente auf ihrem Campingplatz schafft' extrahiert +2025-08-24 10:10:36,573 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Im Video: Wie Nadine Zappe Marmeladenglasmomente auf ihrem Campingplatz schafft +2025-08-24 10:10:36,574 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hund bei Eisenhüttenstadt: Badestellen in der Region – wo Hunde erlaubt sind - MOZ.de +2025-08-24 10:10:36,574 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.moz.de/lokales/eisenhuettenstadt/hund-in-eisenhuettenstadt-badestellen-in-der-region-wo-hunde-erlaubt-sind-78262165.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0AJpWSxdJOcPug6TRkVtzZ (Versuch 1) +2025-08-24 10:10:36,920 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:36,920 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:36,920 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:36,921 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.moz.de/lokales/eisenhuettenstadt/hund-in-eisenhuettenstadt-badestellen-in-der-region-wo-hunde-erlaubt-sind-78262165.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0AJpWSxdJOcPug6TRkVtzZ +2025-08-24 10:10:36,922 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.moz.de/lokales/eisenhuettenstadt/hund-in-eisenhuettenstadt-badestellen-in-der-region-wo-hunde-erlaubt-sind-78262165.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0AJpWSxdJOcPug6TRkVtzZ +2025-08-24 10:10:37,253 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:37,253 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.moz.de/lokales/eisenhuettenstadt/hund-in-eisenhuettenstadt-badestellen-in-der-region-wo-hunde-erlaubt-sind-78262165.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0AJpWSxdJOcPug6TRkVtzZ +2025-08-24 10:10:37,254 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Hund bei Eisenhüttenstadt: Badestellen in der Region – wo Hunde erlaubt sind - MOZ.de' extrahiert +2025-08-24 10:10:37,254 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Hund bei Eisenhüttenstadt: Badestellen in der Region – wo Hunde erlaubt sind - MOZ.de +2025-08-24 10:10:37,254 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Beliebtes Medikament löst Krebs aus – Forschende entschlüsseln rätselhaften Mechanismus +2025-08-24 10:10:37,255 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/brustkrebs-medikament-loest-gebaermutterkrebs-forschende-entschluesseln-raetselhaften-mechanismus-93897055.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw29FN0GWoPTgcf0krxruWOo (Versuch 1) +2025-08-24 10:10:37,472 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:37,473 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:37,473 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:37,473 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/brustkrebs-medikament-loest-gebaermutterkrebs-forschende-entschluesseln-raetselhaften-mechanismus-93897055.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw29FN0GWoPTgcf0krxruWOo +2025-08-24 10:10:37,476 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/brustkrebs-medikament-loest-gebaermutterkrebs-forschende-entschluesseln-raetselhaften-mechanismus-93897055.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw29FN0GWoPTgcf0krxruWOo +2025-08-24 10:10:37,775 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:37,775 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/brustkrebs-medikament-loest-gebaermutterkrebs-forschende-entschluesseln-raetselhaften-mechanismus-93897055.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw29FN0GWoPTgcf0krxruWOo +2025-08-24 10:10:37,776 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Beliebtes Medikament löst Krebs aus – Forschende entschlüsseln rätselhaften Mechanismus' extrahiert +2025-08-24 10:10:37,776 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Beliebtes Medikament löst Krebs aus – Forschende entschlüsseln rätselhaften Mechanismus +2025-08-24 10:10:37,776 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Massive Unwetter an Adria-Küste: Sintflutartige Regenfälle, Hagel und Sturm über Italien ... +2025-08-24 10:10:37,776 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/und-sturm-ueber-italien-und-kroatien-massive-unwetter-an-adria-kueste-sintflutartige-regenfaelle-hagel-zr-93892020.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1nftLRtaIVhcLaTEABSHrB (Versuch 1) +2025-08-24 10:10:37,979 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:37,980 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:37,980 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:37,980 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/und-sturm-ueber-italien-und-kroatien-massive-unwetter-an-adria-kueste-sintflutartige-regenfaelle-hagel-zr-93892020.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1nftLRtaIVhcLaTEABSHrB +2025-08-24 10:10:37,981 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/und-sturm-ueber-italien-und-kroatien-massive-unwetter-an-adria-kueste-sintflutartige-regenfaelle-hagel-zr-93892020.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1nftLRtaIVhcLaTEABSHrB +2025-08-24 10:10:38,427 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:38,427 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/und-sturm-ueber-italien-und-kroatien-massive-unwetter-an-adria-kueste-sintflutartige-regenfaelle-hagel-zr-93892020.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1nftLRtaIVhcLaTEABSHrB +2025-08-24 10:10:38,427 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Massive Unwetter an Adria-Küste: Sintflutartige Regenfälle, Hagel und Sturm über Italien ...' extrahiert +2025-08-24 10:10:38,428 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Massive Unwetter an Adria-Küste: Sintflutartige Regenfälle, Hagel und Sturm über Italien ... +2025-08-24 10:10:38,428 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hurrikan Erin rast über Atlantik – Überreste bescheren Europa völlig neues August-Wetter +2025-08-24 10:10:38,428 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/ueberreste-bescheren-europa-voellig-neues-august-wetter-hurrikan-erin-rast-ueber-atlantik-zr-93891473.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3MwCg1CMlAsF_p3SDGs51a (Versuch 1) +2025-08-24 10:10:38,629 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:38,629 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:38,630 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:38,630 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/ueberreste-bescheren-europa-voellig-neues-august-wetter-hurrikan-erin-rast-ueber-atlantik-zr-93891473.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3MwCg1CMlAsF_p3SDGs51a +2025-08-24 10:10:38,633 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/ueberreste-bescheren-europa-voellig-neues-august-wetter-hurrikan-erin-rast-ueber-atlantik-zr-93891473.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3MwCg1CMlAsF_p3SDGs51a +2025-08-24 10:10:39,024 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:39,024 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/ueberreste-bescheren-europa-voellig-neues-august-wetter-hurrikan-erin-rast-ueber-atlantik-zr-93891473.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3MwCg1CMlAsF_p3SDGs51a +2025-08-24 10:10:39,025 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Hurrikan Erin rast über Atlantik – Überreste bescheren Europa völlig neues August-Wetter' extrahiert +2025-08-24 10:10:39,025 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Hurrikan Erin rast über Atlantik – Überreste bescheren Europa völlig neues August-Wetter +2025-08-24 10:10:39,026 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Grabenstätt: Urlauberin verletzt sich bei Auffahrunfall - Bayernwelle +2025-08-24 10:10:39,026 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.bayernwelle.de/grabenstaett-urlauberin-verletzt-sich-bei-auffahrunfall-181471/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zpwbOIg41UNO80I-NPAJa (Versuch 1) +2025-08-24 10:10:39,344 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:39,345 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:39,345 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:39,345 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.bayernwelle.de/grabenstaett-urlauberin-verletzt-sich-bei-auffahrunfall-181471/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zpwbOIg41UNO80I-NPAJa +2025-08-24 10:10:39,346 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.bayernwelle.de/grabenstaett-urlauberin-verletzt-sich-bei-auffahrunfall-181471/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zpwbOIg41UNO80I-NPAJa +2025-08-24 10:10:39,599 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:39,599 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.bayernwelle.de/grabenstaett-urlauberin-verletzt-sich-bei-auffahrunfall-181471/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zpwbOIg41UNO80I-NPAJa +2025-08-24 10:10:39,600 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Grabenstätt: Urlauberin verletzt sich bei Auffahrunfall - Bayernwelle' extrahiert +2025-08-24 10:10:39,600 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Grabenstätt: Urlauberin verletzt sich bei Auffahrunfall - Bayernwelle +2025-08-24 10:10:39,600 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Größter Campingplatz Europas knietief unter Wasser – Deutsche kennen ihn aus TV-Show +2025-08-24 10:10:39,600 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/groesster-campingplatz-europas-knietief-unter-wasser-deutsche-kennen-ihn-aus-tv-show-93897475.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2oJIq2dgPq8t0LP0XDZdKi (Versuch 1) +2025-08-24 10:10:39,989 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:39,990 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:39,990 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:39,990 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/groesster-campingplatz-europas-knietief-unter-wasser-deutsche-kennen-ihn-aus-tv-show-93897475.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2oJIq2dgPq8t0LP0XDZdKi +2025-08-24 10:10:39,993 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/groesster-campingplatz-europas-knietief-unter-wasser-deutsche-kennen-ihn-aus-tv-show-93897475.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2oJIq2dgPq8t0LP0XDZdKi +2025-08-24 10:10:40,399 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:40,399 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/groesster-campingplatz-europas-knietief-unter-wasser-deutsche-kennen-ihn-aus-tv-show-93897475.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2oJIq2dgPq8t0LP0XDZdKi +2025-08-24 10:10:40,400 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Größter Campingplatz Europas knietief unter Wasser – Deutsche kennen ihn aus TV-Show' extrahiert +2025-08-24 10:10:40,400 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Größter Campingplatz Europas knietief unter Wasser – Deutsche kennen ihn aus TV-Show +2025-08-24 10:10:40,400 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Größter Campingplatz Europas knietief unter Wasser – Deutsche kennen ihn aus TV-Show +2025-08-24 10:10:40,400 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/welt/groesster-campingplatz-europas-knietief-unter-wasser-deutsche-kennen-ihn-aus-tv-show-93897439.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0jViaY7obKQso9Kan2s9bu (Versuch 1) +2025-08-24 10:10:40,625 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:40,626 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:40,626 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:40,627 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/welt/groesster-campingplatz-europas-knietief-unter-wasser-deutsche-kennen-ihn-aus-tv-show-93897439.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0jViaY7obKQso9Kan2s9bu +2025-08-24 10:10:40,630 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/welt/groesster-campingplatz-europas-knietief-unter-wasser-deutsche-kennen-ihn-aus-tv-show-93897439.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0jViaY7obKQso9Kan2s9bu +2025-08-24 10:10:40,920 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:40,921 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/welt/groesster-campingplatz-europas-knietief-unter-wasser-deutsche-kennen-ihn-aus-tv-show-93897439.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0jViaY7obKQso9Kan2s9bu +2025-08-24 10:10:40,921 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Größter Campingplatz Europas knietief unter Wasser – Deutsche kennen ihn aus TV-Show' extrahiert +2025-08-24 10:10:40,921 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Größter Campingplatz Europas knietief unter Wasser – Deutsche kennen ihn aus TV-Show +2025-08-24 10:10:40,922 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Kroatien: Unwetter nach spektakulärer Wolkenfront an Adria-Küste schocken Camper +2025-08-24 10:10:40,922 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.wa.de/welt/unwetter-verwuesten-campingplaetze-in-kroatien-spektakulaere-wolkenfront-ueber-adria-kueste-sind-abgereist-93896644.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1A80We_i-8fwM_o4mV4XtR (Versuch 1) +2025-08-24 10:10:41,122 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:41,123 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:41,123 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:41,123 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.wa.de/welt/unwetter-verwuesten-campingplaetze-in-kroatien-spektakulaere-wolkenfront-ueber-adria-kueste-sind-abgereist-93896644.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1A80We_i-8fwM_o4mV4XtR +2025-08-24 10:10:41,126 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.wa.de/welt/unwetter-verwuesten-campingplaetze-in-kroatien-spektakulaere-wolkenfront-ueber-adria-kueste-sind-abgereist-93896644.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1A80We_i-8fwM_o4mV4XtR +2025-08-24 10:10:41,448 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:41,448 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.wa.de/welt/unwetter-verwuesten-campingplaetze-in-kroatien-spektakulaere-wolkenfront-ueber-adria-kueste-sind-abgereist-93896644.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1A80We_i-8fwM_o4mV4XtR +2025-08-24 10:10:41,449 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Kroatien: Unwetter nach spektakulärer Wolkenfront an Adria-Küste schocken Camper' extrahiert +2025-08-24 10:10:41,449 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Kroatien: Unwetter nach spektakulärer Wolkenfront an Adria-Küste schocken Camper +2025-08-24 10:10:41,449 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Campingplatz am Nidda-Stausee mit guter sehr Auslastung - FNP +2025-08-24 10:10:41,450 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fnp.de/lokales/wetteraukreis/campingplatz-am-nidda-stausee-mit-guter-sehr-auslastung-93896554.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2kxM3SOZlO-z81GBidTt9J (Versuch 1) +2025-08-24 10:10:41,671 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:41,672 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:41,672 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:41,672 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fnp.de/lokales/wetteraukreis/campingplatz-am-nidda-stausee-mit-guter-sehr-auslastung-93896554.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2kxM3SOZlO-z81GBidTt9J +2025-08-24 10:10:41,675 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fnp.de/lokales/wetteraukreis/campingplatz-am-nidda-stausee-mit-guter-sehr-auslastung-93896554.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2kxM3SOZlO-z81GBidTt9J +2025-08-24 10:10:42,078 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:42,079 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.fnp.de/lokales/wetteraukreis/campingplatz-am-nidda-stausee-mit-guter-sehr-auslastung-93896554.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2kxM3SOZlO-z81GBidTt9J +2025-08-24 10:10:42,079 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Campingplatz am Nidda-Stausee mit guter sehr Auslastung - FNP' extrahiert +2025-08-24 10:10:42,080 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Campingplatz am Nidda-Stausee mit guter sehr Auslastung - FNP +2025-08-24 10:10:42,080 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Ein beliebter DDR-Campingplatz auf Ostsee-Insel könnte verschwinden - Nordkurier +2025-08-24 10:10:42,081 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nordkurier.de/regional/usedom/dieser-beliebte-ddr-campingplatz-auf-ostsee-insel-koennte-verschwinden-3838218&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3O6pcTG4aS_ju-I0Zfu9Qo (Versuch 1) +2025-08-24 10:10:42,293 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:42,294 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:42,294 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:42,294 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.nordkurier.de/regional/usedom/dieser-beliebte-ddr-campingplatz-auf-ostsee-insel-koennte-verschwinden-3838218&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3O6pcTG4aS_ju-I0Zfu9Qo +2025-08-24 10:10:42,296 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nordkurier.de/regional/usedom/dieser-beliebte-ddr-campingplatz-auf-ostsee-insel-koennte-verschwinden-3838218&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3O6pcTG4aS_ju-I0Zfu9Qo +2025-08-24 10:10:42,664 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:42,664 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.nordkurier.de/regional/usedom/dieser-beliebte-ddr-campingplatz-auf-ostsee-insel-koennte-verschwinden-3838218&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3O6pcTG4aS_ju-I0Zfu9Qo +2025-08-24 10:10:42,665 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Ein beliebter DDR-Campingplatz auf Ostsee-Insel könnte verschwinden - Nordkurier' extrahiert +2025-08-24 10:10:42,665 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Ein beliebter DDR-Campingplatz auf Ostsee-Insel könnte verschwinden - Nordkurier +2025-08-24 10:10:42,666 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Unfall auf Campingplatz bei Cavallino - jesolo-magazin.com +2025-08-24 10:10:42,666 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://jesolo-magazin.com/unfall-auf-campingplatz-bei-cavallino/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw13Q4Q-rLFodoIaqrD3ZobU (Versuch 1) +2025-08-24 10:10:43,014 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:43,015 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:43,015 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:43,015 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://jesolo-magazin.com/unfall-auf-campingplatz-bei-cavallino/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw13Q4Q-rLFodoIaqrD3ZobU +2025-08-24 10:10:43,018 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://jesolo-magazin.com/unfall-auf-campingplatz-bei-cavallino/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw13Q4Q-rLFodoIaqrD3ZobU +2025-08-24 10:10:43,245 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:43,245 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://jesolo-magazin.com/unfall-auf-campingplatz-bei-cavallino/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw13Q4Q-rLFodoIaqrD3ZobU +2025-08-24 10:10:43,246 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Unfall auf Campingplatz bei Cavallino - jesolo-magazin.com' extrahiert +2025-08-24 10:10:43,246 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Unfall auf Campingplatz bei Cavallino - jesolo-magazin.com +2025-08-24 10:10:43,247 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: „Drei Nächte durchvisioniert“: Freystädter Paar verliebt sich in Campingplatz in Thüringen +2025-08-24 10:10:43,247 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nn.de/region/neumarkt/drei-nachte-durchvisioniert-freystadter-paar-verliebt-sich-in-campingplatz-in-thuringen-1.14802417&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1vOac9UH70ipnEbOKDZ0De (Versuch 1) +2025-08-24 10:10:43,540 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:43,541 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:43,541 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:43,541 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.nn.de/region/neumarkt/drei-nachte-durchvisioniert-freystadter-paar-verliebt-sich-in-campingplatz-in-thuringen-1.14802417&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1vOac9UH70ipnEbOKDZ0De +2025-08-24 10:10:43,545 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nn.de/region/neumarkt/drei-nachte-durchvisioniert-freystadter-paar-verliebt-sich-in-campingplatz-in-thuringen-1.14802417&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1vOac9UH70ipnEbOKDZ0De +2025-08-24 10:10:43,735 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:43,736 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.nn.de/region/neumarkt/drei-nachte-durchvisioniert-freystadter-paar-verliebt-sich-in-campingplatz-in-thuringen-1.14802417&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1vOac9UH70ipnEbOKDZ0De +2025-08-24 10:10:43,737 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für '„Drei Nächte durchvisioniert“: Freystädter Paar verliebt sich in Campingplatz in Thüringen' extrahiert +2025-08-24 10:10:43,737 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: „Drei Nächte durchvisioniert“: Freystädter Paar verliebt sich in Campingplatz in Thüringen +2025-08-24 10:10:43,737 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Schwimmbad und Campingplatz: Mieses Wetter, mieses Geschäft? - Badische Zeitung +2025-08-24 10:10:43,737 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.badische-zeitung.de/schwimmbad-und-campingplatz-mieses-wetter-mieses-geschaeft&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ztU82SEKVMrArG_bbQbUi (Versuch 1) +2025-08-24 10:10:44,064 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:44,065 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:44,065 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:44,066 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.badische-zeitung.de/schwimmbad-und-campingplatz-mieses-wetter-mieses-geschaeft&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ztU82SEKVMrArG_bbQbUi +2025-08-24 10:10:44,068 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.badische-zeitung.de/schwimmbad-und-campingplatz-mieses-wetter-mieses-geschaeft&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ztU82SEKVMrArG_bbQbUi +2025-08-24 10:10:44,269 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:44,269 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.badische-zeitung.de/schwimmbad-und-campingplatz-mieses-wetter-mieses-geschaeft&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ztU82SEKVMrArG_bbQbUi +2025-08-24 10:10:44,270 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Schwimmbad und Campingplatz: Mieses Wetter, mieses Geschäft? - Badische Zeitung' extrahiert +2025-08-24 10:10:44,270 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Schwimmbad und Campingplatz: Mieses Wetter, mieses Geschäft? - Badische Zeitung +2025-08-24 10:10:44,270 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 20 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-24 10:10:45,275 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-24 10:10:45,876 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Vanlife +2025-08-24 10:10:45,877 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-24 10:10:46,882 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-24 10:10:47,381 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Camping Termine 2024 +2025-08-24 10:10:47,382 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-24 10:10:48,387 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-24 10:10:48,877 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert - Camping Messe 2025 +2025-08-24 10:10:48,878 - INFO - fetch_and_process_feed:187 - 📰 1 Einträge gefunden +2025-08-24 10:10:48,878 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: In Düsseldorf schlägt das „Herz des Caravanings“ - Niederrhein Nachrichten +2025-08-24 10:10:48,879 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.niederrhein-nachrichten.de/nachrichten/in-duesseldorf-schlaegt-das-herz-des-caravanings-11957.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11bSejssd9woRFps5qaXVQ (Versuch 1) +2025-08-24 10:10:49,310 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 10:10:49,310 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 10:10:49,310 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 10:10:49,310 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.niederrhein-nachrichten.de/nachrichten/in-duesseldorf-schlaegt-das-herz-des-caravanings-11957.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11bSejssd9woRFps5qaXVQ +2025-08-24 10:10:49,312 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.niederrhein-nachrichten.de/nachrichten/in-duesseldorf-schlaegt-das-herz-des-caravanings-11957.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11bSejssd9woRFps5qaXVQ +2025-08-24 10:10:49,560 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 10:10:49,560 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.niederrhein-nachrichten.de/nachrichten/in-duesseldorf-schlaegt-das-herz-des-caravanings-11957.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11bSejssd9woRFps5qaXVQ +2025-08-24 10:10:49,561 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'In Düsseldorf schlägt das „Herz des Caravanings“ - Niederrhein Nachrichten' extrahiert +2025-08-24 10:10:49,561 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: In Düsseldorf schlägt das „Herz des Caravanings“ - Niederrhein Nachrichten +2025-08-24 10:10:49,561 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 1 neue Artikel aus https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-24 10:10:50,591 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:10:50,591 - INFO - process_articles:310 - 🎉 Verarbeitung abgeschlossen: 25 neue Artikel in 46.61s hinzugefügt +2025-08-24 10:10:51,681 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:10:51,682 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:11:14,975 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:11:14,976 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:11:15,002 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:11:15,569 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:11:15,570 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:11:37,133 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:11:37,134 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:11:37,167 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:11:37,734 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:11:37,735 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:11:43,062 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:11:43,062 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:11:43,093 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:11:43,662 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:11:43,663 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:11:50,638 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:11:50,639 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:11:50,672 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:11:51,228 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:11:51,228 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:11:54,885 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:11:54,885 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:11:54,924 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:11:55,488 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:11:55,489 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:03,451 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:03,452 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:03,498 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:12:04,067 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:04,067 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:08,142 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:08,142 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:08,187 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:12:08,754 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:08,754 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:13,133 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:13,134 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:13,184 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:12:13,745 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:13,745 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:20,577 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:20,578 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:20,618 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:12:21,187 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:21,187 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:26,560 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:26,561 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:26,597 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:12:27,163 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:27,163 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:39,394 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:39,395 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:39,429 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:12:39,999 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:39,999 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:43,287 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:43,287 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:43,319 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:12:43,882 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:43,883 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:48,525 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:48,526 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:48,569 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:12:49,131 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:49,131 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:52,629 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:52,630 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:52,660 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:12:53,228 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:53,228 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:57,904 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:57,905 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:12:57,944 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:12:58,512 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:12:58,513 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:13:03,089 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:13:03,090 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:13:03,120 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:13:03,689 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:13:03,689 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:13:08,281 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:13:08,282 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:13:08,313 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:13:08,877 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:13:08,877 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:13:12,776 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:13:12,776 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:13:12,812 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:13:13,376 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:13:13,376 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:13:19,128 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:13:19,129 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:13:19,159 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:13:19,720 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:13:19,721 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:13:34,473 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:13:34,474 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:13:34,495 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:13:35,060 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:13:35,060 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:13:42,250 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:13:42,251 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:13:42,272 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:13:42,840 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:13:42,840 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:13:57,801 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:13:57,801 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:13:57,824 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:13:58,389 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:13:58,389 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:14:03,902 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:14:03,903 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:14:03,925 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:14:04,462 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:14:04,463 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:14:15,464 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:14:15,465 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:19:19,298 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:19:19,300 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:19:19,320 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:19:19,938 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:19:19,938 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:19:24,733 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:19:24,734 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:20:00,917 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:20:00,918 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:20:00,937 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:20:01,520 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:20:01,520 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:20:15,308 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:20:15,309 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:20:15,314 - INFO - rewrite_articles:320 - ✍️ Starte Artikel-Umschreibung +2025-08-24 10:20:15,320 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:20:15,320 - INFO - rewrite_articles:337 - ✍️ Umschreiben von: 5 Buchtipps für Campingfans: Spannende und lustige Bücher rund ums Camping +2025-08-24 10:20:29,212 - INFO - _send_single_request:1025 - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-24 10:20:31,802 - INFO - _send_single_request:1025 - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-24 10:20:31,816 - INFO - rewrite_articles:392 - ✅ Artikel erfolgreich umgeschrieben: 5 Buchtipps für Campingfans: Spannende und lustige Bücher rund ums Camping +2025-08-24 10:20:33,821 - INFO - rewrite_articles:337 - ✍️ Umschreiben von: Campingplätze, Stellplätze und mehr finden : „Stellplatz-Radar“-App bekommt neue Funktionen +2025-08-24 10:20:55,230 - INFO - _send_single_request:1025 - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-24 10:20:56,784 - INFO - _send_single_request:1025 - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK" +2025-08-24 10:20:56,786 - INFO - rewrite_articles:392 - ✅ Artikel erfolgreich umgeschrieben: Campingplätze, Stellplätze und mehr finden : „Stellplatz-Radar“-App bekommt neue Funktionen +2025-08-24 10:20:58,822 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:20:58,822 - INFO - rewrite_articles:404 - 🎉 2 Artikel erfolgreich umgeschrieben +2025-08-24 10:20:59,902 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:20:59,903 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:21:13,570 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:21:13,571 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:21:33,232 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:21:33,232 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:21:33,248 - INFO - __init__:51 - ✅ WordPress-Authentifizierung: Verwende bereitgestellten Base64-String +2025-08-24 10:21:34,068 - INFO - _get_default_category_id:87 - ✅ Standard-Kategorie 'Allgemein' gefunden: ID 1 +2025-08-24 10:21:34,068 - INFO - test_connection:338 - 🔧 Teste WordPress-API-Verbindung mit Base64-Auth... +2025-08-24 10:21:34,068 - INFO - test_connection:342 - 🔑 Authorization Header: Basic b2dpZXJ0ejp3aE... +2025-08-24 10:21:34,537 - INFO - test_connection:351 - 📡 API-Response Status: 200 +2025-08-24 10:21:34,538 - INFO - test_connection:352 - 📡 API-Response Headers: {'Content-Type': 'application/json; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'X-WS-RateLimit-Limit': '1000', 'X-WS-RateLimit-Remaining': '998', 'Date': 'Sun, 24 Aug 2025 08:21:34 GMT', 'Server': 'Apache', 'X-Powered-By': 'PHP/8.2.29', 'Pragma': 'no-cache', 'X-Robots-Tag': 'noindex', 'X-Content-Type-Options': 'nosniff', 'Access-Control-Expose-Headers': 'X-WP-Total, X-WP-TotalPages, Link', 'Access-Control-Allow-Headers': 'Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type', 'X-WP-Total': '4', 'X-WP-TotalPages': '4', 'Link': '; rel="next"', 'Allow': 'GET, POST', 'Expires': 'Wed, 11 Jan 1984 05:00:00 GMT', 'Cache-Control': 'no-cache, must-revalidate, max-age=0, no-store, private'} +2025-08-24 10:21:34,538 - INFO - test_connection:355 - ✅ WordPress-API-Verbindung erfolgreich +2025-08-24 10:21:34,538 - INFO - upload_article:249 - 📤 Starte WordPress-Upload: 5 Buchtipps für Campingfans: Spannende und lustige Bücher rund ums Camping +2025-08-24 10:21:36,177 - INFO - _get_or_create_tags:135 - ✅ Existierender Tag gefunden: 'Camping' (ID: 194) +2025-08-24 10:21:37,200 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Buchempfehlungen' (ID: 952) +2025-08-24 10:21:38,429 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Reiseliteratur' (ID: 953) +2025-08-24 10:21:39,452 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'VW Bulli' (ID: 954) +2025-08-24 10:21:40,374 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Deutschland Reiseführer' (ID: 955) +2025-08-24 10:21:40,374 - INFO - _get_or_create_tags:158 - 🏷️ Tags verarbeitet: 5 Tag-IDs erstellt +2025-08-24 10:21:40,374 - INFO - _prepare_post_data:194 - 📝 Post-Daten vorbereitet: Titel='5 Buchtipps für Campingfans: Spannende und lustige Bücher rund ums Camping', Tags=5, Kategorie=1 +2025-08-24 10:21:40,899 - INFO - upload_article:274 - ✅ WordPress-Upload erfolgreich: '5 Buchtipps für Campingfans: Spannende und lustige Bücher rund ums Camping' (ID: 3450) +2025-08-24 10:21:40,900 - INFO - upload_article:275 - 🔗 WordPress-URL: https://vanityontour.de/?p=3450 +2025-08-24 10:21:40,930 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:21:42,006 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:21:42,006 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:21:48,829 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:21:48,830 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:21:48,847 - INFO - __init__:51 - ✅ WordPress-Authentifizierung: Verwende bereitgestellten Base64-String +2025-08-24 10:21:49,897 - INFO - _get_default_category_id:87 - ✅ Standard-Kategorie 'Allgemein' gefunden: ID 1 +2025-08-24 10:21:49,898 - INFO - test_connection:338 - 🔧 Teste WordPress-API-Verbindung mit Base64-Auth... +2025-08-24 10:21:49,898 - INFO - test_connection:342 - 🔑 Authorization Header: Basic b2dpZXJ0ejp3aE... +2025-08-24 10:21:50,303 - INFO - test_connection:351 - 📡 API-Response Status: 200 +2025-08-24 10:21:50,303 - INFO - test_connection:352 - 📡 API-Response Headers: {'Content-Type': 'application/json; charset=UTF-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'X-WS-RateLimit-Limit': '1000', 'X-WS-RateLimit-Remaining': '998', 'Date': 'Sun, 24 Aug 2025 08:21:49 GMT', 'Server': 'Apache', 'X-Powered-By': 'PHP/8.2.29', 'Pragma': 'no-cache', 'X-Robots-Tag': 'noindex', 'X-Content-Type-Options': 'nosniff', 'Access-Control-Expose-Headers': 'X-WP-Total, X-WP-TotalPages, Link', 'Access-Control-Allow-Headers': 'Authorization, X-WP-Nonce, Content-Disposition, Content-MD5, Content-Type', 'X-WP-Total': '4', 'X-WP-TotalPages': '4', 'Link': '; rel="next"', 'Allow': 'GET, POST', 'Expires': 'Wed, 11 Jan 1984 05:00:00 GMT', 'Cache-Control': 'no-cache, must-revalidate, max-age=0, no-store, private'} +2025-08-24 10:21:50,303 - INFO - test_connection:355 - ✅ WordPress-API-Verbindung erfolgreich +2025-08-24 10:21:50,304 - INFO - upload_article:249 - 📤 Starte WordPress-Upload: Campingplätze, Stellplätze und mehr finden : „Stellplatz-Radar“-App bekommt neue Funktionen +2025-08-24 10:21:51,827 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Camping-App' (ID: 956) +2025-08-24 10:21:52,874 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Stellplatz-Suche' (ID: 957) +2025-08-24 10:21:54,505 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Tourenplanung' (ID: 958) +2025-08-24 10:21:55,531 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Belohnungssystem' (ID: 959) +2025-08-24 10:21:56,552 - INFO - _get_or_create_tags:149 - ✅ Neuer Tag erstellt: 'Offline-Nutzung' (ID: 960) +2025-08-24 10:21:56,553 - INFO - _get_or_create_tags:158 - 🏷️ Tags verarbeitet: 5 Tag-IDs erstellt +2025-08-24 10:21:56,553 - INFO - _prepare_post_data:194 - 📝 Post-Daten vorbereitet: Titel='Campingplätze, Stellplätze und mehr finden : „Stellplatz-Radar“-App bekommt neue Funktionen', Tags=5, Kategorie=1 +2025-08-24 10:21:57,168 - INFO - upload_article:274 - ✅ WordPress-Upload erfolgreich: 'Campingplätze, Stellplätze und mehr finden : „Stellplatz-Radar“-App bekommt neue Funktionen' (ID: 3451) +2025-08-24 10:21:57,169 - INFO - upload_article:275 - 🔗 WordPress-URL: https://vanityontour.de/?p=3451 +2025-08-24 10:21:57,198 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:21:58,273 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:21:58,273 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:22:04,650 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:22:04,650 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:22:18,508 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:22:18,508 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:22:25,053 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:22:25,054 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:23:19,394 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:23:19,396 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:23:19,416 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:23:20,016 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:23:20,017 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:23:24,070 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:23:24,070 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:23:24,093 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:23:24,741 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:23:24,742 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:23:28,665 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:23:28,665 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:23:28,691 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:23:29,266 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:23:29,266 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:23:34,957 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:23:34,957 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 10:23:34,972 - INFO - save_articles:144 - ✅ 173 Artikel gespeichert +2025-08-24 10:23:35,545 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 10:23:35,545 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:25:18,745 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 12:25:18,748 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:25:30,654 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 12:25:30,654 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:25:44,151 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 12:25:44,152 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:34:34,587 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 12:34:34,588 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:34:34,590 - INFO - process_articles:268 - 🚀 Starte Artikel-Verarbeitung +2025-08-24 12:34:34,591 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:34:34,595 - INFO - load_articles:124 - ✅ 173 Artikel geladen +2025-08-24 12:34:34,595 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.camping-news.de/rss/ +2025-08-24 12:34:35,252 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Camping-News +2025-08-24 12:34:35,252 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-24 12:34:35,256 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 15 Jahre PremiumCamps +2025-08-24 12:34:35,256 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue Eriba Feeling und Novaline +2025-08-24 12:34:35,257 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Den eigenen Verbrauchszahlen auf der Spur +2025-08-24 12:34:35,258 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Abenteuer für die Kleinen, Entspannung für +die Großen +2025-08-24 12:34:35,258 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Das weltweit größte Caravaning-Erlebnis +2025-08-24 12:34:35,259 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Komfort und Flexibilität für moderne Camper +2025-08-24 12:34:35,259 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Frühjahrsaktionen vom Verein WOHNmobil für Klimaschutz +2025-08-24 12:34:35,260 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Viel los auf dem Klaukenhof +2025-08-24 12:34:35,260 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping Resort Allweglehen bietet "Wellness plus" +2025-08-24 12:34:35,261 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EU-Führerscheinreform kommt +2025-08-24 12:34:35,261 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.camping-news.de/rss/ +2025-08-24 12:34:36,266 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/news +2025-08-24 12:34:36,832 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: News bei www.promobil.de +2025-08-24 12:34:36,833 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-24 12:34:36,833 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-24 12:34:36,833 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/termine-veranstaltungen-juni-juli/ (Versuch 1) +2025-08-24 12:34:37,689 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:37,691 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:37,693 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 649 Wörter +2025-08-24 12:34:37,693 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 649 Wörter +2025-08-24 12:34:37,693 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-24 12:34:37,694 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-24 12:34:37,694 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ (Versuch 1) +2025-08-24 12:34:37,992 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:37,994 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:37,995 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1134 Wörter +2025-08-24 12:34:37,996 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1134 Wörter +2025-08-24 12:34:37,996 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-24 12:34:37,996 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-24 12:34:37,996 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/ (Versuch 1) +2025-08-24 12:34:38,444 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:38,445 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:38,446 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 874 Wörter +2025-08-24 12:34:38,447 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 874 Wörter +2025-08-24 12:34:38,447 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-24 12:34:38,447 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-24 12:34:38,447 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/ (Versuch 1) +2025-08-24 12:34:39,357 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:39,358 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:39,359 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 452 Wörter +2025-08-24 12:34:39,359 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 452 Wörter +2025-08-24 12:34:39,359 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-24 12:34:39,360 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-24 12:34:39,360 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ (Versuch 1) +2025-08-24 12:34:39,787 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:39,788 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:39,790 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1546 Wörter +2025-08-24 12:34:39,790 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1546 Wörter +2025-08-24 12:34:39,791 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-24 12:34:39,791 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-24 12:34:39,791 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/ (Versuch 1) +2025-08-24 12:34:40,289 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:40,289 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:40,289 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 136 Wörter +2025-08-24 12:34:40,290 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 136 Wörter +2025-08-24 12:34:40,290 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-24 12:34:40,290 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-24 12:34:40,290 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/top-10-clever-campen-videos-2024/ (Versuch 1) +2025-08-24 12:34:41,843 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:41,844 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:41,844 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:34:41,845 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 18 Paragraphen +2025-08-24 12:34:41,845 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:34:41,848 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-24 12:34:41,848 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-24 12:34:41,848 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-24 12:34:41,848 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/ (Versuch 1) +2025-08-24 12:34:42,638 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:42,640 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:42,643 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1870 Wörter +2025-08-24 12:34:42,643 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1870 Wörter +2025-08-24 12:34:42,643 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-24 12:34:42,644 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-24 12:34:42,644 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/ (Versuch 1) +2025-08-24 12:34:43,069 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:43,071 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:43,073 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1796 Wörter +2025-08-24 12:34:43,074 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1796 Wörter +2025-08-24 12:34:43,074 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-24 12:34:43,074 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-24 12:34:43,074 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ (Versuch 1) +2025-08-24 12:34:43,436 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:43,437 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:43,438 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 942 Wörter +2025-08-24 12:34:43,438 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 942 Wörter +2025-08-24 12:34:43,439 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-24 12:34:43,439 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-24 12:34:43,439 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/ (Versuch 1) +2025-08-24 12:34:44,580 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:44,581 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:44,581 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 416 Wörter +2025-08-24 12:34:44,582 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 416 Wörter +2025-08-24 12:34:44,582 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-24 12:34:44,582 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingbus Rocket Camper Ryzon beim Weltrekord: Jonas Deichmanns Camper für Ironman-Rekord +2025-08-24 12:34:44,583 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-24 12:34:44,583 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/ (Versuch 1) +2025-08-24 12:34:45,232 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:45,233 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:45,234 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 499 Wörter +2025-08-24 12:34:45,234 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 499 Wörter +2025-08-24 12:34:45,234 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-24 12:34:45,235 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-24 12:34:45,235 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/ (Versuch 1) +2025-08-24 12:34:46,657 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:46,659 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:46,660 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 894 Wörter +2025-08-24 12:34:46,660 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 894 Wörter +2025-08-24 12:34:46,661 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-24 12:34:46,661 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-24 12:34:46,661 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/can-kasim-dogan-interview-westfalia/ (Versuch 1) +2025-08-24 12:34:47,643 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:47,644 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:47,645 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 599 Wörter +2025-08-24 12:34:47,646 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 599 Wörter +2025-08-24 12:34:47,646 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-24 12:34:47,646 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-24 12:34:47,646 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/ (Versuch 1) +2025-08-24 12:34:48,298 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:48,300 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:48,301 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 639 Wörter +2025-08-24 12:34:48,301 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 639 Wörter +2025-08-24 12:34:48,302 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-24 12:34:48,302 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-24 12:34:48,302 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-frankfurt/ (Versuch 1) +2025-08-24 12:34:49,285 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:49,287 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:49,288 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 691 Wörter +2025-08-24 12:34:49,289 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 691 Wörter +2025-08-24 12:34:49,289 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-24 12:34:49,289 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-24 12:34:49,289 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/ (Versuch 1) +2025-08-24 12:34:50,849 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:50,851 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:50,853 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 923 Wörter +2025-08-24 12:34:50,853 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 923 Wörter +2025-08-24 12:34:50,853 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-24 12:34:50,854 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-24 12:34:50,854 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/camper-radio-radiosender-caravan-fm/ (Versuch 1) +2025-08-24 12:34:51,762 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:51,763 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:51,764 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 258 Wörter +2025-08-24 12:34:51,764 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 258 Wörter +2025-08-24 12:34:51,764 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-24 12:34:51,765 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-24 12:34:51,765 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/ (Versuch 1) +2025-08-24 12:34:52,579 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:34:52,580 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:52,581 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:34:52,581 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 8 Paragraphen +2025-08-24 12:34:52,581 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:34:52,584 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-24 12:34:52,585 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-24 12:34:52,585 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/news +2025-08-24 12:34:53,590 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/ratgeber +2025-08-24 12:34:54,224 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: ratgeber bei www.promobil.de +2025-08-24 12:34:54,224 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-24 12:34:54,225 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 5 Buchtipps für Campingfans: Spannende und lustige Bücher rund ums Camping +2025-08-24 12:34:54,227 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingplätze, Stellplätze und mehr finden : „Stellplatz-Radar“-App bekommt neue Funktionen +2025-08-24 12:34:54,228 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrzeugtechnik am Wohnmobil im Detail: Windschutzscheiben sind längst mehr als Glas +2025-08-24 12:34:54,229 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper +2025-08-24 12:34:54,229 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum perfekten Campingtag: Wo verbringen Sie den perfekten Campingurlaub? +2025-08-24 12:34:54,230 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-24 12:34:54,231 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper +2025-08-24 12:34:54,232 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Regeln auf Frankreichs Autobahnen im Pannenfall: Kein Schutz durch ADAC & Co. auf Autobahnen +2025-08-24 12:34:54,232 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht? +2025-08-24 12:34:54,233 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box +2025-08-24 12:34:54,234 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Film-Stunt mit Caravan – wie realistisch ist das?: Sexsymbol Jensen Ackles wagt Stunt auf Wohnwagen +2025-08-24 12:34:54,235 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CLEVER CAMPEN Podcast Folge 40: Gravelbikes und Camping – die beste Kombi? +2025-08-24 12:34:54,235 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Stellplatz-Radar Sommeraktion 2025: 30 Tage Stellplatz-Radar PLUS gratis testen +2025-08-24 12:34:54,236 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Digitaler Fahrzeugschein für Camper: promobil testet den digitalen Fahrzeugschein +2025-08-24 12:34:54,237 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Badezimmer beim Camping - Umfrage: Welches Bad brauchen Sie im Wohnmobil? +2025-08-24 12:34:54,238 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum Kaffeegenuss beim Camping: So kochen Sie am liebsten Ihren Kaffee +2025-08-24 12:34:54,239 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zwei Menschen, zwei Meinungen: Das Mietbad spaltet die Campingwelt +2025-08-24 12:34:54,240 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zubehör auf der größten Campingmesse kaufen: Deshalb müssen Zubehör-Shopper zum Caravan Salon +2025-08-24 12:34:54,241 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tipps für die größte Camping-Messe Deutschlands: Darum dürfen Sie den Caravan Salon nicht verpassen +2025-08-24 12:34:54,243 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Sommerhitze im Wohnmobil & Wohnwagen: Die besten Tipps gegen Hitze im Camper +2025-08-24 12:34:54,243 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/ratgeber +2025-08-24 12:34:55,248 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-24 12:34:55,731 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach camping +2025-08-24 12:34:55,731 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-24 12:34:55,733 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern +2025-08-24 12:34:55,734 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-24 12:34:55,735 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: IFA 2025: Jackery präsentiert neue 500-Watt-Powerstation im flachen Format, Solardachziegel und DIY-Balkonkraftwerk mit integriertem Brandschutzsystem +2025-08-24 12:34:55,736 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Inklusiver Campingurlaub am Gardasee +2025-08-24 12:34:55,736 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/153661/6094377 (Versuch 1) +2025-08-24 12:34:56,227 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:56,228 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 616 Wörter +2025-08-24 12:34:56,229 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 616 Wörter +2025-08-24 12:34:56,229 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Inklusiver Campingurlaub am Gardasee +2025-08-24 12:34:56,230 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neuheiten-Feuerwerk bei vanexxt auf dem Caravan Salon Düsseldorf 2025 +2025-08-24 12:34:56,230 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-24 12:34:56,230 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/170000/6091414 (Versuch 1) +2025-08-24 12:34:56,707 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:56,707 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 191 Wörter +2025-08-24 12:34:56,708 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 191 Wörter +2025-08-24 12:34:56,708 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-24 12:34:56,710 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 50 Jahre ADAC Tourset: Vom Kartenstapel zum digitalen Reisebegleiter / Erfolgreicher Reisebegleiter / 657.000 Toursets in 2024 bestellt +2025-08-24 12:34:56,711 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: RTLZWEI: Erfolgreicher Montag mit "Bella Italia - Camping auf Deutsch" +2025-08-24 12:34:56,711 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-24 12:34:56,711 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-24 12:34:57,013 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:57,013 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-24 12:34:57,013 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-24 12:34:57,014 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: So ist man beim Camping richtig versichert +2025-08-24 12:34:57,014 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Family Spots: Diese Reiseziele begeistern Groß und Klein +2025-08-24 12:34:57,014 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/102577/6085137 (Versuch 1) +2025-08-24 12:34:57,353 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:57,355 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 1226 Wörter +2025-08-24 12:34:57,356 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1226 Wörter +2025-08-24 12:34:57,356 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Family Spots: Diese Reiseziele begeistern Groß und Klein +2025-08-24 12:34:57,356 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-24 12:34:58,362 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-24 12:34:58,814 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil +2025-08-24 12:34:58,814 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-24 12:34:58,817 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fast jeder Zweite träumt vom Van-Life / HEM-Umfrage zeigt: Das Fahrzeug wird immer häufiger zur mobilen Unterkunft +2025-08-24 12:34:58,817 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: TÜV-Verband: Neues Merkblatt zum Anbau von Solaranlagen an Wohnmobilen +2025-08-24 12:34:58,817 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/65031/6100268 (Versuch 1) +2025-08-24 12:34:59,284 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:59,285 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 576 Wörter +2025-08-24 12:34:59,286 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 576 Wörter +2025-08-24 12:34:59,287 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: TÜV-Verband: Neues Merkblatt zum Anbau von Solaranlagen an Wohnmobilen +2025-08-24 12:34:59,288 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Akku leer: Gefahren beim Laden von E-Bikes +2025-08-24 12:34:59,289 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-24 12:34:59,290 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Maximale Flexibilität trifft volle Power: Intelligente Tiefenreinigung ohne Kabel mit der PURE ONE S Serie von Tineco +2025-08-24 12:34:59,290 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Urlaub mit dem Wohnmobil: Was tun bei Panne oder Unfall +2025-08-24 12:34:59,291 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-24 12:34:59,291 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/105254/6091837 (Versuch 1) +2025-08-24 12:34:59,666 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:34:59,668 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-24 12:34:59,668 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-24 12:34:59,668 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-24 12:35:00,137 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 12:35:00,138 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-24 12:35:00,138 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-24 12:35:00,138 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: So ist man beim Camping richtig versichert +2025-08-24 12:35:00,139 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Trotz Camper-Hype: Der Pkw ist die unangefochtene Nummer 1 für Sommerreisen +2025-08-24 12:35:00,139 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Doppelfolge am 24. Juli "Oksana & Family - Alles auf Anfang": Abwasserprobleme, Jobsuche und Tonstudiobesuch +2025-08-24 12:35:00,139 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-24 12:35:01,144 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://caravan-news.de/rss/schlagzeilen.php +2025-08-24 12:35:01,501 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: CARAVAN-NEWS.de +2025-08-24 12:35:01,502 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://caravan-news.de/rss/schlagzeilen.php +2025-08-24 12:35:02,506 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-24 12:35:03,268 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Campingplatz +2025-08-24 12:35:03,268 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-24 12:35:03,268 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Wanderin stürzt in Inzigkofen in Felsspalte und verletzt sich schwer - SWR +2025-08-24 12:35:03,268 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/rettungseinsatz-verunfallte-wanderin-auf-gespaltenem-felsen-in-inzigkofen-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1gMED6SXGchOupYUXtrmm5 (Versuch 1) +2025-08-24 12:35:03,561 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:03,561 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:03,562 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:03,562 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/rettungseinsatz-verunfallte-wanderin-auf-gespaltenem-felsen-in-inzigkofen-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1gMED6SXGchOupYUXtrmm5 +2025-08-24 12:35:03,566 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/rettungseinsatz-verunfallte-wanderin-auf-gespaltenem-felsen-in-inzigkofen-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1gMED6SXGchOupYUXtrmm5 +2025-08-24 12:35:03,900 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 12:35:03,901 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/rettungseinsatz-verunfallte-wanderin-auf-gespaltenem-felsen-in-inzigkofen-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1gMED6SXGchOupYUXtrmm5 +2025-08-24 12:35:03,901 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Wanderin stürzt in Inzigkofen in Felsspalte und verletzt sich schwer - SWR' extrahiert +2025-08-24 12:35:03,902 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Wanderin stürzt in Inzigkofen in Felsspalte und verletzt sich schwer - SWR +2025-08-24 12:35:03,902 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Feuerwehr-Großeinsatz: Brand auf Campingplatz - Waldsee/Altrip - DIE RHEINPFALZ +2025-08-24 12:35:03,902 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.rheinpfalz.de/lokal/rhein-pfalz-kreis_artikel,-feuerwehr-gro%25C3%259Feinsatz-brand-auf-campingplatz-_arid,5805271.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1TSMKiXF4mmTlvxWL7YX5l (Versuch 1) +2025-08-24 12:35:04,123 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:04,124 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:04,124 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:04,124 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.rheinpfalz.de/lokal/rhein-pfalz-kreis_artikel,-feuerwehr-gro%25C3%259Feinsatz-brand-auf-campingplatz-_arid,5805271.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1TSMKiXF4mmTlvxWL7YX5l +2025-08-24 12:35:04,128 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.rheinpfalz.de/lokal/rhein-pfalz-kreis_artikel,-feuerwehr-gro%25C3%259Feinsatz-brand-auf-campingplatz-_arid,5805271.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1TSMKiXF4mmTlvxWL7YX5l +2025-08-24 12:35:04,491 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 12:35:04,491 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.rheinpfalz.de/lokal/rhein-pfalz-kreis_artikel,-feuerwehr-gro%25C3%259Feinsatz-brand-auf-campingplatz-_arid,5805271.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1TSMKiXF4mmTlvxWL7YX5l +2025-08-24 12:35:04,492 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Feuerwehr-Großeinsatz: Brand auf Campingplatz - Waldsee/Altrip - DIE RHEINPFALZ' extrahiert +2025-08-24 12:35:04,492 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Feuerwehr-Großeinsatz: Brand auf Campingplatz - Waldsee/Altrip - DIE RHEINPFALZ +2025-08-24 12:35:04,492 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Campingplatz Rheinblick in Baumberg: Beliebte Anlage stets ausgebucht - ANTENNE NRW +2025-08-24 12:35:04,493 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://antenne.nrw/nrw/campingplatz-rheinblick-in-baumberg-beliebte-anlage-stets-ausgebucht/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2SXFc61ANwrL7rZl7c_Nfl (Versuch 1) +2025-08-24 12:35:04,833 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:04,834 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:04,835 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:04,835 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://antenne.nrw/nrw/campingplatz-rheinblick-in-baumberg-beliebte-anlage-stets-ausgebucht/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2SXFc61ANwrL7rZl7c_Nfl +2025-08-24 12:35:04,838 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://antenne.nrw/nrw/campingplatz-rheinblick-in-baumberg-beliebte-anlage-stets-ausgebucht/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2SXFc61ANwrL7rZl7c_Nfl +2025-08-24 12:35:05,063 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 12:35:05,064 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://antenne.nrw/nrw/campingplatz-rheinblick-in-baumberg-beliebte-anlage-stets-ausgebucht/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2SXFc61ANwrL7rZl7c_Nfl +2025-08-24 12:35:05,064 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Campingplatz Rheinblick in Baumberg: Beliebte Anlage stets ausgebucht - ANTENNE NRW' extrahiert +2025-08-24 12:35:05,064 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Campingplatz Rheinblick in Baumberg: Beliebte Anlage stets ausgebucht - ANTENNE NRW +2025-08-24 12:35:05,065 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Bauernregeln für den September 2025: Prognose im 100-jährigen Kalender hat es in sich +2025-08-24 12:35:05,065 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bauernregeln-fuer-den-september-2025-prognose-im-100-jaehrigen-kalender-hat-es-in-sich-93896711.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3Kgg_g2rdEMvf_9AOgPtGj (Versuch 1) +2025-08-24 12:35:05,354 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:05,355 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:05,355 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:05,355 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bauernregeln-fuer-den-september-2025-prognose-im-100-jaehrigen-kalender-hat-es-in-sich-93896711.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3Kgg_g2rdEMvf_9AOgPtGj +2025-08-24 12:35:05,357 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bauernregeln-fuer-den-september-2025-prognose-im-100-jaehrigen-kalender-hat-es-in-sich-93896711.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3Kgg_g2rdEMvf_9AOgPtGj +2025-08-24 12:35:05,573 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 12:35:05,573 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bauernregeln-fuer-den-september-2025-prognose-im-100-jaehrigen-kalender-hat-es-in-sich-93896711.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3Kgg_g2rdEMvf_9AOgPtGj +2025-08-24 12:35:05,573 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Bauernregeln für den September 2025: Prognose im 100-jährigen Kalender hat es in sich' extrahiert +2025-08-24 12:35:05,573 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Bauernregeln für den September 2025: Prognose im 100-jährigen Kalender hat es in sich +2025-08-24 12:35:05,574 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping auf Schloss Sigrön: Natururlaub mit Stil in Brandenburg - AUTO BILD +2025-08-24 12:35:05,574 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.autobild.de/artikel/luxus-camping-auf-schloss-sigroen-28240471.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zNVAffLcLpjFYvlSTrl2J (Versuch 1) +2025-08-24 12:35:05,880 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:05,881 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:05,881 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:05,882 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.autobild.de/artikel/luxus-camping-auf-schloss-sigroen-28240471.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zNVAffLcLpjFYvlSTrl2J +2025-08-24 12:35:05,884 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping auf Schloss Sigrön: Natururlaub mit Stil in Brandenburg - AUTO BILD +2025-08-24 12:35:05,884 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Baden-Württemberg punktet mit einem der schönsten Wellness-Campingplätze - FNP +2025-08-24 12:35:05,885 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fnp.de/deutschland/wellness-campingplatz-schoenster-europas-baden-wuerttemberg-schwarzwaelder-hof-zr-93897610.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0B3Cmtfk2_cSBV9jpW2E29 (Versuch 1) +2025-08-24 12:35:06,120 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:06,121 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:06,121 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:06,121 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fnp.de/deutschland/wellness-campingplatz-schoenster-europas-baden-wuerttemberg-schwarzwaelder-hof-zr-93897610.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0B3Cmtfk2_cSBV9jpW2E29 +2025-08-24 12:35:06,125 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Baden-Württemberg punktet mit einem der schönsten Wellness-Campingplätze - FNP +2025-08-24 12:35:06,125 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Bleibt häufig unbemerkt: Problematischer Trend bei Schulausflügen breitet sich aus +2025-08-24 12:35:06,126 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bleibt-haeufig-unbemerkt-problematischer-trend-bei-schulausfluegen-breitet-sich-aus-zr-93893032.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0gk8c4QL1MtBwuHQJQHYXL (Versuch 1) +2025-08-24 12:35:06,408 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:06,409 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:06,409 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:06,409 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bleibt-haeufig-unbemerkt-problematischer-trend-bei-schulausfluegen-breitet-sich-aus-zr-93893032.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0gk8c4QL1MtBwuHQJQHYXL +2025-08-24 12:35:06,413 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Bleibt häufig unbemerkt: Problematischer Trend bei Schulausflügen breitet sich aus +2025-08-24 12:35:06,413 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Falkensteiner Favorit - Containerdorf als Nächtigungskrösus Klagenfurts | krone.at +2025-08-24 12:35:06,414 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.krone.at/3876891&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1woffiV_WLFd90nrB2FkoT (Versuch 1) +2025-08-24 12:35:06,641 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:06,641 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:06,642 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:06,642 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.krone.at/3876891&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1woffiV_WLFd90nrB2FkoT +2025-08-24 12:35:06,645 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Falkensteiner Favorit - Containerdorf als Nächtigungskrösus Klagenfurts | krone.at +2025-08-24 12:35:06,646 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Kirche auf dem Campingplatz - Erzbistum Freiburg +2025-08-24 12:35:06,646 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.ebfr.de/detail/nachricht/id/227960-kirche-auf-dem-campingplatz/%3Fcb-id%3D12338393&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l9x3XKrza6eMUdU7OgV2Y (Versuch 1) +2025-08-24 12:35:07,055 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:07,056 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:07,056 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:07,056 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.ebfr.de/detail/nachricht/id/227960-kirche-auf-dem-campingplatz/%3Fcb-id%3D12338393&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l9x3XKrza6eMUdU7OgV2Y +2025-08-24 12:35:07,059 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.ebfr.de/detail/nachricht/id/227960-kirche-auf-dem-campingplatz/%3Fcb-id%3D12338393&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l9x3XKrza6eMUdU7OgV2Y +2025-08-24 12:35:07,458 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 12:35:07,459 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.ebfr.de/detail/nachricht/id/227960-kirche-auf-dem-campingplatz/%3Fcb-id%3D12338393&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l9x3XKrza6eMUdU7OgV2Y +2025-08-24 12:35:07,460 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Kirche auf dem Campingplatz - Erzbistum Freiburg' extrahiert +2025-08-24 12:35:07,460 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Kirche auf dem Campingplatz - Erzbistum Freiburg +2025-08-24 12:35:07,460 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Letzter Ausweg Campingplatz - Flucht aus der Großstadt - Programme TV ce soir - Télérama +2025-08-24 12:35:07,460 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://television.telerama.fr/tele/documentaire/letzter-ausweg-campingplatz-flucht-aus-der-gro-stadt-1-386085864.php&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0yphKSHd_DWg5hgH0yY59p (Versuch 1) +2025-08-24 12:35:07,688 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:07,689 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:07,689 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:07,690 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://television.telerama.fr/tele/documentaire/letzter-ausweg-campingplatz-flucht-aus-der-gro-stadt-1-386085864.php&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0yphKSHd_DWg5hgH0yY59p +2025-08-24 12:35:07,693 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://television.telerama.fr/tele/documentaire/letzter-ausweg-campingplatz-flucht-aus-der-gro-stadt-1-386085864.php&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0yphKSHd_DWg5hgH0yY59p +2025-08-24 12:35:08,131 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 12:35:08,131 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://television.telerama.fr/tele/documentaire/letzter-ausweg-campingplatz-flucht-aus-der-gro-stadt-1-386085864.php&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0yphKSHd_DWg5hgH0yY59p +2025-08-24 12:35:08,132 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Letzter Ausweg Campingplatz - Flucht aus der Großstadt - Programme TV ce soir - Télérama' extrahiert +2025-08-24 12:35:08,132 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Letzter Ausweg Campingplatz - Flucht aus der Großstadt - Programme TV ce soir - Télérama +2025-08-24 12:35:08,133 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Markanter Umschwung steht bevor – Am 27. August dreht sich das Wetter erneut +2025-08-24 12:35:08,133 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/sich-das-wetter-erneut-naechster-markanter-umschwung-bevor-am-27-august-dreht-zr-93893449.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ML-ydsKFV3aAS_kW-OJoY (Versuch 1) +2025-08-24 12:35:08,502 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:08,503 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:08,503 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:08,503 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/sich-das-wetter-erneut-naechster-markanter-umschwung-bevor-am-27-august-dreht-zr-93893449.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ML-ydsKFV3aAS_kW-OJoY +2025-08-24 12:35:08,507 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Markanter Umschwung steht bevor – Am 27. August dreht sich das Wetter erneut +2025-08-24 12:35:08,508 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Reportage: Sommerparadies Bodensee - Camping in Gohren - SWR Aktuell +2025-08-24 12:35:08,508 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/sommerparadies-bodensee-dokumentation-vom-campingplatz-gohren-bei-kressbronn-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3dRHXspfNHNEiPRBrJOeLi (Versuch 1) +2025-08-24 12:35:08,732 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:08,733 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:08,733 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:08,733 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/sommerparadies-bodensee-dokumentation-vom-campingplatz-gohren-bei-kressbronn-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3dRHXspfNHNEiPRBrJOeLi +2025-08-24 12:35:08,736 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Reportage: Sommerparadies Bodensee - Camping in Gohren - SWR Aktuell +2025-08-24 12:35:08,737 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Im Video: Wie Nadine Zappe Marmeladenglasmomente auf ihrem Campingplatz schafft +2025-08-24 12:35:08,737 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nordschleswiger.dk/de/nordschleswig-hadersleben/im-video-wie-nadine-zappe-marmeladenglasmomente-ihrem-campingplatz&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0GFYeBShFgu1NUoM6G-5G_ (Versuch 1) +2025-08-24 12:35:09,026 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:09,027 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:09,027 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:09,027 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.nordschleswiger.dk/de/nordschleswig-hadersleben/im-video-wie-nadine-zappe-marmeladenglasmomente-ihrem-campingplatz&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0GFYeBShFgu1NUoM6G-5G_ +2025-08-24 12:35:09,030 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Im Video: Wie Nadine Zappe Marmeladenglasmomente auf ihrem Campingplatz schafft +2025-08-24 12:35:09,031 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hund bei Eisenhüttenstadt: Badestellen in der Region – wo Hunde erlaubt sind - MOZ.de +2025-08-24 12:35:09,031 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.moz.de/lokales/eisenhuettenstadt/hund-in-eisenhuettenstadt-badestellen-in-der-region-wo-hunde-erlaubt-sind-78262165.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0AJpWSxdJOcPug6TRkVtzZ (Versuch 1) +2025-08-24 12:35:09,248 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:09,248 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:09,248 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:09,249 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.moz.de/lokales/eisenhuettenstadt/hund-in-eisenhuettenstadt-badestellen-in-der-region-wo-hunde-erlaubt-sind-78262165.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0AJpWSxdJOcPug6TRkVtzZ +2025-08-24 12:35:09,251 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hund bei Eisenhüttenstadt: Badestellen in der Region – wo Hunde erlaubt sind - MOZ.de +2025-08-24 12:35:09,251 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Beliebtes Medikament löst Krebs aus – Forschende entschlüsseln rätselhaften Mechanismus +2025-08-24 12:35:09,251 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/brustkrebs-medikament-loest-gebaermutterkrebs-forschende-entschluesseln-raetselhaften-mechanismus-93897055.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw29FN0GWoPTgcf0krxruWOo (Versuch 1) +2025-08-24 12:35:09,550 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:09,551 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:09,551 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:09,552 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/brustkrebs-medikament-loest-gebaermutterkrebs-forschende-entschluesseln-raetselhaften-mechanismus-93897055.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw29FN0GWoPTgcf0krxruWOo +2025-08-24 12:35:09,556 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Beliebtes Medikament löst Krebs aus – Forschende entschlüsseln rätselhaften Mechanismus +2025-08-24 12:35:09,557 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Massive Unwetter an Adria-Küste: Sintflutartige Regenfälle, Hagel und Sturm über Italien ... +2025-08-24 12:35:09,557 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/und-sturm-ueber-italien-und-kroatien-massive-unwetter-an-adria-kueste-sintflutartige-regenfaelle-hagel-zr-93892020.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1nftLRtaIVhcLaTEABSHrB (Versuch 1) +2025-08-24 12:35:09,773 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:09,774 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:09,774 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:09,775 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/und-sturm-ueber-italien-und-kroatien-massive-unwetter-an-adria-kueste-sintflutartige-regenfaelle-hagel-zr-93892020.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1nftLRtaIVhcLaTEABSHrB +2025-08-24 12:35:09,778 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Massive Unwetter an Adria-Küste: Sintflutartige Regenfälle, Hagel und Sturm über Italien ... +2025-08-24 12:35:09,779 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hurrikan Erin rast über Atlantik – Überreste bescheren Europa völlig neues August-Wetter +2025-08-24 12:35:09,779 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/ueberreste-bescheren-europa-voellig-neues-august-wetter-hurrikan-erin-rast-ueber-atlantik-zr-93891473.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3MwCg1CMlAsF_p3SDGs51a (Versuch 1) +2025-08-24 12:35:10,075 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:10,076 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:10,076 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:10,076 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/ueberreste-bescheren-europa-voellig-neues-august-wetter-hurrikan-erin-rast-ueber-atlantik-zr-93891473.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3MwCg1CMlAsF_p3SDGs51a +2025-08-24 12:35:10,079 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hurrikan Erin rast über Atlantik – Überreste bescheren Europa völlig neues August-Wetter +2025-08-24 12:35:10,080 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Grabenstätt: Urlauberin verletzt sich bei Auffahrunfall - Bayernwelle +2025-08-24 12:35:10,080 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.bayernwelle.de/grabenstaett-urlauberin-verletzt-sich-bei-auffahrunfall-181471/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zpwbOIg41UNO80I-NPAJa (Versuch 1) +2025-08-24 12:35:10,300 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:10,300 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:10,300 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:10,300 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.bayernwelle.de/grabenstaett-urlauberin-verletzt-sich-bei-auffahrunfall-181471/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zpwbOIg41UNO80I-NPAJa +2025-08-24 12:35:10,302 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Grabenstätt: Urlauberin verletzt sich bei Auffahrunfall - Bayernwelle +2025-08-24 12:35:10,302 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Größter Campingplatz Europas knietief unter Wasser – Deutsche kennen ihn aus TV-Show +2025-08-24 12:35:10,302 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/groesster-campingplatz-europas-knietief-unter-wasser-deutsche-kennen-ihn-aus-tv-show-93897475.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2oJIq2dgPq8t0LP0XDZdKi (Versuch 1) +2025-08-24 12:35:10,597 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:10,597 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:10,598 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:10,598 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/groesster-campingplatz-europas-knietief-unter-wasser-deutsche-kennen-ihn-aus-tv-show-93897475.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2oJIq2dgPq8t0LP0XDZdKi +2025-08-24 12:35:10,600 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Größter Campingplatz Europas knietief unter Wasser – Deutsche kennen ihn aus TV-Show +2025-08-24 12:35:10,600 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Größter Campingplatz Europas knietief unter Wasser – Deutsche kennen ihn aus TV-Show +2025-08-24 12:35:10,600 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/welt/groesster-campingplatz-europas-knietief-unter-wasser-deutsche-kennen-ihn-aus-tv-show-93897439.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0jViaY7obKQso9Kan2s9bu (Versuch 1) +2025-08-24 12:35:10,808 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:10,809 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:10,809 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:10,809 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.merkur.de/welt/groesster-campingplatz-europas-knietief-unter-wasser-deutsche-kennen-ihn-aus-tv-show-93897439.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0jViaY7obKQso9Kan2s9bu +2025-08-24 12:35:10,812 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Größter Campingplatz Europas knietief unter Wasser – Deutsche kennen ihn aus TV-Show +2025-08-24 12:35:10,812 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 6 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-24 12:35:11,818 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-24 12:35:12,313 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Vanlife +2025-08-24 12:35:12,314 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-24 12:35:13,319 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-24 12:35:13,773 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Camping Termine 2024 +2025-08-24 12:35:13,773 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-24 12:35:14,779 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-24 12:35:15,318 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert - Camping Messe 2025 +2025-08-24 12:35:15,319 - INFO - fetch_and_process_feed:187 - 📰 1 Einträge gefunden +2025-08-24 12:35:15,320 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: In Düsseldorf schlägt das „Herz des Caravanings“ - Niederrhein Nachrichten +2025-08-24 12:35:15,320 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.niederrhein-nachrichten.de/nachrichten/in-duesseldorf-schlaegt-das-herz-des-caravanings-11957.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11bSejssd9woRFps5qaXVQ (Versuch 1) +2025-08-24 12:35:15,552 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 12:35:15,553 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 12:35:15,553 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 12:35:15,553 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.niederrhein-nachrichten.de/nachrichten/in-duesseldorf-schlaegt-das-herz-des-caravanings-11957.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11bSejssd9woRFps5qaXVQ +2025-08-24 12:35:15,557 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: In Düsseldorf schlägt das „Herz des Caravanings“ - Niederrhein Nachrichten +2025-08-24 12:35:15,558 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-24 12:35:16,598 - INFO - save_articles:144 - ✅ 179 Artikel gespeichert +2025-08-24 12:35:16,598 - INFO - process_articles:310 - 🎉 Verarbeitung abgeschlossen: 6 neue Artikel in 42.01s hinzugefügt +2025-08-24 12:35:17,695 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:35:17,696 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:35:26,462 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:35:26,463 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:35:32,795 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:35:32,796 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:35:58,472 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:35:58,472 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:36:27,960 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:36:27,961 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:36:27,983 - INFO - save_articles:144 - ✅ 179 Artikel gespeichert +2025-08-24 12:36:28,557 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:36:28,557 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:36:45,792 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:36:45,792 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:36:45,814 - INFO - save_articles:144 - ✅ 179 Artikel gespeichert +2025-08-24 12:36:46,373 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:36:46,373 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:36:53,032 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:36:53,033 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:36:53,064 - INFO - save_articles:144 - ✅ 179 Artikel gespeichert +2025-08-24 12:36:53,639 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:36:53,640 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:37:00,227 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:37:00,228 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:37:00,250 - INFO - save_articles:144 - ✅ 179 Artikel gespeichert +2025-08-24 12:37:00,820 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:37:00,821 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:37:04,670 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:37:04,670 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:37:04,692 - INFO - save_articles:144 - ✅ 179 Artikel gespeichert +2025-08-24 12:37:05,265 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:37:05,265 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:37:10,222 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:37:10,222 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:51:20,972 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:51:20,973 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 12:51:21,001 - INFO - save_articles:144 - ✅ 179 Artikel gespeichert +2025-08-24 12:51:21,656 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 12:51:21,656 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:44:20,962 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 14:44:20,964 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:50:51,769 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 14:50:51,769 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:51:02,077 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 14:51:02,078 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:51:34,824 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 14:51:34,824 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:51:48,532 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 14:51:48,532 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:51:48,538 - INFO - process_articles:268 - 🚀 Starte Artikel-Verarbeitung +2025-08-24 14:51:48,539 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:51:48,545 - INFO - load_articles:124 - ✅ 179 Artikel geladen +2025-08-24 14:51:48,546 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.camping-news.de/rss/ +2025-08-24 14:51:49,021 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Camping-News +2025-08-24 14:51:49,021 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-24 14:51:49,023 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 15 Jahre PremiumCamps +2025-08-24 14:51:49,024 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Der neue Eriba Feeling und Novaline +2025-08-24 14:51:49,025 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Den eigenen Verbrauchszahlen auf der Spur +2025-08-24 14:51:49,026 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Abenteuer für die Kleinen, Entspannung für +die Großen +2025-08-24 14:51:49,027 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Das weltweit größte Caravaning-Erlebnis +2025-08-24 14:51:49,028 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Komfort und Flexibilität für moderne Camper +2025-08-24 14:51:49,028 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Frühjahrsaktionen vom Verein WOHNmobil für Klimaschutz +2025-08-24 14:51:49,029 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Viel los auf dem Klaukenhof +2025-08-24 14:51:49,029 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping Resort Allweglehen bietet "Wellness plus" +2025-08-24 14:51:49,030 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EU-Führerscheinreform kommt +2025-08-24 14:51:49,030 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.camping-news.de/rss/ +2025-08-24 14:51:50,035 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/news +2025-08-24 14:51:50,625 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: News bei www.promobil.de +2025-08-24 14:51:50,625 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-24 14:51:50,626 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-24 14:51:50,626 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/termine-veranstaltungen-juni-juli/ (Versuch 1) +2025-08-24 14:51:51,515 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:51:51,517 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:51:51,518 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 649 Wörter +2025-08-24 14:51:51,519 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 649 Wörter +2025-08-24 14:51:51,520 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-24 14:51:51,520 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-24 14:51:51,521 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ (Versuch 1) +2025-08-24 14:51:51,943 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:51:51,944 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:51:51,946 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1134 Wörter +2025-08-24 14:51:51,946 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1134 Wörter +2025-08-24 14:51:51,947 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-24 14:51:51,947 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-24 14:51:51,947 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/ (Versuch 1) +2025-08-24 14:51:53,695 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:51:53,696 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:51:53,697 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 874 Wörter +2025-08-24 14:51:53,698 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 874 Wörter +2025-08-24 14:51:53,698 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-24 14:51:53,698 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-24 14:51:53,698 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/ (Versuch 1) +2025-08-24 14:51:54,495 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:51:54,496 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:51:54,497 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 452 Wörter +2025-08-24 14:51:54,497 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 452 Wörter +2025-08-24 14:51:54,498 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-24 14:51:54,498 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-24 14:51:54,498 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ (Versuch 1) +2025-08-24 14:51:55,096 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:51:55,097 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:51:55,099 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1546 Wörter +2025-08-24 14:51:55,100 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1546 Wörter +2025-08-24 14:51:55,100 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-24 14:51:55,100 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-24 14:51:55,100 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/ (Versuch 1) +2025-08-24 14:51:55,632 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:51:55,633 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:51:55,633 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 136 Wörter +2025-08-24 14:51:55,633 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 136 Wörter +2025-08-24 14:51:55,633 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-24 14:51:55,633 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-24 14:51:55,634 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/top-10-clever-campen-videos-2024/ (Versuch 1) +2025-08-24 14:51:56,926 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:51:56,927 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:51:56,927 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:51:56,927 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 18 Paragraphen +2025-08-24 14:51:56,928 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:51:56,930 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-24 14:51:56,931 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-24 14:51:56,931 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-24 14:51:56,931 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/ (Versuch 1) +2025-08-24 14:51:57,831 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:51:57,833 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:51:57,835 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1870 Wörter +2025-08-24 14:51:57,836 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1870 Wörter +2025-08-24 14:51:57,836 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-24 14:51:57,837 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-24 14:51:57,837 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/ (Versuch 1) +2025-08-24 14:51:58,842 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:51:58,845 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:51:58,847 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1796 Wörter +2025-08-24 14:51:58,847 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1796 Wörter +2025-08-24 14:51:58,847 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-24 14:51:58,847 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-24 14:51:58,847 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ (Versuch 1) +2025-08-24 14:51:59,472 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:51:59,473 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:51:59,475 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 942 Wörter +2025-08-24 14:51:59,475 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 942 Wörter +2025-08-24 14:51:59,476 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-24 14:51:59,476 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-24 14:51:59,476 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/ (Versuch 1) +2025-08-24 14:52:01,376 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:01,377 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:01,378 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 416 Wörter +2025-08-24 14:52:01,378 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 416 Wörter +2025-08-24 14:52:01,379 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-24 14:52:01,379 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingbus Rocket Camper Ryzon beim Weltrekord: Jonas Deichmanns Camper für Ironman-Rekord +2025-08-24 14:52:01,379 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-24 14:52:01,379 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/ (Versuch 1) +2025-08-24 14:52:02,000 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:02,001 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:02,002 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 499 Wörter +2025-08-24 14:52:02,002 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 499 Wörter +2025-08-24 14:52:02,003 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-24 14:52:02,003 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-24 14:52:02,003 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/ (Versuch 1) +2025-08-24 14:52:03,273 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:03,275 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:03,276 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 894 Wörter +2025-08-24 14:52:03,277 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 894 Wörter +2025-08-24 14:52:03,277 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-24 14:52:03,277 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-24 14:52:03,277 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/can-kasim-dogan-interview-westfalia/ (Versuch 1) +2025-08-24 14:52:04,295 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:04,296 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:04,297 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 599 Wörter +2025-08-24 14:52:04,298 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 599 Wörter +2025-08-24 14:52:04,298 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-24 14:52:04,298 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-24 14:52:04,299 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/ (Versuch 1) +2025-08-24 14:52:05,125 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:05,126 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:05,127 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 639 Wörter +2025-08-24 14:52:05,127 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 639 Wörter +2025-08-24 14:52:05,128 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-24 14:52:05,128 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-24 14:52:05,128 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-frankfurt/ (Versuch 1) +2025-08-24 14:52:06,271 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:06,273 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:06,274 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 691 Wörter +2025-08-24 14:52:06,274 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 691 Wörter +2025-08-24 14:52:06,274 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-24 14:52:06,275 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-24 14:52:06,275 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/ (Versuch 1) +2025-08-24 14:52:07,247 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:07,248 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:07,250 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 923 Wörter +2025-08-24 14:52:07,250 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 923 Wörter +2025-08-24 14:52:07,250 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-24 14:52:07,250 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-24 14:52:07,250 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/camper-radio-radiosender-caravan-fm/ (Versuch 1) +2025-08-24 14:52:08,178 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:08,179 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:08,180 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 258 Wörter +2025-08-24 14:52:08,180 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 258 Wörter +2025-08-24 14:52:08,180 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-24 14:52:08,181 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-24 14:52:08,181 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/ (Versuch 1) +2025-08-24 14:52:08,963 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:08,964 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:08,965 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:08,965 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 8 Paragraphen +2025-08-24 14:52:08,965 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:08,968 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-24 14:52:08,969 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-24 14:52:08,969 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/news +2025-08-24 14:52:09,974 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/ratgeber +2025-08-24 14:52:10,923 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: ratgeber bei www.promobil.de +2025-08-24 14:52:10,923 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-24 14:52:10,924 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 5 Buchtipps für Campingfans: Spannende und lustige Bücher rund ums Camping +2025-08-24 14:52:10,926 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingplätze, Stellplätze und mehr finden : „Stellplatz-Radar“-App bekommt neue Funktionen +2025-08-24 14:52:10,927 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrzeugtechnik am Wohnmobil im Detail: Windschutzscheiben sind längst mehr als Glas +2025-08-24 14:52:10,928 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper +2025-08-24 14:52:10,928 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum perfekten Campingtag: Wo verbringen Sie den perfekten Campingurlaub? +2025-08-24 14:52:10,929 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-24 14:52:10,930 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper +2025-08-24 14:52:10,931 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Regeln auf Frankreichs Autobahnen im Pannenfall: Kein Schutz durch ADAC & Co. auf Autobahnen +2025-08-24 14:52:10,931 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht? +2025-08-24 14:52:10,932 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box +2025-08-24 14:52:10,933 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Film-Stunt mit Caravan – wie realistisch ist das?: Sexsymbol Jensen Ackles wagt Stunt auf Wohnwagen +2025-08-24 14:52:10,934 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CLEVER CAMPEN Podcast Folge 40: Gravelbikes und Camping – die beste Kombi? +2025-08-24 14:52:10,935 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Stellplatz-Radar Sommeraktion 2025: 30 Tage Stellplatz-Radar PLUS gratis testen +2025-08-24 14:52:10,935 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Digitaler Fahrzeugschein für Camper: promobil testet den digitalen Fahrzeugschein +2025-08-24 14:52:10,936 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Badezimmer beim Camping - Umfrage: Welches Bad brauchen Sie im Wohnmobil? +2025-08-24 14:52:10,936 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum Kaffeegenuss beim Camping: So kochen Sie am liebsten Ihren Kaffee +2025-08-24 14:52:10,937 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zwei Menschen, zwei Meinungen: Das Mietbad spaltet die Campingwelt +2025-08-24 14:52:10,938 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zubehör auf der größten Campingmesse kaufen: Deshalb müssen Zubehör-Shopper zum Caravan Salon +2025-08-24 14:52:10,939 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tipps für die größte Camping-Messe Deutschlands: Darum dürfen Sie den Caravan Salon nicht verpassen +2025-08-24 14:52:10,940 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Sommerhitze im Wohnmobil & Wohnwagen: Die besten Tipps gegen Hitze im Camper +2025-08-24 14:52:10,940 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/ratgeber +2025-08-24 14:52:11,945 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-24 14:52:12,486 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach camping +2025-08-24 14:52:12,486 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-24 14:52:12,487 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern +2025-08-24 14:52:12,489 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-24 14:52:12,490 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: IFA 2025: Jackery präsentiert neue 500-Watt-Powerstation im flachen Format, Solardachziegel und DIY-Balkonkraftwerk mit integriertem Brandschutzsystem +2025-08-24 14:52:12,491 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Inklusiver Campingurlaub am Gardasee +2025-08-24 14:52:12,491 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/153661/6094377 (Versuch 1) +2025-08-24 14:52:12,939 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:12,941 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 616 Wörter +2025-08-24 14:52:12,941 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 616 Wörter +2025-08-24 14:52:12,942 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Inklusiver Campingurlaub am Gardasee +2025-08-24 14:52:12,943 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neuheiten-Feuerwerk bei vanexxt auf dem Caravan Salon Düsseldorf 2025 +2025-08-24 14:52:12,943 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-24 14:52:12,943 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/170000/6091414 (Versuch 1) +2025-08-24 14:52:13,446 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:13,446 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 191 Wörter +2025-08-24 14:52:13,447 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 191 Wörter +2025-08-24 14:52:13,447 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-24 14:52:13,451 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 50 Jahre ADAC Tourset: Vom Kartenstapel zum digitalen Reisebegleiter / Erfolgreicher Reisebegleiter / 657.000 Toursets in 2024 bestellt +2025-08-24 14:52:13,451 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: RTLZWEI: Erfolgreicher Montag mit "Bella Italia - Camping auf Deutsch" +2025-08-24 14:52:13,452 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-24 14:52:13,452 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-24 14:52:13,954 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:13,955 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-24 14:52:13,956 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-24 14:52:13,956 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: So ist man beim Camping richtig versichert +2025-08-24 14:52:13,957 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Family Spots: Diese Reiseziele begeistern Groß und Klein +2025-08-24 14:52:13,957 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/102577/6085137 (Versuch 1) +2025-08-24 14:52:14,306 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:14,308 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 1226 Wörter +2025-08-24 14:52:14,309 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1226 Wörter +2025-08-24 14:52:14,310 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Family Spots: Diese Reiseziele begeistern Groß und Klein +2025-08-24 14:52:14,310 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-24 14:52:15,315 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-24 14:52:15,734 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil +2025-08-24 14:52:15,734 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-24 14:52:15,737 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fast jeder Zweite träumt vom Van-Life / HEM-Umfrage zeigt: Das Fahrzeug wird immer häufiger zur mobilen Unterkunft +2025-08-24 14:52:15,738 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: TÜV-Verband: Neues Merkblatt zum Anbau von Solaranlagen an Wohnmobilen +2025-08-24 14:52:15,738 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/65031/6100268 (Versuch 1) +2025-08-24 14:52:16,083 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:16,084 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 576 Wörter +2025-08-24 14:52:16,085 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 576 Wörter +2025-08-24 14:52:16,086 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: TÜV-Verband: Neues Merkblatt zum Anbau von Solaranlagen an Wohnmobilen +2025-08-24 14:52:16,087 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Akku leer: Gefahren beim Laden von E-Bikes +2025-08-24 14:52:16,088 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-24 14:52:16,089 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Maximale Flexibilität trifft volle Power: Intelligente Tiefenreinigung ohne Kabel mit der PURE ONE S Serie von Tineco +2025-08-24 14:52:16,090 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Urlaub mit dem Wohnmobil: Was tun bei Panne oder Unfall +2025-08-24 14:52:16,091 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-24 14:52:16,091 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/105254/6091837 (Versuch 1) +2025-08-24 14:52:16,371 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:16,372 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-24 14:52:16,372 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-24 14:52:16,372 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-24 14:52:16,850 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-24 14:52:16,851 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-24 14:52:16,852 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-24 14:52:16,852 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: So ist man beim Camping richtig versichert +2025-08-24 14:52:16,853 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Trotz Camper-Hype: Der Pkw ist die unangefochtene Nummer 1 für Sommerreisen +2025-08-24 14:52:16,855 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Doppelfolge am 24. Juli "Oksana & Family - Alles auf Anfang": Abwasserprobleme, Jobsuche und Tonstudiobesuch +2025-08-24 14:52:16,855 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-24 14:52:17,860 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://caravan-news.de/rss/schlagzeilen.php +2025-08-24 14:52:18,322 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: CARAVAN-NEWS.de +2025-08-24 14:52:18,322 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://caravan-news.de/rss/schlagzeilen.php +2025-08-24 14:52:19,327 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-24 14:52:19,985 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Campingplatz +2025-08-24 14:52:19,985 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-24 14:52:19,986 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Campingfreunde: Schauspielkomödie im Theater Fabelhaft - Lübeck live +2025-08-24 14:52:19,986 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.hl-live.de/text.php%3Fid%3D174396&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw249DjhpXTHiYIncHlUdDPR (Versuch 1) +2025-08-24 14:52:20,472 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:20,473 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:20,473 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:20,473 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.hl-live.de/text.php%3Fid%3D174396&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw249DjhpXTHiYIncHlUdDPR +2025-08-24 14:52:20,477 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.hl-live.de/text.php%3Fid%3D174396&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw249DjhpXTHiYIncHlUdDPR +2025-08-24 14:52:20,880 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 14:52:20,880 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.hl-live.de/text.php%3Fid%3D174396&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw249DjhpXTHiYIncHlUdDPR +2025-08-24 14:52:20,881 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Campingfreunde: Schauspielkomödie im Theater Fabelhaft - Lübeck live' extrahiert +2025-08-24 14:52:20,881 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Campingfreunde: Schauspielkomödie im Theater Fabelhaft - Lübeck live +2025-08-24 14:52:20,882 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: „Unumgänglich“: Insolvenz zwingt beliebtes Nordsee-Bad zur Schließung – zwei weitere wackeln +2025-08-24 14:52:20,882 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.hna.de/niedersachsen/schluss-trotz-insolvenz-nach-kosten-explosion-beliebte-baeder-an-der-nordsee-bangen-fuer-eins-ist-endgueltig-93897627.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0az_FaAh6V7hKPgd8NUW8L (Versuch 1) +2025-08-24 14:52:21,258 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:21,259 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:21,259 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:21,259 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.hna.de/niedersachsen/schluss-trotz-insolvenz-nach-kosten-explosion-beliebte-baeder-an-der-nordsee-bangen-fuer-eins-ist-endgueltig-93897627.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0az_FaAh6V7hKPgd8NUW8L +2025-08-24 14:52:21,261 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.hna.de/niedersachsen/schluss-trotz-insolvenz-nach-kosten-explosion-beliebte-baeder-an-der-nordsee-bangen-fuer-eins-ist-endgueltig-93897627.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0az_FaAh6V7hKPgd8NUW8L +2025-08-24 14:52:21,474 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 14:52:21,474 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.hna.de/niedersachsen/schluss-trotz-insolvenz-nach-kosten-explosion-beliebte-baeder-an-der-nordsee-bangen-fuer-eins-ist-endgueltig-93897627.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0az_FaAh6V7hKPgd8NUW8L +2025-08-24 14:52:21,475 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für '„Unumgänglich“: Insolvenz zwingt beliebtes Nordsee-Bad zur Schließung – zwei weitere wackeln' extrahiert +2025-08-24 14:52:21,475 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: „Unumgänglich“: Insolvenz zwingt beliebtes Nordsee-Bad zur Schließung – zwei weitere wackeln +2025-08-24 14:52:21,476 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Die Ruheoase im stillen Inselwinkel: So geht es auf dem ersten Campingplatz auf Mallorca zu +2025-08-24 14:52:21,476 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.mallorcamagazin.com/nachrichten/tourismus/2025/08/24/141169/die-ruheoase-stillen-inselwinkel-geht-auf-dem-ersten-campingplatz-auf-mallorca-zu.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3xWU_Q-zQrsTo6QcL_jTJN (Versuch 1) +2025-08-24 14:52:21,771 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:21,772 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:21,772 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:21,772 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.mallorcamagazin.com/nachrichten/tourismus/2025/08/24/141169/die-ruheoase-stillen-inselwinkel-geht-auf-dem-ersten-campingplatz-auf-mallorca-zu.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3xWU_Q-zQrsTo6QcL_jTJN +2025-08-24 14:52:21,774 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.mallorcamagazin.com/nachrichten/tourismus/2025/08/24/141169/die-ruheoase-stillen-inselwinkel-geht-auf-dem-ersten-campingplatz-auf-mallorca-zu.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3xWU_Q-zQrsTo6QcL_jTJN +2025-08-24 14:52:21,991 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 14:52:21,992 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.mallorcamagazin.com/nachrichten/tourismus/2025/08/24/141169/die-ruheoase-stillen-inselwinkel-geht-auf-dem-ersten-campingplatz-auf-mallorca-zu.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3xWU_Q-zQrsTo6QcL_jTJN +2025-08-24 14:52:21,992 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Die Ruheoase im stillen Inselwinkel: So geht es auf dem ersten Campingplatz auf Mallorca zu' extrahiert +2025-08-24 14:52:21,992 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Die Ruheoase im stillen Inselwinkel: So geht es auf dem ersten Campingplatz auf Mallorca zu +2025-08-24 14:52:21,993 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Geplanter Karten-Zwang sorgt für dicke Luft an der Ostsee - Nordkurier +2025-08-24 14:52:21,993 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nordkurier.de/regional/mecklenburg-vorpommern/geplanter-karten-zwang-sorgt-fuer-dicke-luft-an-der-ostsee-3864013&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1uwWy7IibmrXt4TIIcCHuT (Versuch 1) +2025-08-24 14:52:22,299 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:22,300 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:22,300 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:22,300 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.nordkurier.de/regional/mecklenburg-vorpommern/geplanter-karten-zwang-sorgt-fuer-dicke-luft-an-der-ostsee-3864013&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1uwWy7IibmrXt4TIIcCHuT +2025-08-24 14:52:22,304 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nordkurier.de/regional/mecklenburg-vorpommern/geplanter-karten-zwang-sorgt-fuer-dicke-luft-an-der-ostsee-3864013&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1uwWy7IibmrXt4TIIcCHuT +2025-08-24 14:52:22,527 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 14:52:22,527 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.nordkurier.de/regional/mecklenburg-vorpommern/geplanter-karten-zwang-sorgt-fuer-dicke-luft-an-der-ostsee-3864013&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1uwWy7IibmrXt4TIIcCHuT +2025-08-24 14:52:22,528 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Geplanter Karten-Zwang sorgt für dicke Luft an der Ostsee - Nordkurier' extrahiert +2025-08-24 14:52:22,528 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Geplanter Karten-Zwang sorgt für dicke Luft an der Ostsee - Nordkurier +2025-08-24 14:52:22,528 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Loch Ness in Schottland: Kind auf Campingplatz sexuell missbraucht - MSN +2025-08-24 14:52:22,529 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/loch-ness-in-schottland-kind-auf-campingplatz-sexuell-missbraucht/ar-AA1JLKJo&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1Jv92jULmjoLLuKh5FsN1C (Versuch 1) +2025-08-24 14:52:22,823 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:22,824 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:22,824 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:22,824 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/loch-ness-in-schottland-kind-auf-campingplatz-sexuell-missbraucht/ar-AA1JLKJo&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1Jv92jULmjoLLuKh5FsN1C +2025-08-24 14:52:22,828 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/loch-ness-in-schottland-kind-auf-campingplatz-sexuell-missbraucht/ar-AA1JLKJo&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1Jv92jULmjoLLuKh5FsN1C +2025-08-24 14:52:23,046 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 14:52:23,046 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/loch-ness-in-schottland-kind-auf-campingplatz-sexuell-missbraucht/ar-AA1JLKJo&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1Jv92jULmjoLLuKh5FsN1C +2025-08-24 14:52:23,047 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Loch Ness in Schottland: Kind auf Campingplatz sexuell missbraucht - MSN' extrahiert +2025-08-24 14:52:23,047 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Loch Ness in Schottland: Kind auf Campingplatz sexuell missbraucht - MSN +2025-08-24 14:52:23,047 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Wanderin stürzt in Inzigkofen in Felsspalte und verletzt sich schwer - SWR +2025-08-24 14:52:23,047 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/rettungseinsatz-verunfallte-wanderin-auf-gespaltenem-felsen-in-inzigkofen-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1gMED6SXGchOupYUXtrmm5 (Versuch 1) +2025-08-24 14:52:23,346 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:23,347 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:23,347 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:23,347 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/rettungseinsatz-verunfallte-wanderin-auf-gespaltenem-felsen-in-inzigkofen-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1gMED6SXGchOupYUXtrmm5 +2025-08-24 14:52:23,351 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Wanderin stürzt in Inzigkofen in Felsspalte und verletzt sich schwer - SWR +2025-08-24 14:52:23,351 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Feuerwehr-Großeinsatz: Brand auf Campingplatz - Waldsee/Altrip - DIE RHEINPFALZ +2025-08-24 14:52:23,351 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.rheinpfalz.de/lokal/rhein-pfalz-kreis_artikel,-feuerwehr-gro%25C3%259Feinsatz-brand-auf-campingplatz-_arid,5805271.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1TSMKiXF4mmTlvxWL7YX5l (Versuch 1) +2025-08-24 14:52:23,591 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:23,592 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:23,592 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:23,592 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.rheinpfalz.de/lokal/rhein-pfalz-kreis_artikel,-feuerwehr-gro%25C3%259Feinsatz-brand-auf-campingplatz-_arid,5805271.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1TSMKiXF4mmTlvxWL7YX5l +2025-08-24 14:52:23,595 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Feuerwehr-Großeinsatz: Brand auf Campingplatz - Waldsee/Altrip - DIE RHEINPFALZ +2025-08-24 14:52:23,596 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Campingplatz Rheinblick in Baumberg: Beliebte Anlage stets ausgebucht - ANTENNE NRW +2025-08-24 14:52:23,596 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://antenne.nrw/nrw/campingplatz-rheinblick-in-baumberg-beliebte-anlage-stets-ausgebucht/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2SXFc61ANwrL7rZl7c_Nfl (Versuch 1) +2025-08-24 14:52:23,881 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:23,882 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:23,882 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:23,882 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://antenne.nrw/nrw/campingplatz-rheinblick-in-baumberg-beliebte-anlage-stets-ausgebucht/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2SXFc61ANwrL7rZl7c_Nfl +2025-08-24 14:52:23,885 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingplatz Rheinblick in Baumberg: Beliebte Anlage stets ausgebucht - ANTENNE NRW +2025-08-24 14:52:23,886 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Bauernregeln für den September 2025: Prognose im 100-jährigen Kalender hat es in sich +2025-08-24 14:52:23,886 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bauernregeln-fuer-den-september-2025-prognose-im-100-jaehrigen-kalender-hat-es-in-sich-93896711.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3Kgg_g2rdEMvf_9AOgPtGj (Versuch 1) +2025-08-24 14:52:24,104 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:24,105 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:24,105 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:24,105 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bauernregeln-fuer-den-september-2025-prognose-im-100-jaehrigen-kalender-hat-es-in-sich-93896711.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3Kgg_g2rdEMvf_9AOgPtGj +2025-08-24 14:52:24,108 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Bauernregeln für den September 2025: Prognose im 100-jährigen Kalender hat es in sich +2025-08-24 14:52:24,110 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping auf Schloss Sigrön: Natururlaub mit Stil in Brandenburg - AUTO BILD +2025-08-24 14:52:24,110 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.autobild.de/artikel/luxus-camping-auf-schloss-sigroen-28240471.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zNVAffLcLpjFYvlSTrl2J (Versuch 1) +2025-08-24 14:52:24,396 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:24,397 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:24,397 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:24,397 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.autobild.de/artikel/luxus-camping-auf-schloss-sigroen-28240471.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0zNVAffLcLpjFYvlSTrl2J +2025-08-24 14:52:24,400 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping auf Schloss Sigrön: Natururlaub mit Stil in Brandenburg - AUTO BILD +2025-08-24 14:52:24,400 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Baden-Württemberg punktet mit einem der schönsten Wellness-Campingplätze - FNP +2025-08-24 14:52:24,401 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fnp.de/deutschland/wellness-campingplatz-schoenster-europas-baden-wuerttemberg-schwarzwaelder-hof-zr-93897610.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0B3Cmtfk2_cSBV9jpW2E29 (Versuch 1) +2025-08-24 14:52:24,659 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:24,660 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:24,660 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:24,660 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fnp.de/deutschland/wellness-campingplatz-schoenster-europas-baden-wuerttemberg-schwarzwaelder-hof-zr-93897610.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0B3Cmtfk2_cSBV9jpW2E29 +2025-08-24 14:52:24,662 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Baden-Württemberg punktet mit einem der schönsten Wellness-Campingplätze - FNP +2025-08-24 14:52:24,662 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Bleibt häufig unbemerkt: Problematischer Trend bei Schulausflügen breitet sich aus +2025-08-24 14:52:24,663 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bleibt-haeufig-unbemerkt-problematischer-trend-bei-schulausfluegen-breitet-sich-aus-zr-93893032.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0gk8c4QL1MtBwuHQJQHYXL (Versuch 1) +2025-08-24 14:52:25,026 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:25,027 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:25,027 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:25,027 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bleibt-haeufig-unbemerkt-problematischer-trend-bei-schulausfluegen-breitet-sich-aus-zr-93893032.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0gk8c4QL1MtBwuHQJQHYXL +2025-08-24 14:52:25,029 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Bleibt häufig unbemerkt: Problematischer Trend bei Schulausflügen breitet sich aus +2025-08-24 14:52:25,030 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Falkensteiner Favorit - Containerdorf als Nächtigungskrösus Klagenfurts | krone.at +2025-08-24 14:52:25,030 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.krone.at/3876891&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1woffiV_WLFd90nrB2FkoT (Versuch 1) +2025-08-24 14:52:25,236 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:25,237 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:25,238 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:25,238 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.krone.at/3876891&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1woffiV_WLFd90nrB2FkoT +2025-08-24 14:52:25,241 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Falkensteiner Favorit - Containerdorf als Nächtigungskrösus Klagenfurts | krone.at +2025-08-24 14:52:25,242 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Kirche auf dem Campingplatz - Erzbistum Freiburg +2025-08-24 14:52:25,242 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.ebfr.de/detail/nachricht/id/227960-kirche-auf-dem-campingplatz/%3Fcb-id%3D12338393&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l9x3XKrza6eMUdU7OgV2Y (Versuch 1) +2025-08-24 14:52:25,615 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:25,616 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:25,616 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:25,616 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.ebfr.de/detail/nachricht/id/227960-kirche-auf-dem-campingplatz/%3Fcb-id%3D12338393&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l9x3XKrza6eMUdU7OgV2Y +2025-08-24 14:52:25,619 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Kirche auf dem Campingplatz - Erzbistum Freiburg +2025-08-24 14:52:25,620 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Letzter Ausweg Campingplatz - Flucht aus der Großstadt - Programme TV ce soir - Télérama +2025-08-24 14:52:25,620 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://television.telerama.fr/tele/documentaire/letzter-ausweg-campingplatz-flucht-aus-der-gro-stadt-1-386085864.php&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0yphKSHd_DWg5hgH0yY59p (Versuch 1) +2025-08-24 14:52:25,969 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:25,970 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:25,970 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:25,970 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://television.telerama.fr/tele/documentaire/letzter-ausweg-campingplatz-flucht-aus-der-gro-stadt-1-386085864.php&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0yphKSHd_DWg5hgH0yY59p +2025-08-24 14:52:25,974 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Letzter Ausweg Campingplatz - Flucht aus der Großstadt - Programme TV ce soir - Télérama +2025-08-24 14:52:25,975 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Markanter Umschwung steht bevor – Am 27. August dreht sich das Wetter erneut +2025-08-24 14:52:25,975 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/sich-das-wetter-erneut-naechster-markanter-umschwung-bevor-am-27-august-dreht-zr-93893449.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ML-ydsKFV3aAS_kW-OJoY (Versuch 1) +2025-08-24 14:52:26,186 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:26,186 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:26,187 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:26,187 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/sich-das-wetter-erneut-naechster-markanter-umschwung-bevor-am-27-august-dreht-zr-93893449.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2ML-ydsKFV3aAS_kW-OJoY +2025-08-24 14:52:26,190 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Markanter Umschwung steht bevor – Am 27. August dreht sich das Wetter erneut +2025-08-24 14:52:26,191 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Reportage: Sommerparadies Bodensee - Camping in Gohren - SWR Aktuell +2025-08-24 14:52:26,191 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/sommerparadies-bodensee-dokumentation-vom-campingplatz-gohren-bei-kressbronn-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3dRHXspfNHNEiPRBrJOeLi (Versuch 1) +2025-08-24 14:52:26,494 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:26,494 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:26,495 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:26,495 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.swr.de/swraktuell/baden-wuerttemberg/friedrichshafen/sommerparadies-bodensee-dokumentation-vom-campingplatz-gohren-bei-kressbronn-100.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3dRHXspfNHNEiPRBrJOeLi +2025-08-24 14:52:26,498 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Reportage: Sommerparadies Bodensee - Camping in Gohren - SWR Aktuell +2025-08-24 14:52:26,499 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Im Video: Wie Nadine Zappe Marmeladenglasmomente auf ihrem Campingplatz schafft +2025-08-24 14:52:26,499 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.nordschleswiger.dk/de/nordschleswig-hadersleben/im-video-wie-nadine-zappe-marmeladenglasmomente-ihrem-campingplatz&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0GFYeBShFgu1NUoM6G-5G_ (Versuch 1) +2025-08-24 14:52:26,727 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:26,727 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:26,728 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:26,728 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.nordschleswiger.dk/de/nordschleswig-hadersleben/im-video-wie-nadine-zappe-marmeladenglasmomente-ihrem-campingplatz&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0GFYeBShFgu1NUoM6G-5G_ +2025-08-24 14:52:26,731 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Im Video: Wie Nadine Zappe Marmeladenglasmomente auf ihrem Campingplatz schafft +2025-08-24 14:52:26,732 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hund bei Eisenhüttenstadt: Badestellen in der Region – wo Hunde erlaubt sind - MOZ.de +2025-08-24 14:52:26,732 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.moz.de/lokales/eisenhuettenstadt/hund-in-eisenhuettenstadt-badestellen-in-der-region-wo-hunde-erlaubt-sind-78262165.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0AJpWSxdJOcPug6TRkVtzZ (Versuch 1) +2025-08-24 14:52:27,015 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:27,016 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:27,016 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:27,016 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.moz.de/lokales/eisenhuettenstadt/hund-in-eisenhuettenstadt-badestellen-in-der-region-wo-hunde-erlaubt-sind-78262165.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0AJpWSxdJOcPug6TRkVtzZ +2025-08-24 14:52:27,018 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hund bei Eisenhüttenstadt: Badestellen in der Region – wo Hunde erlaubt sind - MOZ.de +2025-08-24 14:52:27,018 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Beliebtes Medikament löst Krebs aus – Forschende entschlüsseln rätselhaften Mechanismus +2025-08-24 14:52:27,018 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/brustkrebs-medikament-loest-gebaermutterkrebs-forschende-entschluesseln-raetselhaften-mechanismus-93897055.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw29FN0GWoPTgcf0krxruWOo (Versuch 1) +2025-08-24 14:52:27,249 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:27,250 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:27,250 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:27,250 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/brustkrebs-medikament-loest-gebaermutterkrebs-forschende-entschluesseln-raetselhaften-mechanismus-93897055.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw29FN0GWoPTgcf0krxruWOo +2025-08-24 14:52:27,254 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Beliebtes Medikament löst Krebs aus – Forschende entschlüsseln rätselhaften Mechanismus +2025-08-24 14:52:27,254 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 5 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-24 14:52:28,259 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-24 14:52:28,941 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Vanlife +2025-08-24 14:52:28,941 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-24 14:52:29,945 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-24 14:52:30,731 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Camping Termine 2024 +2025-08-24 14:52:30,731 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-24 14:52:31,736 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-24 14:52:32,492 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert - Camping Messe 2025 +2025-08-24 14:52:32,492 - INFO - fetch_and_process_feed:187 - 📰 2 Einträge gefunden +2025-08-24 14:52:32,493 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hörstein feiert 400 Jahre Pestwunder - Primavera24.de +2025-08-24 14:52:32,493 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.primavera24.de/aktuelles/news/hoerstein-feiert-400-jahre-pestwunder&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2ZPN_Php6BmAsnv-79P-zZ (Versuch 1) +2025-08-24 14:52:32,783 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:32,783 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:32,783 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:32,783 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.primavera24.de/aktuelles/news/hoerstein-feiert-400-jahre-pestwunder&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2ZPN_Php6BmAsnv-79P-zZ +2025-08-24 14:52:32,786 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.primavera24.de/aktuelles/news/hoerstein-feiert-400-jahre-pestwunder&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2ZPN_Php6BmAsnv-79P-zZ +2025-08-24 14:52:33,046 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-24 14:52:33,046 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.primavera24.de/aktuelles/news/hoerstein-feiert-400-jahre-pestwunder&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw2ZPN_Php6BmAsnv-79P-zZ +2025-08-24 14:52:33,047 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Hörstein feiert 400 Jahre Pestwunder - Primavera24.de' extrahiert +2025-08-24 14:52:33,047 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Hörstein feiert 400 Jahre Pestwunder - Primavera24.de +2025-08-24 14:52:33,048 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: In Düsseldorf schlägt das „Herz des Caravanings“ - Niederrhein Nachrichten +2025-08-24 14:52:33,048 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.niederrhein-nachrichten.de/nachrichten/in-duesseldorf-schlaegt-das-herz-des-caravanings-11957.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11bSejssd9woRFps5qaXVQ (Versuch 1) +2025-08-24 14:52:33,415 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-24 14:52:33,415 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-24 14:52:33,416 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-24 14:52:33,416 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.niederrhein-nachrichten.de/nachrichten/in-duesseldorf-schlaegt-das-herz-des-caravanings-11957.html&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw11bSejssd9woRFps5qaXVQ +2025-08-24 14:52:33,419 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: In Düsseldorf schlägt das „Herz des Caravanings“ - Niederrhein Nachrichten +2025-08-24 14:52:33,420 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 1 neue Artikel aus https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-24 14:52:34,453 - INFO - save_articles:144 - ✅ 185 Artikel gespeichert +2025-08-24 14:52:34,453 - INFO - process_articles:310 - 🎉 Verarbeitung abgeschlossen: 6 neue Artikel in 45.92s hinzugefügt +2025-08-24 14:52:35,533 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 14:52:35,533 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:55:16,337 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 14:55:16,339 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:55:24,320 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 14:55:24,321 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:55:29,118 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 14:55:29,118 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:55:32,455 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 14:55:32,456 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:55:38,984 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 14:55:38,987 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:55:51,859 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 14:55:51,860 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:55:59,312 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 14:55:59,313 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 14:55:59,345 - INFO - save_articles:144 - ✅ 185 Artikel gespeichert +2025-08-24 14:55:59,381 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 14:55:59,381 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 15:00:44,577 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 15:00:44,579 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 15:01:32,927 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 15:01:32,928 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 15:01:32,952 - INFO - save_articles:144 - ✅ 185 Artikel gespeichert +2025-08-24 15:01:33,531 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 15:01:33,531 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 15:01:43,611 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 15:01:43,612 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 15:01:49,714 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 15:01:49,715 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 15:01:59,256 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 15:01:59,257 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-24 15:02:05,664 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-24 15:02:05,664 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:27:55,892 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-28 10:27:55,894 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:29:25,237 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-28 10:29:25,238 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:29:32,381 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-28 10:29:32,381 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:29:32,387 - INFO - process_articles:268 - 🚀 Starte Artikel-Verarbeitung +2025-08-28 10:29:32,388 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:29:32,393 - INFO - load_articles:124 - ✅ 185 Artikel geladen +2025-08-28 10:29:32,394 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.camping-news.de/rss/ +2025-08-28 10:29:32,726 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Camping-News +2025-08-28 10:29:32,726 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-28 10:29:32,729 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5939 +2025-08-28 10:29:33,322 - INFO - extract_images_with_metadata:167 - 🔍 14 img-Tags gefunden +2025-08-28 10:29:33,323 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:33,323 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) snw/jb... +2025-08-28 10:29:33,323 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:33,323 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) snw/jb... +2025-08-28 10:29:33,323 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Bürstner GmbH & Co. KG... +2025-08-28 10:29:33,323 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5939: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-28 10:29:33,323 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'VWN feiert 20 Jahre California +Beach und zeigt Sondermodell' extrahiert +2025-08-28 10:29:33,323 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: VWN feiert 20 Jahre California +Beach und zeigt Sondermodell +2025-08-28 10:29:33,324 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5937 +2025-08-28 10:29:33,608 - INFO - extract_images_with_metadata:167 - 🔍 13 img-Tags gefunden +2025-08-28 10:29:33,608 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Messe Essen GmbH... +2025-08-28 10:29:33,608 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:33,608 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Caravaning-Boom bietet enormes Potenzial, bede... +2025-08-28 10:29:33,609 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) snw... +2025-08-28 10:29:33,609 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Volkswagen Nutzfahrzeuge... +2025-08-28 10:29:33,609 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5937: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-28 10:29:33,609 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Bliessteig im Saarland ist Deutschlands schönster Wanderweg' extrahiert +2025-08-28 10:29:33,609 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Bliessteig im Saarland ist Deutschlands schönster Wanderweg +2025-08-28 10:29:33,611 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5938 +2025-08-28 10:29:33,891 - INFO - extract_images_with_metadata:167 - 🔍 14 img-Tags gefunden +2025-08-28 10:29:33,891 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:33,892 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Volkswagen Nutzfahrzeuge... +2025-08-28 10:29:33,892 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:33,892 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) snw/jb... +2025-08-28 10:29:33,892 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Bürstner GmbH & Co. KG... +2025-08-28 10:29:33,892 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5938: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-28 10:29:33,892 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Hotspot der mobilen Freiheit' extrahiert +2025-08-28 10:29:33,892 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Hotspot der mobilen Freiheit +2025-08-28 10:29:33,893 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5936 +2025-08-28 10:29:34,147 - INFO - extract_images_with_metadata:167 - 🔍 13 img-Tags gefunden +2025-08-28 10:29:34,147 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Messe Essen GmbH... +2025-08-28 10:29:34,147 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:34,148 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Caravaning-Boom bietet enormes Potenzial, bede... +2025-08-28 10:29:34,148 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) snw... +2025-08-28 10:29:34,148 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Volkswagen Nutzfahrzeuge... +2025-08-28 10:29:34,148 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5936: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-28 10:29:34,148 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Aktuelle Trends auf dem CARAVAN SALON 2025' extrahiert +2025-08-28 10:29:34,148 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Aktuelle Trends auf dem CARAVAN SALON 2025 +2025-08-28 10:29:34,155 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5935 +2025-08-28 10:29:34,485 - INFO - extract_images_with_metadata:167 - 🔍 14 img-Tags gefunden +2025-08-28 10:29:34,485 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:34,485 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Volkswagen Nutzfahrzeuge... +2025-08-28 10:29:34,485 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:34,485 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) snw/jb... +2025-08-28 10:29:34,485 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Bürstner GmbH & Co. KG... +2025-08-28 10:29:34,485 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5935: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-28 10:29:34,485 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Neue Baureihen und Sondermodelle machen Caravaning noch attraktiver' extrahiert +2025-08-28 10:29:34,485 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Neue Baureihen und Sondermodelle machen Caravaning noch attraktiver +2025-08-28 10:29:34,487 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5934 +2025-08-28 10:29:34,737 - INFO - extract_images_with_metadata:167 - 🔍 14 img-Tags gefunden +2025-08-28 10:29:34,738 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:34,738 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Volkswagen Nutzfahrzeuge... +2025-08-28 10:29:34,738 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:34,738 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) snw/jb... +2025-08-28 10:29:34,738 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) snw/jb... +2025-08-28 10:29:34,738 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5934: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-28 10:29:34,738 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Mercedes trifft Innovation - der variable +Campervan unter 6 Metern' extrahiert +2025-08-28 10:29:34,738 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Mercedes trifft Innovation - der variable +Campervan unter 6 Metern +2025-08-28 10:29:34,739 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5933 +2025-08-28 10:29:35,025 - INFO - extract_images_with_metadata:167 - 🔍 21 img-Tags gefunden +2025-08-28 10:29:35,025 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:35,025 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:35,026 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) PremiumCamps... +2025-08-28 10:29:35,026 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:35,026 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Camping Kirchzarten... +2025-08-28 10:29:35,026 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5933: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-28 10:29:35,026 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Die neue Wellness Oim am Camping Resort Allweglehen' extrahiert +2025-08-28 10:29:35,026 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Die neue Wellness Oim am Camping Resort Allweglehen +2025-08-28 10:29:35,027 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5932 +2025-08-28 10:29:35,310 - INFO - extract_images_with_metadata:167 - 🔍 14 img-Tags gefunden +2025-08-28 10:29:35,310 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:35,310 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Volkswagen Nutzfahrzeuge... +2025-08-28 10:29:35,310 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:35,310 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) snw/jb... +2025-08-28 10:29:35,310 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) snw/jb... +2025-08-28 10:29:35,310 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5932: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-28 10:29:35,310 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Premiere des Modelljahrs 2026 auf diesjährigem Caravan-Salon' extrahiert +2025-08-28 10:29:35,310 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Premiere des Modelljahrs 2026 auf diesjährigem Caravan-Salon +2025-08-28 10:29:35,311 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5931 +2025-08-28 10:29:35,605 - INFO - extract_images_with_metadata:167 - 🔍 14 img-Tags gefunden +2025-08-28 10:29:35,605 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:35,605 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Volkswagen Nutzfahrzeuge... +2025-08-28 10:29:35,606 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:35,606 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) snw/jb... +2025-08-28 10:29:35,606 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) snw/jb... +2025-08-28 10:29:35,606 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5931: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-28 10:29:35,606 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Erfolgsmodell TRAIL 280S mit überarbeitetem Grundriss' extrahiert +2025-08-28 10:29:35,606 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Erfolgsmodell TRAIL 280S mit überarbeitetem Grundriss +2025-08-28 10:29:35,607 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5930 +2025-08-28 10:29:35,828 - INFO - extract_images_with_metadata:167 - 🔍 14 img-Tags gefunden +2025-08-28 10:29:35,829 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:35,829 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) Volkswagen Nutzfahrzeuge... +2025-08-28 10:29:35,829 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:35,829 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) snw/jb... +2025-08-28 10:29:35,829 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: (c) snw/jb... +2025-08-28 10:29:35,829 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5930: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-28 10:29:35,829 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Aufblasbares Vorzelt für Wohnwagen-Camper' extrahiert +2025-08-28 10:29:35,829 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Aufblasbares Vorzelt für Wohnwagen-Camper +2025-08-28 10:29:35,829 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 10 neue Artikel aus https://www.camping-news.de/rss/ +2025-08-28 10:29:36,834 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/news +2025-08-28 10:29:37,132 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: News bei www.promobil.de +2025-08-28 10:29:37,132 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-28 10:29:37,133 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-28 10:29:37,133 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/termine-veranstaltungen-juni-juli/ (Versuch 1) +2025-08-28 10:29:37,310 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:37,312 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:37,313 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 649 Wörter +2025-08-28 10:29:37,313 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 649 Wörter +2025-08-28 10:29:37,314 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Vanlife-Events im Juni bis November 2025: Events für Bulli-Lover und Campervan-Fans +2025-08-28 10:29:37,314 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-28 10:29:37,314 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sicherheitszubehoer-wohnmobil-schutz-einbruch-diebstahl-gase/ (Versuch 1) +2025-08-28 10:29:37,502 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:37,504 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:37,505 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1134 Wörter +2025-08-28 10:29:37,505 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1134 Wörter +2025-08-28 10:29:37,506 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Schutz vor Einbruch und Diebstahl fürs Wohnmobil: Wie schütze ich mein Wohnmobil vor Diebstahl? +2025-08-28 10:29:37,506 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-28 10:29:37,506 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/corigon-neue-hymer-marke-sommer-2025/ (Versuch 1) +2025-08-28 10:29:37,729 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:37,730 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:37,731 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 874 Wörter +2025-08-28 10:29:37,732 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 874 Wörter +2025-08-28 10:29:37,732 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Hymer kündigt neue Wohnmobil-Marke Corigon an: Hymer bringt neue Günstig-Marke für Camper +2025-08-28 10:29:37,732 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-28 10:29:37,732 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/sieger-frosch-campfire-der-ideen-2025/ (Versuch 1) +2025-08-28 10:29:37,910 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:37,911 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:37,912 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 452 Wörter +2025-08-28 10:29:37,912 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 452 Wörter +2025-08-28 10:29:37,912 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Die besten Camper-Innovationen 2025: „Frosch“ ist das genialste neue Camping-Zubehör +2025-08-28 10:29:37,913 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-28 10:29:37,913 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/fiat-ducato-9-gang-automatik-softwareupdate/ (Versuch 1) +2025-08-28 10:29:38,095 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:38,096 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:38,099 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1546 Wörter +2025-08-28 10:29:38,100 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1546 Wörter +2025-08-28 10:29:38,100 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Leserstimmen zum Update der 9-Gang-Automatik: Was bringt das Softwareupdate für den Ducato 8? +2025-08-28 10:29:38,100 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-28 10:29:38,101 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/caravaning-jahrgangs-archiv-als-pdf-download/ (Versuch 1) +2025-08-28 10:29:38,231 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:38,231 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:38,231 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 136 Wörter +2025-08-28 10:29:38,232 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 136 Wörter +2025-08-28 10:29:38,232 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CARAVANING Jahrgangs Archiv 2024: CARAVANING fürs Archiv +2025-08-28 10:29:38,232 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-28 10:29:38,232 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/top-10-clever-campen-videos-2024/ (Versuch 1) +2025-08-28 10:29:38,414 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:38,415 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:38,415 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:38,415 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 18 Paragraphen +2025-08-28 10:29:38,415 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:38,417 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-28 10:29:38,418 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top 10 Clever-Campen-Videos 2024: Die beliebtesten Camping-Videos +2025-08-28 10:29:38,418 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-28 10:29:38,418 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/retro-wohnmobile-2004-nuller-jahre-rueckblick-promobil/ (Versuch 1) +2025-08-28 10:29:38,582 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:38,583 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:38,584 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1870 Wörter +2025-08-28 10:29:38,585 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1870 Wörter +2025-08-28 10:29:38,585 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Retro-Campingfahrzeuge aus den Nuller-Jahren: Das waren die heißesten Wohnmobile 2004 +2025-08-28 10:29:38,585 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-28 10:29:38,585 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/gaswarner-wohnmobil-schutz-gas/ (Versuch 1) +2025-08-28 10:29:38,793 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:38,795 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:38,797 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 1796 Wörter +2025-08-28 10:29:38,797 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 1796 Wörter +2025-08-28 10:29:38,798 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Gaswarner im Wohnmobil: So schütze Sie sich vor unsichtbaren Gasen +2025-08-28 10:29:38,798 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-28 10:29:38,798 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/versicherungen-werden-2025-teuerer-tipps-und-tricks-um-die-kosten-zu-senken/ (Versuch 1) +2025-08-28 10:29:38,971 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:38,973 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:38,974 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 942 Wörter +2025-08-28 10:29:38,975 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 942 Wörter +2025-08-28 10:29:38,975 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Preisschock bei Wohnmobilversicherungen: Versicherung gestiegen? Das können Sie tun! +2025-08-28 10:29:38,975 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-28 10:29:38,975 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/dailycamper-trekking-mini-camper-fiat-doblo/ (Versuch 1) +2025-08-28 10:29:39,152 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:39,153 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:39,154 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 416 Wörter +2025-08-28 10:29:39,154 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 416 Wörter +2025-08-28 10:29:39,154 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Dailycamper Trekking (2025): Neuer Mini-Camper auf Fiat Doblo +2025-08-28 10:29:39,155 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingbus Rocket Camper Ryzon beim Weltrekord: Jonas Deichmanns Camper für Ironman-Rekord +2025-08-28 10:29:39,155 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-28 10:29:39,155 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/e-trailer-system-kontrollboard-wohnwagen-camper/ (Versuch 1) +2025-08-28 10:29:39,330 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:39,331 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:39,331 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 499 Wörter +2025-08-28 10:29:39,332 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 499 Wörter +2025-08-28 10:29:39,332 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: E-Trailer für die Campingfahrzeug-Steuerung per App: So werden Wohnwagen & Camper zum Smarthome +2025-08-28 10:29:39,332 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-28 10:29:39,332 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-red-bull-arena-leipzig/ (Versuch 1) +2025-08-28 10:29:39,547 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:39,549 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:39,550 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 894 Wörter +2025-08-28 10:29:39,551 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 894 Wörter +2025-08-28 10:29:39,551 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Im Wohnmobil zum 2024-EM-Spielort Leipzig: Nach Leipzig in die Red Bull Arena zur Fußball-EM +2025-08-28 10:29:39,551 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-28 10:29:39,551 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/can-kasim-dogan-interview-westfalia/ (Versuch 1) +2025-08-28 10:29:39,747 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:39,748 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:39,749 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 599 Wörter +2025-08-28 10:29:39,749 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 599 Wörter +2025-08-28 10:29:39,750 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Can-Kasim Dogan von Westfalen Mobil im Interview : Wie sieht der Westfalia-CEO die Camping-Zukunft? +2025-08-28 10:29:39,750 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-28 10:29:39,750 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/promobil-leser-meinung-mobilitaet-fortbewegungsmittel-fahrrad/ (Versuch 1) +2025-08-28 10:29:39,934 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:39,935 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:39,936 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 639 Wörter +2025-08-28 10:29:39,937 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 639 Wörter +2025-08-28 10:29:39,937 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Top-Fortbewegungsmittel für Wohnmobil-Reisende: Wie bleiben Sie im Campingurlaub mobil? +2025-08-28 10:29:39,938 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-28 10:29:39,938 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/spielorte-em-2024-frankfurt/ (Versuch 1) +2025-08-28 10:29:40,119 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:40,121 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:40,122 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 691 Wörter +2025-08-28 10:29:40,122 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 691 Wörter +2025-08-28 10:29:40,122 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping-Tipps für EM-Spielorte 2024 : Frankfurt für Fußball-Fans im Wohnmobil +2025-08-28 10:29:40,123 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-28 10:29:40,123 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/stuttgart-em-2024-fussball-stellplaetze-wohnmobil-camping/ (Versuch 1) +2025-08-28 10:29:40,310 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:40,311 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:40,311 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 923 Wörter +2025-08-28 10:29:40,312 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 923 Wörter +2025-08-28 10:29:40,312 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Spielorte und Stellplätze zur Fußball-EM 2024 : Mit dem Wohnmobil zur Euro 2024 in Stuttgart +2025-08-28 10:29:40,312 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-28 10:29:40,312 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/camper-radio-radiosender-caravan-fm/ (Versuch 1) +2025-08-28 10:29:40,492 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:40,492 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:40,493 - INFO - extract_full_article:257 - 🎉 Erfolgreiche Extraktion (generisch): 258 Wörter +2025-08-28 10:29:40,493 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 258 Wörter +2025-08-28 10:29:40,493 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camper-Radio​ Caravan.fm : Radiosender speziell für Camping-Fans +2025-08-28 10:29:40,493 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-28 10:29:40,493 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.promobil.de/tourismus-management-armin-brysch-interview-virtuelle-reisen/ (Versuch 1) +2025-08-28 10:29:40,643 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:40,643 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:40,644 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:40,644 - INFO - extract_from_paragraphs:194 - ✅ Fallback-Extraktion aus 8 Paragraphen +2025-08-28 10:29:40,644 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:40,645 - INFO - extract_full_article:281 - ⚠️ Body-Extraktion: 0 Wörter +2025-08-28 10:29:40,645 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Professor für Tourismus-Management im Interview: Armin Brysch spricht über virtuelle Reisen +2025-08-28 10:29:40,645 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 0 neue Artikel aus https://www.promobil.de/rss/news +2025-08-28 10:29:41,651 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.promobil.de/rss/ratgeber +2025-08-28 10:29:41,993 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: ratgeber bei www.promobil.de +2025-08-28 10:29:41,994 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-28 10:29:41,996 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.promobil.de/weitere-ratgeber/sommerferien-endspurt-wohin-mit-dem-wohnmobil/ +2025-08-28 10:29:42,154 - INFO - extract_images_with_metadata:167 - 🔍 13 img-Tags gefunden +2025-08-28 10:29:42,154 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Symbolbild, Wetter, Sonne, Regen... +2025-08-28 10:29:42,154 - INFO - extract_images_with_metadata:180 - ✅ Bild hinzugefügt: Bild aus Originalartikel... +2025-08-28 10:29:42,155 - ERROR - extract_images_with_metadata:200 - ❌ Unerwarteter Fehler bei Bildextraktion von https://www.promobil.de/weitere-ratgeber/sommerferien-endspurt-wohin-mit-dem-wohnmobil/: unsupported operand type(s) for *: 'NoneType' and 'NoneType' +2025-08-28 10:29:42,155 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Reisetipps für die letzten Ferienwochen: Dem schlechten Wetter davon fahren' extrahiert +2025-08-28 10:29:42,155 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Reisetipps für die letzten Ferienwochen: Dem schlechten Wetter davon fahren +2025-08-28 10:29:42,157 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 5 Buchtipps für Campingfans: Spannende und lustige Bücher rund ums Camping +2025-08-28 10:29:42,160 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Campingplätze, Stellplätze und mehr finden : „Stellplatz-Radar“-App bekommt neue Funktionen +2025-08-28 10:29:42,161 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrzeugtechnik am Wohnmobil im Detail: Windschutzscheiben sind längst mehr als Glas +2025-08-28 10:29:42,163 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Betrug im Wohnmobilhandel: Haftstrafen für Chefs von FlexiCamper +2025-08-28 10:29:42,164 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum perfekten Campingtag: Wo verbringen Sie den perfekten Campingurlaub? +2025-08-28 10:29:42,165 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tauschautomat für Gasflaschen im Praxischeck: Wie funktioniert der 24/7-Service für Camper +2025-08-28 10:29:42,166 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Italien verschärft Regeln zur Müllentsorgung: Bis zu 18.000 Euro Strafe für Müll vor dem Camper +2025-08-28 10:29:42,166 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Regeln auf Frankreichs Autobahnen im Pannenfall: Kein Schutz durch ADAC & Co. auf Autobahnen +2025-08-28 10:29:42,167 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fahrradtransport in Italien: Warntafel bei Fahrradträgern doch wieder Pflicht? +2025-08-28 10:29:42,169 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Mautregeln für Wohnmobile mit 3,5 t: Diese Camper brauchen ab dem Stichtag eine GO-Box +2025-08-28 10:29:42,170 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Film-Stunt mit Caravan – wie realistisch ist das?: Sexsymbol Jensen Ackles wagt Stunt auf Wohnwagen +2025-08-28 10:29:42,171 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: CLEVER CAMPEN Podcast Folge 40: Gravelbikes und Camping – die beste Kombi? +2025-08-28 10:29:42,172 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Stellplatz-Radar Sommeraktion 2025: 30 Tage Stellplatz-Radar PLUS gratis testen +2025-08-28 10:29:42,173 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Digitaler Fahrzeugschein für Camper: promobil testet den digitalen Fahrzeugschein +2025-08-28 10:29:42,174 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Badezimmer beim Camping - Umfrage: Welches Bad brauchen Sie im Wohnmobil? +2025-08-28 10:29:42,175 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Umfrage zum Kaffeegenuss beim Camping: So kochen Sie am liebsten Ihren Kaffee +2025-08-28 10:29:42,176 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zwei Menschen, zwei Meinungen: Das Mietbad spaltet die Campingwelt +2025-08-28 10:29:42,177 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Zubehör auf der größten Campingmesse kaufen: Deshalb müssen Zubehör-Shopper zum Caravan Salon +2025-08-28 10:29:42,178 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Tipps für die größte Camping-Messe Deutschlands: Darum dürfen Sie den Caravan Salon nicht verpassen +2025-08-28 10:29:42,178 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 1 neue Artikel aus https://www.promobil.de/rss/ratgeber +2025-08-28 10:29:43,183 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-28 10:29:43,436 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach camping +2025-08-28 10:29:43,437 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-28 10:29:43,440 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/43258/6104183 +2025-08-28 10:29:43,726 - INFO - extract_images_with_metadata:167 - 🔍 9 img-Tags gefunden +2025-08-28 10:29:43,727 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/43258/6104183 +2025-08-28 10:29:43,727 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Camping-Boom: Wohnmobil im Urlaub richtig absichern / Wie Sie im Urlaub typische Versicherungsfallen vermeiden' extrahiert +2025-08-28 10:29:43,727 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Camping-Boom: Wohnmobil im Urlaub richtig absichern / Wie Sie im Urlaub typische Versicherungsfallen vermeiden +2025-08-28 10:29:43,730 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/64471/6104130 +2025-08-28 10:29:43,998 - INFO - extract_images_with_metadata:167 - 🔍 7 img-Tags gefunden +2025-08-28 10:29:43,999 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/64471/6104130 +2025-08-28 10:29:43,999 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für '"Deutschlands Beste Online-Shops 2025" / Renommierter E-Commerce-Award - Votum aus rund 70.000 Kundenmeinungen - Feierliche Preisverleihung' extrahiert +2025-08-28 10:29:43,999 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: "Deutschlands Beste Online-Shops 2025" / Renommierter E-Commerce-Award - Votum aus rund 70.000 Kundenmeinungen - Feierliche Preisverleihung +2025-08-28 10:29:44,001 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/6605/6103157 +2025-08-28 10:29:44,267 - INFO - extract_images_with_metadata:167 - 🔍 11 img-Tags gefunden +2025-08-28 10:29:44,268 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/6605/6103157 +2025-08-28 10:29:44,268 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Neue Folge "Bella Italia - Camping auf Deutsch": Liebe, Abenteuer und große Überraschungen in den USA' extrahiert +2025-08-28 10:29:44,268 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Neue Folge "Bella Italia - Camping auf Deutsch": Liebe, Abenteuer und große Überraschungen in den USA +2025-08-28 10:29:44,269 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Endlich Ruhe: Dieses Outdoor-Gadget hält Mücken zuverlässig fern +2025-08-28 10:29:44,271 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-28 10:29:44,272 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: IFA 2025: Jackery präsentiert neue 500-Watt-Powerstation im flachen Format, Solardachziegel und DIY-Balkonkraftwerk mit integriertem Brandschutzsystem +2025-08-28 10:29:44,272 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Inklusiver Campingurlaub am Gardasee +2025-08-28 10:29:44,272 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/153661/6094377 (Versuch 1) +2025-08-28 10:29:44,551 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:44,553 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 616 Wörter +2025-08-28 10:29:44,553 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 616 Wörter +2025-08-28 10:29:44,554 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Inklusiver Campingurlaub am Gardasee +2025-08-28 10:29:44,555 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neuheiten-Feuerwerk bei vanexxt auf dem Caravan Salon Düsseldorf 2025 +2025-08-28 10:29:44,556 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-28 10:29:44,556 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/170000/6091414 (Versuch 1) +2025-08-28 10:29:44,874 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:44,875 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 191 Wörter +2025-08-28 10:29:44,875 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 191 Wörter +2025-08-28 10:29:44,876 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Clevere Vorzelte - Vango beim Caravan Salon in Düsseldorf +2025-08-28 10:29:44,877 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: 50 Jahre ADAC Tourset: Vom Kartenstapel zum digitalen Reisebegleiter / Erfolgreicher Reisebegleiter / 657.000 Toursets in 2024 bestellt +2025-08-28 10:29:44,877 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 3 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=camping&langid=1 +2025-08-28 10:29:45,882 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-28 10:29:46,101 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Presseportal.de - Ergebnis der Suchanfrage nach wohnmobil +2025-08-28 10:29:46,101 - INFO - fetch_and_process_feed:187 - 📰 10 Einträge gefunden +2025-08-28 10:29:46,103 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Camping-Boom: Wohnmobil im Urlaub richtig absichern / Wie Sie im Urlaub typische Versicherungsfallen vermeiden +2025-08-28 10:29:46,106 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.presseportal.de/pm/58964/6104008 +2025-08-28 10:29:46,344 - INFO - extract_images_with_metadata:167 - 🔍 7 img-Tags gefunden +2025-08-28 10:29:46,345 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.presseportal.de/pm/58964/6104008 +2025-08-28 10:29:46,345 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für '66 Lovemobile in Niedersachsen - Zahl leicht gestiegen / Mehr als 80 Prozent der mobilen Bordelle in Niedersachsen auf drei Kreise verteilt' extrahiert +2025-08-28 10:29:46,345 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: 66 Lovemobile in Niedersachsen - Zahl leicht gestiegen / Mehr als 80 Prozent der mobilen Bordelle in Niedersachsen auf drei Kreise verteilt +2025-08-28 10:29:46,347 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Fast jeder Zweite träumt vom Van-Life / HEM-Umfrage zeigt: Das Fahrzeug wird immer häufiger zur mobilen Unterkunft +2025-08-28 10:29:46,348 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: TÜV-Verband: Neues Merkblatt zum Anbau von Solaranlagen an Wohnmobilen +2025-08-28 10:29:46,350 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/65031/6100268 (Versuch 1) +2025-08-28 10:29:46,664 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:46,665 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 576 Wörter +2025-08-28 10:29:46,666 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 576 Wörter +2025-08-28 10:29:46,667 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: TÜV-Verband: Neues Merkblatt zum Anbau von Solaranlagen an Wohnmobilen +2025-08-28 10:29:46,668 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Akku leer: Gefahren beim Laden von E-Bikes +2025-08-28 10:29:46,669 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Neue Folge "Bella Italia - Camping auf Deutsch": von Italien in die USA +2025-08-28 10:29:46,670 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Maximale Flexibilität trifft volle Power: Intelligente Tiefenreinigung ohne Kabel mit der PURE ONE S Serie von Tineco +2025-08-28 10:29:46,672 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Urlaub mit dem Wohnmobil: Was tun bei Panne oder Unfall +2025-08-28 10:29:46,672 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-28 10:29:46,672 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/105254/6091837 (Versuch 1) +2025-08-28 10:29:46,973 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:46,975 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: EuGH fordert im Diesel-Abgasskandal angemessene Entschädigung für Verbraucher +2025-08-28 10:29:46,976 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: So ist man beim Camping richtig versichert +2025-08-28 10:29:46,976 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.presseportal.de/pm/121716/6085196 (Versuch 1) +2025-08-28 10:29:47,450 - INFO - extract_with_selectors:165 - ✅ Erfolgreiche Extraktion mit Selektor: {'tag': 'article', 'class': None} +2025-08-28 10:29:47,452 - INFO - extract_full_article:248 - 🎉 Erfolgreiche Extraktion: 603 Wörter +2025-08-28 10:29:47,452 - INFO - fetch_and_process_feed:215 - ✅ Volltext extrahiert: 603 Wörter +2025-08-28 10:29:47,453 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: So ist man beim Camping richtig versichert +2025-08-28 10:29:47,453 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 1 neue Artikel aus https://www.presseportal.de/rss/rss2_vts.htx?q=wohnmobil&langid=1 +2025-08-28 10:29:48,456 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://caravan-news.de/rss/schlagzeilen.php +2025-08-28 10:29:48,734 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: CARAVAN-NEWS.de +2025-08-28 10:29:48,734 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://caravan-news.de/rss/schlagzeilen.php +2025-08-28 10:29:49,738 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-28 10:29:50,380 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Campingplatz +2025-08-28 10:29:50,380 - INFO - fetch_and_process_feed:187 - 📰 20 Einträge gefunden +2025-08-28 10:29:50,381 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Brand auf Campingplatz in Otterstadt - Speyer-Kurier +2025-08-28 10:29:50,381 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.speyer-kurier.de/blaulicht/artikel/brand-auf-campingplatz-in-otterstadt&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw37x8Ph29lBv4K9sjZjZNlH (Versuch 1) +2025-08-28 10:29:50,491 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:50,492 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:50,492 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:50,493 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.speyer-kurier.de/blaulicht/artikel/brand-auf-campingplatz-in-otterstadt&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw37x8Ph29lBv4K9sjZjZNlH +2025-08-28 10:29:50,496 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.speyer-kurier.de/blaulicht/artikel/brand-auf-campingplatz-in-otterstadt&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw37x8Ph29lBv4K9sjZjZNlH +2025-08-28 10:29:50,613 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:50,614 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.speyer-kurier.de/blaulicht/artikel/brand-auf-campingplatz-in-otterstadt&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw37x8Ph29lBv4K9sjZjZNlH +2025-08-28 10:29:50,614 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Brand auf Campingplatz in Otterstadt - Speyer-Kurier' extrahiert +2025-08-28 10:29:50,615 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Brand auf Campingplatz in Otterstadt - Speyer-Kurier +2025-08-28 10:29:50,615 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Zehn Jahre Stillstand: Letzter Versuch für geplanten Campingplatz? - Kusel - Die Rheinpfalz +2025-08-28 10:29:50,615 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.rheinpfalz.de/lokal/kreis-kusel_artikel,-zehn-jahre-stillstand-letzter-versuch-f%25C3%25BCr-geplanten-campingplatz-_arid,5806398.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw03Sz4h5yKhs00d4HecyABq (Versuch 1) +2025-08-28 10:29:50,728 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:50,729 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:50,729 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:50,729 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.rheinpfalz.de/lokal/kreis-kusel_artikel,-zehn-jahre-stillstand-letzter-versuch-f%25C3%25BCr-geplanten-campingplatz-_arid,5806398.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw03Sz4h5yKhs00d4HecyABq +2025-08-28 10:29:50,733 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.rheinpfalz.de/lokal/kreis-kusel_artikel,-zehn-jahre-stillstand-letzter-versuch-f%25C3%25BCr-geplanten-campingplatz-_arid,5806398.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw03Sz4h5yKhs00d4HecyABq +2025-08-28 10:29:50,868 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:50,868 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.rheinpfalz.de/lokal/kreis-kusel_artikel,-zehn-jahre-stillstand-letzter-versuch-f%25C3%25BCr-geplanten-campingplatz-_arid,5806398.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw03Sz4h5yKhs00d4HecyABq +2025-08-28 10:29:50,869 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Zehn Jahre Stillstand: Letzter Versuch für geplanten Campingplatz? - Kusel - Die Rheinpfalz' extrahiert +2025-08-28 10:29:50,869 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Zehn Jahre Stillstand: Letzter Versuch für geplanten Campingplatz? - Kusel - Die Rheinpfalz +2025-08-28 10:29:50,870 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Landvergnügen: Statt Campingplatz, jede Nacht ein anderer Bauernhof - Kleine Zeitung +2025-08-28 10:29:50,870 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.kleinezeitung.at/lebensart/20031453/statt-campingplatz-jede-nacht-ein-anderer-bauernhof&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0Fnz1ORv1BbfIEZfTG432j (Versuch 1) +2025-08-28 10:29:50,987 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:50,987 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:50,988 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:50,988 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.kleinezeitung.at/lebensart/20031453/statt-campingplatz-jede-nacht-ein-anderer-bauernhof&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0Fnz1ORv1BbfIEZfTG432j +2025-08-28 10:29:50,992 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.kleinezeitung.at/lebensart/20031453/statt-campingplatz-jede-nacht-ein-anderer-bauernhof&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0Fnz1ORv1BbfIEZfTG432j +2025-08-28 10:29:51,116 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:51,117 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.kleinezeitung.at/lebensart/20031453/statt-campingplatz-jede-nacht-ein-anderer-bauernhof&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0Fnz1ORv1BbfIEZfTG432j +2025-08-28 10:29:51,117 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Landvergnügen: Statt Campingplatz, jede Nacht ein anderer Bauernhof - Kleine Zeitung' extrahiert +2025-08-28 10:29:51,117 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Landvergnügen: Statt Campingplatz, jede Nacht ein anderer Bauernhof - Kleine Zeitung +2025-08-28 10:29:51,118 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Rheinland-Pfalz & Saarland: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt +2025-08-28 10:29:51,118 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.n-tv.de/regionales/rheinland-pfalz-und-saarland/Sieben-Wohnwagen-bei-Feuer-auf-Campingplatz-beschaedigt-article25992761.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1d142-8q28VLBMt44GmQQm (Versuch 1) +2025-08-28 10:29:51,233 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:51,234 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:51,234 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:51,234 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.n-tv.de/regionales/rheinland-pfalz-und-saarland/Sieben-Wohnwagen-bei-Feuer-auf-Campingplatz-beschaedigt-article25992761.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1d142-8q28VLBMt44GmQQm +2025-08-28 10:29:51,238 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.n-tv.de/regionales/rheinland-pfalz-und-saarland/Sieben-Wohnwagen-bei-Feuer-auf-Campingplatz-beschaedigt-article25992761.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1d142-8q28VLBMt44GmQQm +2025-08-28 10:29:51,367 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:51,368 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.n-tv.de/regionales/rheinland-pfalz-und-saarland/Sieben-Wohnwagen-bei-Feuer-auf-Campingplatz-beschaedigt-article25992761.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1d142-8q28VLBMt44GmQQm +2025-08-28 10:29:51,368 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Rheinland-Pfalz & Saarland: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt' extrahiert +2025-08-28 10:29:51,368 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Rheinland-Pfalz & Saarland: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt +2025-08-28 10:29:51,369 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Klima-Ereignis könnte Europas Wetter radikal verändern und den Winter völlig auf den Kopf stellen +2025-08-28 10:29:51,369 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/veraendern-winter-voellig-auf-den-kopf-stellen-raetselhaftes-klima-ereignis-europa-wetter-radikal-zr-93889387.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw13FBKqr1NahvNwZSiFQUpS (Versuch 1) +2025-08-28 10:29:51,492 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:51,494 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:51,494 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:51,494 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/veraendern-winter-voellig-auf-den-kopf-stellen-raetselhaftes-klima-ereignis-europa-wetter-radikal-zr-93889387.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw13FBKqr1NahvNwZSiFQUpS +2025-08-28 10:29:51,497 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/veraendern-winter-voellig-auf-den-kopf-stellen-raetselhaftes-klima-ereignis-europa-wetter-radikal-zr-93889387.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw13FBKqr1NahvNwZSiFQUpS +2025-08-28 10:29:51,620 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:51,620 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/veraendern-winter-voellig-auf-den-kopf-stellen-raetselhaftes-klima-ereignis-europa-wetter-radikal-zr-93889387.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw13FBKqr1NahvNwZSiFQUpS +2025-08-28 10:29:51,621 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Klima-Ereignis könnte Europas Wetter radikal verändern und den Winter völlig auf den Kopf stellen' extrahiert +2025-08-28 10:29:51,621 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Klima-Ereignis könnte Europas Wetter radikal verändern und den Winter völlig auf den Kopf stellen +2025-08-28 10:29:51,622 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Lebensgefahr durch extreme Unwetter: Mittelmeer-Phänomen treibt Gefahr nun auch nach ... +2025-08-28 10:29:51,622 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/lebensgefahr-durch-extreme-unwetter-in-italien-warum-die-gefahr-nun-auch-nach-deutschland-schwappt-zr-93902987.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1iZO1swk8NP-QaytJ1i_fH (Versuch 1) +2025-08-28 10:29:51,739 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:51,740 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:51,740 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:51,740 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/lebensgefahr-durch-extreme-unwetter-in-italien-warum-die-gefahr-nun-auch-nach-deutschland-schwappt-zr-93902987.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1iZO1swk8NP-QaytJ1i_fH +2025-08-28 10:29:51,744 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/lebensgefahr-durch-extreme-unwetter-in-italien-warum-die-gefahr-nun-auch-nach-deutschland-schwappt-zr-93902987.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1iZO1swk8NP-QaytJ1i_fH +2025-08-28 10:29:51,869 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:51,869 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/lebensgefahr-durch-extreme-unwetter-in-italien-warum-die-gefahr-nun-auch-nach-deutschland-schwappt-zr-93902987.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1iZO1swk8NP-QaytJ1i_fH +2025-08-28 10:29:51,869 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Lebensgefahr durch extreme Unwetter: Mittelmeer-Phänomen treibt Gefahr nun auch nach ...' extrahiert +2025-08-28 10:29:51,870 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Lebensgefahr durch extreme Unwetter: Mittelmeer-Phänomen treibt Gefahr nun auch nach ... +2025-08-28 10:29:51,870 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Sachschaden: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Rheinland-Pfalz +2025-08-28 10:29:51,871 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.rhein-zeitung.de/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_arid-4064379.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw39vzojQNhBpnUVvyBovqdG (Versuch 1) +2025-08-28 10:29:51,992 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:51,993 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:51,993 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:51,994 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.rhein-zeitung.de/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_arid-4064379.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw39vzojQNhBpnUVvyBovqdG +2025-08-28 10:29:51,997 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.rhein-zeitung.de/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_arid-4064379.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw39vzojQNhBpnUVvyBovqdG +2025-08-28 10:29:52,120 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:52,120 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.rhein-zeitung.de/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_arid-4064379.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw39vzojQNhBpnUVvyBovqdG +2025-08-28 10:29:52,121 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Sachschaden: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Rheinland-Pfalz' extrahiert +2025-08-28 10:29:52,121 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Sachschaden: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Rheinland-Pfalz +2025-08-28 10:29:52,121 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Campingplatz steht unter neuer Leitung - Mühlacker Tagblatt +2025-08-28 10:29:52,122 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.muehlacker-tagblatt.de/Knittlingen/Campingplatz-steht-unter-neuer-Leitung-404285.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3ohQMvQLwZB15jBj2h_aGm (Versuch 1) +2025-08-28 10:29:52,244 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:52,249 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:52,249 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:52,250 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.muehlacker-tagblatt.de/Knittlingen/Campingplatz-steht-unter-neuer-Leitung-404285.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3ohQMvQLwZB15jBj2h_aGm +2025-08-28 10:29:52,253 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.muehlacker-tagblatt.de/Knittlingen/Campingplatz-steht-unter-neuer-Leitung-404285.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3ohQMvQLwZB15jBj2h_aGm +2025-08-28 10:29:52,405 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:52,406 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.muehlacker-tagblatt.de/Knittlingen/Campingplatz-steht-unter-neuer-Leitung-404285.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3ohQMvQLwZB15jBj2h_aGm +2025-08-28 10:29:52,406 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Campingplatz steht unter neuer Leitung - Mühlacker Tagblatt' extrahiert +2025-08-28 10:29:52,406 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Campingplatz steht unter neuer Leitung - Mühlacker Tagblatt +2025-08-28 10:29:52,407 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Saarbrücker Zeitung +2025-08-28 10:29:52,407 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.saarbruecker-zeitung.de/saarland/blickzumnachbarn/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_aid-133771593&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1lKkodrkZcnrbfts2GayPR (Versuch 1) +2025-08-28 10:29:52,529 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:52,530 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:52,530 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:52,531 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.saarbruecker-zeitung.de/saarland/blickzumnachbarn/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_aid-133771593&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1lKkodrkZcnrbfts2GayPR +2025-08-28 10:29:52,534 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.saarbruecker-zeitung.de/saarland/blickzumnachbarn/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_aid-133771593&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1lKkodrkZcnrbfts2GayPR +2025-08-28 10:29:52,657 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:52,657 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.saarbruecker-zeitung.de/saarland/blickzumnachbarn/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_aid-133771593&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1lKkodrkZcnrbfts2GayPR +2025-08-28 10:29:52,658 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Saarbrücker Zeitung' extrahiert +2025-08-28 10:29:52,658 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Saarbrücker Zeitung +2025-08-28 10:29:52,659 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Bleibt häufig unbemerkt: Problematischer Trend bei Schulausflügen breitet sich aus +2025-08-28 10:29:52,659 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bleibt-haeufig-unbemerkt-problematischer-trend-bei-schulausfluegen-breitet-sich-aus-schule-zr-93893032.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2aoxqFIuFPH9fpfTh4KbQ2 (Versuch 1) +2025-08-28 10:29:52,775 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:52,775 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:52,776 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:52,776 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.fr.de/panorama/bleibt-haeufig-unbemerkt-problematischer-trend-bei-schulausfluegen-breitet-sich-aus-schule-zr-93893032.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2aoxqFIuFPH9fpfTh4KbQ2 +2025-08-28 10:29:52,779 - INFO - fetch_and_process_feed:251 - 🔄 Duplikat übersprungen: Bleibt häufig unbemerkt: Problematischer Trend bei Schulausflügen breitet sich aus +2025-08-28 10:29:52,780 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - MSN +2025-08-28 10:29:52,780 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/sieben-wohnwagen-bei-feuer-auf-campingplatz-besch%25C3%25A4digt/ar-AA1Ll6Lo&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2OKEXFNNohu7Fa2qjUumRZ (Versuch 1) +2025-08-28 10:29:52,896 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:52,897 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:52,897 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:52,897 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/sieben-wohnwagen-bei-feuer-auf-campingplatz-besch%25C3%25A4digt/ar-AA1Ll6Lo&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2OKEXFNNohu7Fa2qjUumRZ +2025-08-28 10:29:52,901 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/sieben-wohnwagen-bei-feuer-auf-campingplatz-besch%25C3%25A4digt/ar-AA1Ll6Lo&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2OKEXFNNohu7Fa2qjUumRZ +2025-08-28 10:29:53,017 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:53,017 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.msn.com/de-de/nachrichten/panorama/sieben-wohnwagen-bei-feuer-auf-campingplatz-besch%25C3%25A4digt/ar-AA1Ll6Lo&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2OKEXFNNohu7Fa2qjUumRZ +2025-08-28 10:29:53,017 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - MSN' extrahiert +2025-08-28 10:29:53,018 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - MSN +2025-08-28 10:29:53,018 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Rhein-Pfalz-Kreis – Brand auf einem Campingplatz - MRN-News.de +2025-08-28 10:29:53,018 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.mrn-news.de/2025/08/27/rhein-pfalz-kreis-brand-auf-einem-campingplatz-600056/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1gcVfYYMPsTSp0-8Fh1ov1 (Versuch 1) +2025-08-28 10:29:53,155 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:53,156 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:53,156 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:53,156 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.mrn-news.de/2025/08/27/rhein-pfalz-kreis-brand-auf-einem-campingplatz-600056/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1gcVfYYMPsTSp0-8Fh1ov1 +2025-08-28 10:29:53,160 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.mrn-news.de/2025/08/27/rhein-pfalz-kreis-brand-auf-einem-campingplatz-600056/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1gcVfYYMPsTSp0-8Fh1ov1 +2025-08-28 10:29:53,294 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:53,295 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.mrn-news.de/2025/08/27/rhein-pfalz-kreis-brand-auf-einem-campingplatz-600056/&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1gcVfYYMPsTSp0-8Fh1ov1 +2025-08-28 10:29:53,296 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Rhein-Pfalz-Kreis – Brand auf einem Campingplatz - MRN-News.de' extrahiert +2025-08-28 10:29:53,296 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Rhein-Pfalz-Kreis – Brand auf einem Campingplatz - MRN-News.de +2025-08-28 10:29:53,296 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Trierischer Volksfreund +2025-08-28 10:29:53,296 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.volksfreund.de/region/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_aid-133771597&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2sDVmOAKfpSHhFZvLdbm_5 (Versuch 1) +2025-08-28 10:29:53,421 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:53,422 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:53,422 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:53,422 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.volksfreund.de/region/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_aid-133771597&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2sDVmOAKfpSHhFZvLdbm_5 +2025-08-28 10:29:53,424 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.volksfreund.de/region/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_aid-133771597&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2sDVmOAKfpSHhFZvLdbm_5 +2025-08-28 10:29:53,548 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:53,549 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.volksfreund.de/region/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt_aid-133771597&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2sDVmOAKfpSHhFZvLdbm_5 +2025-08-28 10:29:53,550 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Trierischer Volksfreund' extrahiert +2025-08-28 10:29:53,550 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Trierischer Volksfreund +2025-08-28 10:29:53,550 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: FAQ: Alles Wichtige zum Wasser mit Geschmack Festival 2025 in Heubach - Gmünder Tagespost +2025-08-28 10:29:53,551 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.gmuender-tagespost.de/ostalb/rosenstein/heubach/wasser-mit-geschmack-festival-2025-musik-kunst-gemeinschaft-93892202.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l9cgUIrS9AjBrhtVSwwib (Versuch 1) +2025-08-28 10:29:53,662 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:53,662 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:53,662 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:53,662 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.gmuender-tagespost.de/ostalb/rosenstein/heubach/wasser-mit-geschmack-festival-2025-musik-kunst-gemeinschaft-93892202.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l9cgUIrS9AjBrhtVSwwib +2025-08-28 10:29:53,664 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.gmuender-tagespost.de/ostalb/rosenstein/heubach/wasser-mit-geschmack-festival-2025-musik-kunst-gemeinschaft-93892202.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l9cgUIrS9AjBrhtVSwwib +2025-08-28 10:29:53,791 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:53,791 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.gmuender-tagespost.de/ostalb/rosenstein/heubach/wasser-mit-geschmack-festival-2025-musik-kunst-gemeinschaft-93892202.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2l9cgUIrS9AjBrhtVSwwib +2025-08-28 10:29:53,792 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'FAQ: Alles Wichtige zum Wasser mit Geschmack Festival 2025 in Heubach - Gmünder Tagespost' extrahiert +2025-08-28 10:29:53,793 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: FAQ: Alles Wichtige zum Wasser mit Geschmack Festival 2025 in Heubach - Gmünder Tagespost +2025-08-28 10:29:53,793 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Borkener Zeitung +2025-08-28 10:29:53,794 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.borkenerzeitung.de/welt/in-ausland/panorama/Sieben-Wohnwagen-bei-Feuer-auf-Campingplatz-beschaedigt-663729.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1L3D8uGuPKbB4qBB-8a8I3 (Versuch 1) +2025-08-28 10:29:53,915 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:53,916 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:53,916 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:53,916 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.borkenerzeitung.de/welt/in-ausland/panorama/Sieben-Wohnwagen-bei-Feuer-auf-Campingplatz-beschaedigt-663729.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1L3D8uGuPKbB4qBB-8a8I3 +2025-08-28 10:29:53,920 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.borkenerzeitung.de/welt/in-ausland/panorama/Sieben-Wohnwagen-bei-Feuer-auf-Campingplatz-beschaedigt-663729.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1L3D8uGuPKbB4qBB-8a8I3 +2025-08-28 10:29:54,078 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:54,078 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.borkenerzeitung.de/welt/in-ausland/panorama/Sieben-Wohnwagen-bei-Feuer-auf-Campingplatz-beschaedigt-663729.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1L3D8uGuPKbB4qBB-8a8I3 +2025-08-28 10:29:54,079 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Borkener Zeitung' extrahiert +2025-08-28 10:29:54,079 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Borkener Zeitung +2025-08-28 10:29:54,080 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: POL-PPRP: Brand auf einem Campingplatz - freenet.de +2025-08-28 10:29:54,080 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.freenet.de/polizeimeldungen/rheinland-pfalz/pol-pprp-brand-auf-einem-campingplatz_6105496-40501654.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0Pns94-kd2inHfns451qxb (Versuch 1) +2025-08-28 10:29:54,203 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:54,204 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:54,204 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:54,204 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.freenet.de/polizeimeldungen/rheinland-pfalz/pol-pprp-brand-auf-einem-campingplatz_6105496-40501654.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0Pns94-kd2inHfns451qxb +2025-08-28 10:29:54,207 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.freenet.de/polizeimeldungen/rheinland-pfalz/pol-pprp-brand-auf-einem-campingplatz_6105496-40501654.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0Pns94-kd2inHfns451qxb +2025-08-28 10:29:54,349 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:54,350 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.freenet.de/polizeimeldungen/rheinland-pfalz/pol-pprp-brand-auf-einem-campingplatz_6105496-40501654.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0Pns94-kd2inHfns451qxb +2025-08-28 10:29:54,350 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'POL-PPRP: Brand auf einem Campingplatz - freenet.de' extrahiert +2025-08-28 10:29:54,351 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: POL-PPRP: Brand auf einem Campingplatz - freenet.de +2025-08-28 10:29:54,351 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Brand auf einem Campingplatz - aktuell mit der meinestadt.de +2025-08-28 10:29:54,351 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://aktuell.meinestadt.de/rhein-pfalz-kreis/polizeimeldungen/5690769&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1fAhNsv2Uiz0FUuFmtx4U1 (Versuch 1) +2025-08-28 10:29:54,473 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:54,473 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:54,474 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:54,474 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://aktuell.meinestadt.de/rhein-pfalz-kreis/polizeimeldungen/5690769&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1fAhNsv2Uiz0FUuFmtx4U1 +2025-08-28 10:29:54,476 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://aktuell.meinestadt.de/rhein-pfalz-kreis/polizeimeldungen/5690769&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1fAhNsv2Uiz0FUuFmtx4U1 +2025-08-28 10:29:54,611 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:54,611 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://aktuell.meinestadt.de/rhein-pfalz-kreis/polizeimeldungen/5690769&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw1fAhNsv2Uiz0FUuFmtx4U1 +2025-08-28 10:29:54,612 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Brand auf einem Campingplatz - aktuell mit der meinestadt.de' extrahiert +2025-08-28 10:29:54,612 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Brand auf einem Campingplatz - aktuell mit der meinestadt.de +2025-08-28 10:29:54,613 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Sachschaden: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt | STERN.de +2025-08-28 10:29:54,613 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.stern.de/gesellschaft/regional/rheinland-pfalz-saarland/sachschaden--sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt-36007106.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3ln89AKet0fsmPLwqvKSRZ (Versuch 1) +2025-08-28 10:29:54,731 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:54,732 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:54,732 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:54,733 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.stern.de/gesellschaft/regional/rheinland-pfalz-saarland/sachschaden--sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt-36007106.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3ln89AKet0fsmPLwqvKSRZ +2025-08-28 10:29:54,736 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.stern.de/gesellschaft/regional/rheinland-pfalz-saarland/sachschaden--sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt-36007106.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3ln89AKet0fsmPLwqvKSRZ +2025-08-28 10:29:54,863 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:54,863 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.stern.de/gesellschaft/regional/rheinland-pfalz-saarland/sachschaden--sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt-36007106.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw3ln89AKet0fsmPLwqvKSRZ +2025-08-28 10:29:54,864 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Sachschaden: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt | STERN.de' extrahiert +2025-08-28 10:29:54,864 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Sachschaden: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt | STERN.de +2025-08-28 10:29:54,864 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - TV Mittelrhein +2025-08-28 10:29:54,865 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.tv-mittelrhein.de/mediathek/news/25450/Sieben_Wohnwagen_bei_Feuer_auf_Campingplatz_beschaedigt.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0he2tUV25IuvO5osNw1xgo (Versuch 1) +2025-08-28 10:29:54,984 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:54,985 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:54,985 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:54,985 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.tv-mittelrhein.de/mediathek/news/25450/Sieben_Wohnwagen_bei_Feuer_auf_Campingplatz_beschaedigt.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0he2tUV25IuvO5osNw1xgo +2025-08-28 10:29:54,989 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.tv-mittelrhein.de/mediathek/news/25450/Sieben_Wohnwagen_bei_Feuer_auf_Campingplatz_beschaedigt.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0he2tUV25IuvO5osNw1xgo +2025-08-28 10:29:55,122 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:55,122 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.tv-mittelrhein.de/mediathek/news/25450/Sieben_Wohnwagen_bei_Feuer_auf_Campingplatz_beschaedigt.html&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw0he2tUV25IuvO5osNw1xgo +2025-08-28 10:29:55,123 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - TV Mittelrhein' extrahiert +2025-08-28 10:29:55,123 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - TV Mittelrhein +2025-08-28 10:29:55,123 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Mittelhessen +2025-08-28 10:29:55,124 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.mittelhessen.de/lokales/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt-4919360&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2wXuKqnmu2I73TfXwRGof4 (Versuch 1) +2025-08-28 10:29:55,246 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:55,247 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:55,247 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:55,247 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.mittelhessen.de/lokales/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt-4919360&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2wXuKqnmu2I73TfXwRGof4 +2025-08-28 10:29:55,249 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.mittelhessen.de/lokales/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt-4919360&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2wXuKqnmu2I73TfXwRGof4 +2025-08-28 10:29:55,374 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:55,375 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.mittelhessen.de/lokales/rheinland-pfalz/sieben-wohnwagen-bei-feuer-auf-campingplatz-beschaedigt-4919360&ct=ga&cd=CAIyGTQxY2RjNDZkNDExY2M5OTc6ZGU6ZGU6REU&usg=AOvVaw2wXuKqnmu2I73TfXwRGof4 +2025-08-28 10:29:55,376 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Mittelhessen' extrahiert +2025-08-28 10:29:55,377 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Sieben Wohnwagen bei Feuer auf Campingplatz beschädigt - Mittelhessen +2025-08-28 10:29:55,377 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 19 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/16793724126187652294 +2025-08-28 10:29:56,382 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-28 10:29:56,902 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Vanlife +2025-08-28 10:29:56,902 - INFO - fetch_and_process_feed:187 - 📰 1 Einträge gefunden +2025-08-28 10:29:56,903 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: VanCraft Waypoint XL: Vanlife in Übergröße aus den USA - vanlifemag.de +2025-08-28 10:29:56,903 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/van-craft-waypoint-xl-vanlife-in-uebergroesse-aus-den-usa/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw1BVz5EAVRoCLYXzxYhRJfy (Versuch 1) +2025-08-28 10:29:57,023 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:29:57,024 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:29:57,024 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:29:57,025 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/van-craft-waypoint-xl-vanlife-in-uebergroesse-aus-den-usa/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw1BVz5EAVRoCLYXzxYhRJfy +2025-08-28 10:29:57,029 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/van-craft-waypoint-xl-vanlife-in-uebergroesse-aus-den-usa/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw1BVz5EAVRoCLYXzxYhRJfy +2025-08-28 10:29:57,153 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:29:57,154 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://vanlifemag.de/van-craft-waypoint-xl-vanlife-in-uebergroesse-aus-den-usa/&ct=ga&cd=CAIyGWNlNzIxOWZkNzJmZTQwNDU6ZGU6ZGU6REU&usg=AOvVaw1BVz5EAVRoCLYXzxYhRJfy +2025-08-28 10:29:57,154 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'VanCraft Waypoint XL: Vanlife in Übergröße aus den USA - vanlifemag.de' extrahiert +2025-08-28 10:29:57,154 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: VanCraft Waypoint XL: Vanlife in Übergröße aus den USA - vanlifemag.de +2025-08-28 10:29:57,155 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 1 neue Artikel aus https://www.google.de/alerts/feeds/03077836356662926441/987500860911797305 +2025-08-28 10:29:58,160 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-28 10:29:58,642 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert – Camping Termine 2024 +2025-08-28 10:29:58,643 - WARNING - fetch_and_process_feed:184 - ⚠️ Keine Einträge in Feed gefunden: https://www.google.de/alerts/feeds/03077836356662926441/4770194054838089856 +2025-08-28 10:29:59,649 - INFO - fetch_and_process_feed:174 - 🔄 Verarbeite Feed: https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-28 10:30:00,140 - INFO - fetch_and_process_feed:181 - 📡 Feed-Name: Google Alert - Camping Messe 2025 +2025-08-28 10:30:00,141 - INFO - fetch_and_process_feed:187 - 📰 4 Einträge gefunden +2025-08-28 10:30:00,142 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Rendsburger Herbst 2025: Das müssen Besucher zum Stadtfest wissen - SHZ +2025-08-28 10:30:00,142 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.shz.de/lokales/rendsburg/artikel/rendsburger-herbst-2025-das-muessen-besucher-zum-stadtfest-wissen-49189798&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3Q0vDLWiKVxjzAHNaBAL9Q (Versuch 1) +2025-08-28 10:30:00,258 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:30:00,260 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:30:00,260 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:30:00,260 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.shz.de/lokales/rendsburg/artikel/rendsburger-herbst-2025-das-muessen-besucher-zum-stadtfest-wissen-49189798&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3Q0vDLWiKVxjzAHNaBAL9Q +2025-08-28 10:30:00,264 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.shz.de/lokales/rendsburg/artikel/rendsburger-herbst-2025-das-muessen-besucher-zum-stadtfest-wissen-49189798&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3Q0vDLWiKVxjzAHNaBAL9Q +2025-08-28 10:30:00,586 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:30:00,586 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.shz.de/lokales/rendsburg/artikel/rendsburger-herbst-2025-das-muessen-besucher-zum-stadtfest-wissen-49189798&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw3Q0vDLWiKVxjzAHNaBAL9Q +2025-08-28 10:30:00,587 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Rendsburger Herbst 2025: Das müssen Besucher zum Stadtfest wissen - SHZ' extrahiert +2025-08-28 10:30:00,587 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Rendsburger Herbst 2025: Das müssen Besucher zum Stadtfest wissen - SHZ +2025-08-28 10:30:00,589 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Messebesuch planen: Das sind die besten Tage für einen Besuch auf dem Caravan Salon 2025 +2025-08-28 10:30:00,589 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.promobil.de/weitere-ratgeber/messebesuch-planen-caravan-salon-2025/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1GqhXPxrlBChDZ5bo-u9xR (Versuch 1) +2025-08-28 10:30:00,717 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:30:00,718 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:30:00,718 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:30:00,718 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.promobil.de/weitere-ratgeber/messebesuch-planen-caravan-salon-2025/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1GqhXPxrlBChDZ5bo-u9xR +2025-08-28 10:30:00,722 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.promobil.de/weitere-ratgeber/messebesuch-planen-caravan-salon-2025/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1GqhXPxrlBChDZ5bo-u9xR +2025-08-28 10:30:00,842 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:30:00,842 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.promobil.de/weitere-ratgeber/messebesuch-planen-caravan-salon-2025/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw1GqhXPxrlBChDZ5bo-u9xR +2025-08-28 10:30:00,843 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Messebesuch planen: Das sind die besten Tage für einen Besuch auf dem Caravan Salon 2025' extrahiert +2025-08-28 10:30:00,843 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Messebesuch planen: Das sind die besten Tage für einen Besuch auf dem Caravan Salon 2025 +2025-08-28 10:30:00,843 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Caravan Salon: Dieser Fiat 616N Retro-Umbau wird der Hingucker der Messe! - Promobil +2025-08-28 10:30:00,844 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.promobil.de/neuheiten/caravan-salon-dieser-fiat-616n-retro-umbau-wird-der-hingucker-der-messe/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw05o4wpeT1ZYzAngJCJ5rbe (Versuch 1) +2025-08-28 10:30:00,960 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:30:00,961 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:30:00,961 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:30:00,961 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.promobil.de/neuheiten/caravan-salon-dieser-fiat-616n-retro-umbau-wird-der-hingucker-der-messe/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw05o4wpeT1ZYzAngJCJ5rbe +2025-08-28 10:30:00,963 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.promobil.de/neuheiten/caravan-salon-dieser-fiat-616n-retro-umbau-wird-der-hingucker-der-messe/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw05o4wpeT1ZYzAngJCJ5rbe +2025-08-28 10:30:01,076 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:30:01,076 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.promobil.de/neuheiten/caravan-salon-dieser-fiat-616n-retro-umbau-wird-der-hingucker-der-messe/&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw05o4wpeT1ZYzAngJCJ5rbe +2025-08-28 10:30:01,077 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Caravan Salon: Dieser Fiat 616N Retro-Umbau wird der Hingucker der Messe! - Promobil' extrahiert +2025-08-28 10:30:01,077 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Caravan Salon: Dieser Fiat 616N Retro-Umbau wird der Hingucker der Messe! - Promobil +2025-08-28 10:30:01,078 - INFO - fetch_and_process_feed:211 - 🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: Welche Aktien von Luxusmarken sollten Anleger im Blick behalten? - Shots Magazin +2025-08-28 10:30:01,078 - INFO - extract_full_article:214 - 📰 Starte Volltextextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.shots.media/accessoires/2025/welche-aktien-von-luxusmarken-sollten-anleger-im-blick-behalten/109756&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0qlDEuhncZhWTz-dL6IaNA (Versuch 1) +2025-08-28 10:30:01,192 - INFO - extract_full_article:253 - 🔄 Fallback auf generische Selektoren +2025-08-28 10:30:01,193 - INFO - extract_full_article:262 - 🔄 Fallback auf Paragraph-Extraktion +2025-08-28 10:30:01,193 - INFO - extract_full_article:271 - 🔄 Letzter Fallback: Body-Text +2025-08-28 10:30:01,193 - WARNING - extract_full_article:286 - ⚠️ Keine verwertbaren Inhalte gefunden bei: https://www.google.com/url?rct=j&sa=t&url=https://www.shots.media/accessoires/2025/welche-aktien-von-luxusmarken-sollten-anleger-im-blick-behalten/109756&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0qlDEuhncZhWTz-dL6IaNA +2025-08-28 10:30:01,197 - INFO - extract_images_with_metadata:149 - 🖼️ Starte Bildextraktion von: https://www.google.com/url?rct=j&sa=t&url=https://www.shots.media/accessoires/2025/welche-aktien-von-luxusmarken-sollten-anleger-im-blick-behalten/109756&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0qlDEuhncZhWTz-dL6IaNA +2025-08-28 10:30:01,317 - INFO - extract_images_with_metadata:167 - 🔍 0 img-Tags gefunden +2025-08-28 10:30:01,317 - INFO - extract_images_with_metadata:193 - 🎉 0 Bilder erfolgreich extrahiert von https://www.google.com/url?rct=j&sa=t&url=https://www.shots.media/accessoires/2025/welche-aktien-von-luxusmarken-sollten-anleger-im-blick-behalten/109756&ct=ga&cd=CAIyHGQ1NmVhN2MxY2QzZWYxMTk6Y29tOmRlOkRFOlI&usg=AOvVaw0qlDEuhncZhWTz-dL6IaNA +2025-08-28 10:30:01,318 - INFO - fetch_and_process_feed:244 - 🖼️ 0 Bilder für 'Welche Aktien von Luxusmarken sollten Anleger im Blick behalten? - Shots Magazin' extrahiert +2025-08-28 10:30:01,318 - INFO - fetch_and_process_feed:249 - ✅ Neuer Artikel hinzugefügt: Welche Aktien von Luxusmarken sollten Anleger im Blick behalten? - Shots Magazin +2025-08-28 10:30:01,318 - INFO - fetch_and_process_feed:257 - ✅ Feed verarbeitet: 4 neue Artikel aus https://www.google.com/alerts/feeds/03077836356662926441/14685692393152596493 +2025-08-28 10:30:02,356 - INFO - save_articles:144 - ✅ 224 Artikel gespeichert +2025-08-28 10:30:02,356 - INFO - process_articles:310 - 🎉 Verarbeitung abgeschlossen: 39 neue Artikel in 29.97s hinzugefügt +2025-08-28 10:30:03,456 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:30:03,456 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:12,296 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:12,298 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:13,576 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:13,576 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:20,386 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:20,387 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:22,120 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:22,120 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:27,345 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:27,346 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:28,958 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:28,959 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:33,721 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:33,722 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:36,114 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:36,115 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:39,562 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:39,563 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:40,876 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:40,877 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:44,570 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:44,570 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:46,515 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:46,517 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:50,319 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:50,320 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:52,966 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:52,967 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:57,467 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:57,467 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:35:59,614 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:35:59,616 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:11,950 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:11,951 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:13,814 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:13,815 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:17,157 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:17,158 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:19,306 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:19,307 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:21,111 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:21,113 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:27,203 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:27,204 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:28,972 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:28,973 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:33,986 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:33,987 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:39,183 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:39,184 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:40,573 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:40,574 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:43,714 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:43,715 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:46,366 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:46,367 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:52,515 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:52,515 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:54,023 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:54,024 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:57,434 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:57,434 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:36:58,589 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:36:58,589 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:37:01,539 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:37:01,539 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:37:03,255 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:37:03,256 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:37:08,336 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:37:08,336 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:37:09,444 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:37:09,445 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:37:12,883 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:37:12,884 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:37:14,208 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:37:14,208 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:37:17,651 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:37:17,652 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:37:26,215 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:37:26,216 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:37:28,351 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:37:28,351 - INFO - load_feeds:93 - ✅ 10 Feeds geladen +2025-08-28 10:37:28,369 - INFO - save_articles:144 - ✅ 224 Artikel gespeichert +2025-08-28 10:37:28,410 - INFO - load_articles:124 - ✅ 224 Artikel geladen +2025-08-28 10:37:28,410 - INFO - load_feeds:93 - ✅ 10 Feeds geladen diff --git a/main.py b/main.py index a386c37..7e83784 100644 --- a/main.py +++ b/main.py @@ -7,8 +7,12 @@ from bs4 import BeautifulSoup from datetime import datetime from dotenv import load_dotenv import logging -from utils.image_extractor import extract_images_with_metadata import openai +from utils.image_extractor import extract_images_with_metadata +from utils.article_extractor import extract_full_article +from utils.wordpress_uploader import upload_articles_to_wordpress +import hashlib +import time load_dotenv() @@ -16,161 +20,474 @@ load_dotenv() log_dir = "logs" os.makedirs(log_dir, exist_ok=True) log_file = os.path.join(log_dir, "rss_tool.log") + +# Logging-Format verbessern logging.basicConfig( - filename=log_file, level=logging.INFO, - format="%(asctime)s - %(levelname)s - %(message)s" + format="%(asctime)s - %(levelname)s - %(funcName)s:%(lineno)d - %(message)s", + handlers=[ + logging.FileHandler(log_file, encoding='utf-8'), + logging.StreamHandler() # Auch in Konsole ausgeben + ] ) openai.api_key = os.getenv("OPENAI_API_KEY") ARTICLES_FILE = "data/articles.json" FEEDS_FILE = "data/feeds.json" -VALID_STATUSES = ["New", "Rewrite", "Process", "Online", "On Hold", "Trash"] +VALID_STATUSES = ["New", "Rewrite", "Process", "Online", "On Hold", "Trash", "WordPress Pending"] +# === Datenordner erstellen === +os.makedirs("data", exist_ok=True) + +def generate_article_id(title, link, date): + """Generiert eine eindeutige ID für einen Artikel basierend auf mehreren Attributen""" + identifier = f"{title}_{link}_{date}" + return hashlib.md5(identifier.encode('utf-8')).hexdigest() + +def is_duplicate_article(new_article, existing_articles): + """Prüft ob ein Artikel bereits existiert (erweiterte Duplikatserkennung)""" + new_title = new_article.get("title", "").lower().strip() + new_link = new_article.get("link", "").strip() + + for existing in existing_articles: + existing_title = existing.get("title", "").lower().strip() + existing_link = existing.get("link", "").strip() + + # Exakte URL-Übereinstimmung + if new_link and existing_link and new_link == existing_link: + return True + + # Sehr ähnliche Titel (mindestens 90% Übereinstimmung) + if new_title and existing_title: + similarity = calculate_similarity(new_title, existing_title) + if similarity > 0.9: + return True + + return False + +def calculate_similarity(text1, text2): + """Berechnet die Ähnlichkeit zwischen zwei Texten (vereinfachte Methode)""" + words1 = set(text1.split()) + words2 = set(text2.split()) + + if not words1 and not words2: + return 1.0 + if not words1 or not words2: + return 0.0 + + intersection = len(words1.intersection(words2)) + union = len(words1.union(words2)) + + return intersection / union if union > 0 else 0.0 def load_feeds(): - if not os.path.exists(FEEDS_FILE): + """Lädt RSS-Feeds aus der JSON-Datei""" + try: + if not os.path.exists(FEEDS_FILE): + logging.info("Feeds-Datei existiert nicht, erstelle leere Liste") + return [] + + with open(FEEDS_FILE, "r", encoding='utf-8') as f: + feeds = json.load(f) + logging.info(f"✅ {len(feeds)} Feeds geladen") + return feeds + except Exception as e: + logging.error(f"❌ Fehler beim Laden der Feeds: {e}") return [] - with open(FEEDS_FILE, "r") as f: - return json.load(f) - def save_feeds(feeds): - with open(FEEDS_FILE, "w") as f: - json.dump(feeds, f, indent=2) - + """Speichert RSS-Feeds in die JSON-Datei""" + try: + with open(FEEDS_FILE, "w", encoding='utf-8') as f: + json.dump(feeds, f, indent=2, ensure_ascii=False) + logging.info(f"✅ {len(feeds)} Feeds gespeichert") + except Exception as e: + logging.error(f"❌ Fehler beim Speichern der Feeds: {e}") def load_articles(): - if not os.path.exists(ARTICLES_FILE): + """Lädt Artikel aus der JSON-Datei""" + try: + if not os.path.exists(ARTICLES_FILE): + logging.info("Artikel-Datei existiert nicht, erstelle leere Liste") + return [] + + with open(ARTICLES_FILE, "r", encoding='utf-8') as f: + articles = json.load(f) + + # Status-Validierung + for article in articles: + if article.get("status") not in VALID_STATUSES: + article["status"] = "New" + logging.warning(f"⚠️ Ungültiger Status für Artikel '{article.get('title', 'Unbekannt')}' korrigiert") + + logging.info(f"✅ {len(articles)} Artikel geladen") + return articles + except Exception as e: + logging.error(f"❌ Fehler beim Laden der Artikel: {e}") return [] - with open(ARTICLES_FILE, "r") as f: - articles = json.load(f) - - for article in articles: - if article.get("status") not in VALID_STATUSES: - article["status"] = "New" - return articles - def save_articles(articles): - with open(ARTICLES_FILE, "w") as f: - json.dump(articles, f, indent=2) - - -def fetch_and_process_feed(feed_url, existing_ids): - feed = feedparser.parse(feed_url) - new_articles = [] - - for entry in feed.entries: - article_id = entry.get("id") or entry.get("link") - if not article_id or article_id in existing_ids: - continue - - title = entry.get("title", "Kein Titel") - date = entry.get("published", datetime.now().isoformat()) - summary = entry.get("summary", "") - content = entry.get("content", [{}])[0].get("value") or entry.get("description", "") + """Speichert Artikel in die JSON-Datei""" + try: + # Validierung vor dem Speichern + valid_articles = [] + for article in articles: + if "id" in article and "title" in article: + valid_articles.append(article) + else: + logging.warning(f"⚠️ Ungültiger Artikel übersprungen: {article}") + + with open(ARTICLES_FILE, "w", encoding='utf-8') as f: + json.dump(valid_articles, f, indent=2, ensure_ascii=False) + + logging.info(f"✅ {len(valid_articles)} Artikel gespeichert") + except Exception as e: + logging.error(f"❌ Fehler beim Speichern der Artikel: {e}") +def clean_html_content(content): + """Bereinigt HTML-Inhalt und extrahiert Text""" + try: soup = BeautifulSoup(content, "html.parser") + + # Entferne Script- und Style-Tags + for script in soup(["script", "style"]): + script.decompose() + + # Hole sauberen Text clean_text = soup.get_text(" ", strip=True) + + # Entferne überschüssige Leerzeichen + clean_text = " ".join(clean_text.split()) + + return clean_text + except Exception as e: + logging.error(f"❌ Fehler beim Bereinigen des HTML-Inhalts: {e}") + return content - images = extract_images_with_metadata(entry.link) +def fetch_and_process_feed(feed_url, existing_articles): + """Lädt und verarbeitet einen einzelnen RSS-Feed""" + new_articles = [] + feed_name = "Unbekannt" + + try: + logging.info(f"🔄 Verarbeite Feed: {feed_url}") + + # Feed parsen + feed = feedparser.parse(feed_url) + + if hasattr(feed, 'feed') and hasattr(feed.feed, 'title'): + feed_name = feed.feed.title + logging.info(f"📡 Feed-Name: {feed_name}") + + if not feed.entries: + logging.warning(f"⚠️ Keine Einträge in Feed gefunden: {feed_url}") + return [] + + logging.info(f"📰 {len(feed.entries)} Einträge gefunden") + + for entry in feed.entries: + try: + # Basis-Informationen extrahieren + title = entry.get("title", "Kein Titel") + date = entry.get("published", datetime.now().isoformat()) + link = entry.get("link", "") + summary = entry.get("summary", "") + + # Content extrahieren + content = "" + if hasattr(entry, 'content') and entry.content: + content = entry.content[0].get("value", "") + elif hasattr(entry, 'description'): + content = entry.description + else: + content = summary + + # HTML bereinigen + clean_text = clean_html_content(content) + + # Volltext-Extraktion bei kurzen Artikeln + if len(clean_text.split()) < 50 and link: + logging.info(f"🔍 Kurzer Artikel erkannt, versuche Volltext-Extraktion: {title}") + fetched_text = extract_full_article(link) + if len(fetched_text.split()) > len(clean_text.split()): + clean_text = fetched_text + logging.info(f"✅ Volltext extrahiert: {len(clean_text.split())} Wörter") + + # Artikel-ID generieren + article_id = generate_article_id(title, link, date) + + # Neuen Artikel erstellen + new_article = { + "id": article_id, + "title": title, + "date": date, + "summary": summary[:300] + "..." if len(summary) > 300 else summary, + "text": clean_text, + "tags": [], + "status": "New", + "link": link, + "images": [], + "source": feed_url, + "source_name": feed_name, + "created_at": datetime.now().isoformat(), + "word_count": len(clean_text.split()) + } + + # Duplikatsprüfung + if not is_duplicate_article(new_article, existing_articles): + # Bilder extrahieren + if link: + try: + images = extract_images_with_metadata(link) + new_article["images"] = images + logging.info(f"🖼️ {len(images)} Bilder für '{title}' extrahiert") + except Exception as e: + logging.error(f"❌ Fehler bei Bildextraktion für '{title}': {e}") + + new_articles.append(new_article) + logging.info(f"✅ Neuer Artikel hinzugefügt: {title}") + else: + logging.info(f"🔄 Duplikat übersprungen: {title}") + + except Exception as e: + logging.error(f"❌ Fehler beim Verarbeiten des Eintrags '{entry.get('title', 'Unbekannt')}': {e}") + continue + + logging.info(f"✅ Feed verarbeitet: {len(new_articles)} neue Artikel aus {feed_url}") + return new_articles + + except Exception as e: + logging.error(f"❌ Kritischer Fehler beim Verarbeiten von {feed_url}: {e}") + return [] - new_articles.append({ - "id": article_id, - "title": title, - "date": date, - "summary": summary, - "text": clean_text, - "tags": [], - "status": "New", - "link": entry.get("link", ""), - "images": images - }) - - return new_articles - - -def process_articles(existing_ids): - feeds = load_feeds() - all_articles = load_articles() - articles_by_id = {article["id"]: article for article in all_articles if "id" in article} - new_entries = [] - - for feed in feeds: - url = feed.get("url") if isinstance(feed, dict) else feed - if not url: - continue - try: - logging.info(f"Lade Feed: {url}") - entries = fetch_and_process_feed(url, existing_ids) - new_entries.extend(entries) - logging.info(f"{len(entries)} neue Artikel gefunden in {url}") - except Exception as e: - logging.exception(f"Fehler beim Verarbeiten von {url}:") - - added = 0 - for entry in new_entries: - if entry["id"] not in articles_by_id: - articles_by_id[entry["id"]] = entry - added += 1 +def process_articles(existing_ids=None): + """Verarbeitet alle RSS-Feeds und fügt neue Artikel hinzu""" + try: + start_time = time.time() + logging.info("🚀 Starte Artikel-Verarbeitung") + + feeds = load_feeds() + all_articles = load_articles() + + if not feeds: + logging.warning("⚠️ Keine RSS-Feeds konfiguriert") + return + + # Bestehende Artikel für Duplikatsprüfung + existing_articles = all_articles.copy() + + total_new_articles = 0 + + for feed in feeds: + feed_url = feed.get("url") if isinstance(feed, dict) else feed + + if not feed_url: + logging.warning("⚠️ Feed ohne URL übersprungen") + continue + + try: + new_articles = fetch_and_process_feed(feed_url, existing_articles) + + # Neue Artikel zur Gesamtliste hinzufügen + for article in new_articles: + all_articles.append(article) + existing_articles.append(article) # Für weitere Duplikatsprüfung + + total_new_articles += len(new_articles) + + # Kurze Pause zwischen Feeds + time.sleep(1) + + except Exception as e: + logging.error(f"❌ Fehler beim Verarbeiten von Feed {feed_url}: {e}") + continue + + # Artikel speichern + if total_new_articles > 0: + save_articles(all_articles) + processing_time = time.time() - start_time + logging.info(f"🎉 Verarbeitung abgeschlossen: {total_new_articles} neue Artikel in {processing_time:.2f}s hinzugefügt") else: - logging.info(f"Artikel bereits vorhanden, wird übersprungen: {entry['title']}") - - if added > 0: - save_articles(list(articles_by_id.values())) - logging.info(f"{added} neue Artikel gespeichert.") - else: - logging.info("Keine neuen Artikel gefunden.") - + logging.info("ℹ️ Keine neuen Artikel gefunden") + + except Exception as e: + logging.error(f"❌ Kritischer Fehler bei der Artikel-Verarbeitung: {e}") def rewrite_articles(): - articles = load_articles() - changed = False - - for article in articles: - if article.get("status") == "Rewrite": + """Schreibt Artikel mit Status 'Rewrite' um""" + try: + logging.info("✍️ Starte Artikel-Umschreibung") + + articles = load_articles() + rewrite_articles_list = [a for a in articles if a.get("status") == "Rewrite"] + + if not rewrite_articles_list: + logging.info("ℹ️ Keine Artikel zum Umschreiben gefunden") + return + + if not openai.api_key: + logging.error("❌ OpenAI API-Key nicht konfiguriert") + return + + changed = False + + for article in rewrite_articles_list: try: logging.info(f"✍️ Umschreiben von: {article['title']}") - prompt = f"Schreibe folgenden Artikel um und fasse ihn verständlich zusammen:\n\n{article['text']}" + + # Artikel umschreiben + prompt = f"""Schreibe den folgenden Artikel um und fasse ihn verständlich zusammen. + Behalte die wichtigsten Informationen bei, aber formuliere alles neu: + + {article['text']}""" + response = openai.chat.completions.create( model="gpt-4", messages=[ - {"role": "system", "content": "Du bist ein professioneller Redakteur."}, + {"role": "system", "content": "Du bist ein professioneller Redakteur, der Artikel umschreibt und verbessert."}, {"role": "user", "content": prompt} - ] + ], + max_tokens=1500, + temperature=0.7 ) + new_text = response.choices[0].message.content.strip() - article["text"] = f"{article['title']}\n\n{new_text}" - article["status"] = "Process" + + # Tags generieren + tag_prompt = f"""Erstelle 3-5 passende, kurze Stichwörter (Tags) für diesen Artikel. + Gib nur die Tags zurück, getrennt durch Kommas: - tag_prompt = f"Erstelle 3 passende, kurze Stichwörter (Tags) für diesen Artikel:\n\n{new_text}" + {new_text}""" + tag_response = openai.chat.completions.create( model="gpt-4", messages=[ - {"role": "system", "content": "Du bist ein Blog-Tag-Generator."}, + {"role": "system", "content": "Du generierst präzise Tags für Blog-Artikel."}, {"role": "user", "content": tag_prompt} - ] + ], + max_tokens=100, + temperature=0.5 ) + tags_raw = tag_response.choices[0].message.content.strip() - tags = [tag.strip(" ,") for tag in tags_raw.replace("\n", ",").split(",") if tag.strip()] + tags = [tag.strip().strip(',') for tag in tags_raw.split(",") if tag.strip()] + + # Artikel aktualisieren + article["text"] = new_text article["tags"] = tags - + article["status"] = "Process" + article["rewritten_at"] = datetime.now().isoformat() + article["word_count"] = len(new_text.split()) + + # Bildmetadaten vervollständigen falls nötig for img in article.get("images", []): - if "caption" not in img: + if "caption" not in img or not img["caption"]: img["caption"] = "Kein Bildtitel vorhanden" - if "copyright" not in img: + if "copyright" not in img or not img["copyright"]: img["copyright"] = "Unbekannt" - if "copyright_url" not in img: + if "copyright_url" not in img or not img["copyright_url"]: img["copyright_url"] = "#" - - logging.info(f"✅ Artikel umgeschrieben: {article['title']}") + + logging.info(f"✅ Artikel erfolgreich umgeschrieben: {article['title']}") changed = True - + + # Kurze Pause zwischen API-Calls + time.sleep(2) + except Exception as e: - logging.exception(f"❌ Fehler beim Umschreiben von '{article['title']}':") + logging.error(f"❌ Fehler beim Umschreiben von '{article['title']}': {e}") + continue + + if changed: + save_articles(articles) + logging.info(f"🎉 {len(rewrite_articles_list)} Artikel erfolgreich umgeschrieben") + + except Exception as e: + logging.error(f"❌ Kritischer Fehler beim Umschreiben: {e}") - if changed: - save_articles(articles) - logging.info("Alle Artikel mit Status 'Rewrite' wurden verarbeitet.") +def upload_articles_to_wp(): + """Lädt Artikel mit Status 'Process' zu WordPress hoch""" + try: + logging.info("📤 Starte WordPress-Upload") + + articles = load_articles() + process_articles_list = [a for a in articles if a.get("status") == "Process"] + + if not process_articles_list: + logging.info("ℹ️ Keine Artikel für WordPress-Upload gefunden") + return {"total": 0, "successful": 0, "failed": 0, "message": "Keine Artikel zum Hochladen gefunden"} + + logging.info(f"📦 {len(process_articles_list)} Artikel für WordPress-Upload gefunden") + + # WordPress-Upload durchführen + upload_results = upload_articles_to_wordpress(process_articles_list) + + # Status der erfolgreich hochgeladenen Artikel ändern + if upload_results.get('successful', 0) > 0: + changed = False + + for detail in upload_results.get('details', []): + if detail.get('success'): + article_id = detail.get('article_id') + + # Artikel in der Liste finden und Status ändern + for article in articles: + if article.get('id') == article_id: + article['status'] = "WordPress Pending" + article['wp_upload_date'] = datetime.now().isoformat() + article['wp_post_id'] = detail.get('wp_post_id') + changed = True + logging.info(f"✅ Status geändert für '{article.get('title')}': Process → WordPress Pending") + break + + if changed: + save_articles(articles) + logging.info(f"💾 Artikel-Status nach WordPress-Upload aktualisiert") + + return upload_results + + except Exception as e: + logging.error(f"❌ Kritischer Fehler beim WordPress-Upload: {e}") + return {"total": 0, "successful": 0, "failed": 1, "error": str(e)} + +def get_article_stats(): + """Gibt Statistiken über die Artikel zurück""" + try: + articles = load_articles() + + stats = { + "total_articles": len(articles), + "status_distribution": {}, + "word_count_stats": {}, + "source_distribution": {}, + "images_count": 0 + } + + # Status-Verteilung + for article in articles: + status = article.get("status", "New") + stats["status_distribution"][status] = stats["status_distribution"].get(status, 0) + 1 + + # Wortanzahl-Statistiken + word_counts = [article.get("word_count", 0) for article in articles if article.get("word_count")] + if word_counts: + stats["word_count_stats"] = { + "average": sum(word_counts) // len(word_counts), + "min": min(word_counts), + "max": max(word_counts) + } + + # Quellen-Verteilung + for article in articles: + source = article.get("source_name", "Unbekannt") + stats["source_distribution"][source] = stats["source_distribution"].get(source, 0) + 1 + + # Bilder zählen + stats["images_count"] = sum(len(article.get("images", [])) for article in articles) + + return stats + + except Exception as e: + logging.error(f"❌ Fehler beim Erstellen der Statistiken: {e}") + return {} \ No newline at end of file diff --git a/pages/01_feed_manager.py b/pages/01_feed_manager.py new file mode 100644 index 0000000..255dd73 --- /dev/null +++ b/pages/01_feed_manager.py @@ -0,0 +1,240 @@ +# pages/01_feed_manager.py + +import streamlit as st +from main import load_feeds, save_feeds, load_articles +from utils.css_loader import load_css, apply_dark_theme +import logging + +# === CSS & Theme laden === +load_css() +apply_dark_theme() + +# === Logging vorbereiten === +log_dir = "logs" +log_file = f"{log_dir}/rss_tool.log" +logging.basicConfig( + filename=log_file, + level=logging.INFO, + format="%(asctime)s - %(levelname)s - %(message)s" +) + +st.set_page_config(page_title="📡 Feed-Verwaltung") + +# Header +st.markdown(""" +
    +

    📡 RSS Feed-Verwaltung

    +

    Verwalte deine RSS-Feeds zentral und effizient

    +
    +""", unsafe_allow_html=True) + +feeds = load_feeds() +articles = load_articles() + +# === Neuen Feed hinzufügen === +st.markdown('
    ', unsafe_allow_html=True) +st.subheader("➕ Neuen Feed hinzufügen") + +with st.form("add_feed_form"): + col1, col2 = st.columns(2) + with col1: + new_url = st.text_input("Feed URL", "", placeholder="https://example.com/feed.xml") + with col2: + new_name = st.text_input("Feed Name", "", placeholder="Beispiel News") + + submitted = st.form_submit_button("Feed hinzufügen", use_container_width=True) + if submitted: + if new_url and new_name: + if not any(f.get("url") == new_url for f in feeds): + feeds.append({"url": new_url, "name": new_name}) + save_feeds(feeds) + logging.info(f"🔗 Neuer Feed hinzugefügt: {new_name} ({new_url})") + st.success(f"Feed '{new_name}' hinzugefügt.") + st.rerun() + else: + st.warning("⚠️ Dieser Feed existiert bereits.") + else: + st.error("❌ Bitte gib sowohl URL als auch Name ein.") + +st.markdown('
    ', unsafe_allow_html=True) + +# === Bestehende Feeds bearbeiten === +st.subheader("🛠️ Vorhandene Feeds verwalten") + +if not feeds: + st.info("Noch keine Feeds konfiguriert. Füge oben deinen ersten Feed hinzu!") +else: + for idx, feed in enumerate(feeds): + feed_url = feed.get("url", "") + feed_name = feed.get("name", "Unbekannt") + article_count = sum(1 for a in articles if a.get("source") == feed_url) + + # Feed Card + st.markdown(f""" +
    +
    +
    +

    {feed_name}

    + +
    +
    + {article_count} Artikel +
    +
    + +
    + """, unsafe_allow_html=True) + + # Actions + col1, col2, col3 = st.columns(3) + + with col1: + if st.button("💾 Bearbeiten", key=f"edit_{idx}", use_container_width=True): + st.session_state[f"edit_mode_{idx}"] = not st.session_state.get(f"edit_mode_{idx}", False) + + with col2: + if st.button("🔄 Aktualisieren", key=f"refresh_{idx}", use_container_width=True): + with st.spinner(f"Aktualisiere Feed '{feed_name}'..."): + # Hier könntest du eine einzelne Feed-Update-Funktion implementieren + from main import process_articles + existing_ids = [a["id"] for a in articles] + process_articles(existing_ids) + st.success(f"Feed '{feed_name}' aktualisiert!") + st.rerun() + + with col3: + if st.button("🗑️ Löschen", key=f"delete_{idx}", use_container_width=True): + # Bestätigung über Session State + if not st.session_state.get(f"confirm_delete_{idx}", False): + st.session_state[f"confirm_delete_{idx}"] = True + st.warning(f"Klicke erneut um '{feed_name}' wirklich zu löschen!") + else: + deleted_feed = feeds.pop(idx) + save_feeds(feeds) + logging.info(f"❌ Feed gelöscht: {deleted_feed.get('name')} ({deleted_feed.get('url')})") + st.success(f"Feed '{feed_name}' wurde gelöscht.") + # Cleanup Session State + if f"confirm_delete_{idx}" in st.session_state: + del st.session_state[f"confirm_delete_{idx}"] + st.rerun() + + # Edit Form (wenn aktiviert) + if st.session_state.get(f"edit_mode_{idx}", False): + st.markdown('
    ', unsafe_allow_html=True) + st.write("**Feed bearbeiten:**") + + with st.form(f"edit_form_{idx}"): + col1, col2 = st.columns(2) + with col1: + edited_url = st.text_input("Feed-URL", value=feed_url, key=f"edit_url_{idx}") + with col2: + edited_name = st.text_input("Feed-Name", value=feed_name, key=f"edit_name_{idx}") + + form_col1, form_col2 = st.columns(2) + with form_col1: + if st.form_submit_button("💾 Änderungen speichern", use_container_width=True): + old_url, old_name = feed.get("url"), feed.get("name") + feeds[idx]["url"] = edited_url + feeds[idx]["name"] = edited_name + save_feeds(feeds) + logging.info(f"✏️ Feed geändert: '{old_name}' ({old_url}) → '{edited_name}' ({edited_url})") + st.success("Änderungen gespeichert!") + st.session_state[f"edit_mode_{idx}"] = False + st.rerun() + + with form_col2: + if st.form_submit_button("❌ Abbrechen", use_container_width=True): + st.session_state[f"edit_mode_{idx}"] = False + st.rerun() + + st.markdown('
    ', unsafe_allow_html=True) + +# === Feed-Statistiken === +if feeds: + st.markdown("---") + st.subheader("📊 Feed-Statistiken") + + col1, col2, col3 = st.columns(3) + + with col1: + st.markdown(""" +
    +
    {}
    +
    Feeds Gesamt
    +
    + """.format(len(feeds)), unsafe_allow_html=True) + + with col2: + total_articles = len(articles) + st.markdown(""" +
    +
    {}
    +
    Artikel Gesamt
    +
    + """.format(total_articles), unsafe_allow_html=True) + + with col3: + avg_articles = total_articles // len(feeds) if feeds else 0 + st.markdown(""" +
    +
    {}
    +
    Ø Artikel pro Feed
    +
    + """.format(avg_articles), unsafe_allow_html=True) + +# === Bulk Actions === +if feeds: + st.markdown("---") + st.subheader("⚡ Bulk-Aktionen") + + col1, col2 = st.columns(2) + + with col1: + if st.button("🔄 Alle Feeds aktualisieren", use_container_width=True): + with st.spinner("Aktualisiere alle Feeds..."): + from main import process_articles + existing_ids = [a["id"] for a in articles] + process_articles(existing_ids) + st.success(f"Alle {len(feeds)} Feeds wurden aktualisiert!") + st.rerun() + + with col2: + if st.button("📊 Feed-Performance anzeigen", use_container_width=True): + st.subheader("📈 Feed-Performance") + + # Performance-Daten sammeln + feed_performance = [] + for feed in feeds: + feed_url = feed.get("url", "") + feed_name = feed.get("name", "Unbekannt") + feed_articles = [a for a in articles if a.get("source") == feed_url] + + performance = { + "name": feed_name, + "url": feed_url, + "total_articles": len(feed_articles), + "new_articles": len([a for a in feed_articles if a.get("status") == "New"]), + "processed_articles": len([a for a in feed_articles if a.get("status") in ["Process", "Online", "WordPress Pending"]]) + } + feed_performance.append(performance) + + # Sortiere nach Artikel-Anzahl + feed_performance.sort(key=lambda x: x["total_articles"], reverse=True) + + # Anzeige als Cards + for perf in feed_performance: + success_rate = (perf["processed_articles"] / perf["total_articles"] * 100) if perf["total_articles"] > 0 else 0 + + st.markdown(f""" +
    +

    {perf["name"]}

    + +
    + """, unsafe_allow_html=True) \ No newline at end of file diff --git a/pages/log_viewer.py b/pages/log_viewer.py index fea50c7..5763825 100644 --- a/pages/log_viewer.py +++ b/pages/log_viewer.py @@ -1,23 +1,297 @@ -# log_viewer.py +# pages/log_viewer.py import streamlit as st import os +from utils.css_loader import load_css, apply_dark_theme +from datetime import datetime + +# === CSS & Theme laden === +load_css() +apply_dark_theme() st.set_page_config(page_title="🧾 Log Viewer", layout="wide") -st.title("🧾 Letzte Logeinträge anzeigen") + +# Header +st.markdown(""" +
    +

    🧾 Log Viewer

    +

    Überwache Systemaktivitäten und Debug-Informationen

    +
    +""", unsafe_allow_html=True) LOG_FILE = "logs/rss_tool.log" MAX_LINES = 500 -if not os.path.exists(LOG_FILE): - st.warning("Keine Logdatei gefunden.") -else: - with open(LOG_FILE, "r") as f: - lines = f.readlines() +# === Log-Datei Kontrollen === +st.markdown('
    ', unsafe_allow_html=True) +st.subheader("📁 Log-Datei Optionen") - st.write(f"Letzte {min(len(lines), MAX_LINES)} Zeilen aus `{LOG_FILE}`:") +col1, col2, col3, col4 = st.columns(4) - st.code("".join(lines[-MAX_LINES:]), language="text") +with col1: + lines_to_show = st.selectbox( + "Anzahl Zeilen", + [50, 100, 200, 500, 1000], + index=3, # Default: 500 + key="lines_select" + ) - if st.button("🔄 Neu laden"): +with col2: + if st.button("🔄 Neu laden", use_container_width=True): st.rerun() + +with col3: + log_level_filter = st.selectbox( + "Log Level Filter", + ["Alle", "INFO", "WARNING", "ERROR", "DEBUG"], + key="level_filter" + ) + +with col4: + search_term = st.text_input( + "Suche in Logs", + placeholder="Suchbegriff...", + key="log_search" + ) + +st.markdown('
    ', unsafe_allow_html=True) + +# === Log-Datei Status === +if not os.path.exists(LOG_FILE): + st.markdown(""" +
    + ⚠️ Keine Log-Datei gefunden
    +
    + Die Log-Datei wurde noch nicht erstellt oder befindet sich an einem anderen Ort.
    + Erwarteter Pfad: {} +
    +
    + """.format(LOG_FILE), unsafe_allow_html=True) +else: + # Datei-Informationen + file_size = os.path.getsize(LOG_FILE) + file_mtime = datetime.fromtimestamp(os.path.getmtime(LOG_FILE)) + + col1, col2, col3 = st.columns(3) + + with col1: + st.markdown(""" +
    +
    {:.1f} KB
    +
    Dateigröße
    +
    + """.format(file_size / 1024), unsafe_allow_html=True) + + with col2: + st.markdown(""" +
    +
    {}
    +
    Letzte Änderung
    +
    + """.format(file_mtime.strftime("%H:%M:%S")), unsafe_allow_html=True) + + with col3: + # Zeilen zählen + try: + with open(LOG_FILE, "r", encoding="utf-8") as f: + total_lines = sum(1 for _ in f) + except: + total_lines = 0 + + st.markdown(""" +
    +
    {}
    +
    Zeilen Gesamt
    +
    + """.format(total_lines), unsafe_allow_html=True) + + # === Log-Inhalt anzeigen === + try: + with open(LOG_FILE, "r", encoding="utf-8") as f: + lines = f.readlines() + + # Filter anwenden + filtered_lines = [] + + for line in lines: + # Log Level Filter + if log_level_filter != "Alle": + if f" - {log_level_filter} - " not in line: + continue + + # Suchfilter + if search_term and search_term.lower() not in line.lower(): + continue + + filtered_lines.append(line) + + # Anzahl begrenzen + display_lines = filtered_lines[-lines_to_show:] if len(filtered_lines) > lines_to_show else filtered_lines + + # Header für Log-Anzeige + st.subheader(f"📋 Log-Einträge ({len(display_lines)} von {len(filtered_lines)} gefilterten Zeilen)") + + if display_lines: + # Log-Inhalt mit Syntax-Highlighting + log_content = "".join(display_lines) + + # Farbkodierung für verschiedene Log-Level + colored_content = log_content + colored_content = colored_content.replace(" - ERROR - ", " - 🔴 ERROR - ") + colored_content = colored_content.replace(" - WARNING - ", " - 🟡 WARNING - ") + colored_content = colored_content.replace(" - INFO - ", " - 🔵 INFO - ") + colored_content = colored_content.replace(" - DEBUG - ", " - ⚪ DEBUG - ") + + # Log in Card anzeigen + st.markdown(""" +
    +

    📄 Log-Ausgabe

    + +
    + """.format( + count=len(display_lines), + level=log_level_filter, + search=search_term or "Keine" + ), unsafe_allow_html=True) + + # Code-Block mit Logs + st.code(colored_content, language="text") + + # Download-Button + st.download_button( + label="💾 Log-Datei herunterladen", + data=log_content, + file_name=f"rss_tool_log_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt", + mime="text/plain", + use_container_width=True + ) + + else: + st.markdown(""" +
    + 🔍 Keine Log-Einträge gefunden
    +
    + Mit den aktuellen Filtern wurden keine Log-Einträge gefunden.
    + Versuche andere Filter-Einstellungen. +
    +
    + """, unsafe_allow_html=True) + + except Exception as e: + st.markdown(f""" +
    + ❌ Fehler beim Lesen der Log-Datei
    +
    + {str(e)} +
    +
    + """, unsafe_allow_html=True) + +# === Log-Level Erklärung === +with st.expander("ℹ️ Log-Level Erklärung", expanded=False): + st.markdown(""" +
    +

    📖 Log-Level Bedeutung

    +
    + 🔵 INFO: Normale Programmaktivitäten (Feed-Updates, Artikel verarbeitet)
    + 🟡 WARNING: Potentielle Probleme (Duplikate, fehlende Daten)
    + 🔴 ERROR: Fehler die das Programm beeinträchtigen
    + ⚪ DEBUG: Detaillierte Entwickler-Informationen +
    +
    + """, unsafe_allow_html=True) + +# === Log-Datei verwalten === +st.markdown("---") +st.subheader("🛠️ Log-Datei Verwaltung") + +col1, col2, col3 = st.columns(3) + +with col1: + if st.button("🗑️ Log-Datei leeren", use_container_width=True): + if st.button("⚠️ Wirklich leeren?", key="confirm_clear"): + try: + with open(LOG_FILE, "w", encoding="utf-8") as f: + f.write("") + st.success("Log-Datei wurde geleert!") + st.rerun() + except Exception as e: + st.error(f"Fehler beim Leeren der Log-Datei: {e}") + +with col2: + if st.button("📦 Log archivieren", use_container_width=True): + try: + archive_name = f"rss_tool_log_archive_{datetime.now().strftime('%Y%m%d_%H%M%S')}.txt" + with open(LOG_FILE, "r", encoding="utf-8") as f: + log_data = f.read() + + st.download_button( + label=f"💾 {archive_name}", + data=log_data, + file_name=archive_name, + mime="text/plain", + key="archive_download" + ) + except Exception as e: + st.error(f"Fehler beim Archivieren: {e}") + +with col3: + if st.button("📊 Log-Statistiken", use_container_width=True): + if os.path.exists(LOG_FILE): + try: + with open(LOG_FILE, "r", encoding="utf-8") as f: + all_lines = f.readlines() + + # Statistiken berechnen + total_lines = len(all_lines) + info_count = sum(1 for line in all_lines if " - INFO - " in line) + warning_count = sum(1 for line in all_lines if " - WARNING - " in line) + error_count = sum(1 for line in all_lines if " - ERROR - " in line) + debug_count = sum(1 for line in all_lines if " - DEBUG - " in line) + + st.subheader("📈 Log-Statistiken") + + col1, col2, col3, col4 = st.columns(4) + + with col1: + st.markdown(""" +
    +
    {}
    +
    🔵 INFO
    +
    + """.format(info_count), unsafe_allow_html=True) + + with col2: + st.markdown(""" +
    +
    {}
    +
    🟡 WARNING
    +
    + """.format(warning_count), unsafe_allow_html=True) + + with col3: + st.markdown(""" +
    +
    {}
    +
    🔴 ERROR
    +
    + """.format(error_count), unsafe_allow_html=True) + + with col4: + st.markdown(""" +
    +
    {}
    +
    ⚪ DEBUG
    +
    + """.format(debug_count), unsafe_allow_html=True) + + except Exception as e: + st.error(f"Fehler beim Berechnen der Statistiken: {e}") + +# === Auto-Refresh Option === +if st.checkbox("🔄 Auto-Refresh (30s)", key="auto_refresh"): + import time + time.sleep(30) + st.rerun() \ No newline at end of file diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..c15b448 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,4 @@ +[pytest] +testpaths = backend/tests +python_files = test_*.py +addopts = -q --maxfail=1 diff --git a/requirements.txt b/requirements.txt index 5a684fe..5fde2a7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -53,3 +53,6 @@ typing_extensions==4.14.0 tzdata==2025.2 urllib3==2.5.0 typer[all]==0.12.3 +# Bild- und Hashing-Bibliotheken für Dedupe +Pillow>=10.0.0 # Bildverarbeitung (öffnet Bilder für pHash) +ImageHash>=4.3 # Perzeptueller Hash (pHash) für Near-Duplicate Erkennung diff --git a/scripts/smoke_backend.sh b/scripts/smoke_backend.sh new file mode 100755 index 0000000..f0000ad --- /dev/null +++ b/scripts/smoke_backend.sh @@ -0,0 +1,33 @@ +#!/usr/bin/env bash +set -euo pipefail + +if [[ -z "${BASE_URL:-}" ]]; then + echo "BASE_URL fehlt (z. B. https://news.vanityontour.de)" + exit 1 +fi + +if [[ -z "${APP_ADMIN_USERNAME:-}" || -z "${APP_ADMIN_PASSWORD:-}" ]]; then + echo "APP_ADMIN_USERNAME/APP_ADMIN_PASSWORD fehlen" + exit 1 +fi + +cookie_file="$(mktemp)" +trap 'rm -f "$cookie_file"' EXIT + +echo "[1/4] Healthcheck" +curl -fsS "${BASE_URL}/health" | grep -q '"status":"ok"' + +echo "[2/4] Login" +curl -fsS -c "$cookie_file" \ + -H "Content-Type: application/json" \ + -X POST "${BASE_URL}/auth/login" \ + -d "{\"username\":\"${APP_ADMIN_USERNAME}\",\"password\":\"${APP_ADMIN_PASSWORD}\"}" \ + | grep -q '"ok":true' + +echo "[3/4] Protected Endpoint" +curl -fsS -b "$cookie_file" "${BASE_URL}/api/protected" | grep -q '"ok":true' + +echo "[4/4] Pipeline Status" +curl -fsS -b "$cookie_file" "${BASE_URL}/api/pipeline/status" | grep -q '"stage":"skeleton+db"' + +echo "Smoke test erfolgreich." diff --git a/static/styles.css b/static/styles.css new file mode 100644 index 0000000..d2cbe35 --- /dev/null +++ b/static/styles.css @@ -0,0 +1,491 @@ +/* =============================================== + RSS Feed Manager - Zentrale CSS-Datei + Dark-Mode optimiert mit Fallbacks + =============================================== */ + +/* === ROOT VARIABLEN === */ +:root { + /* Dark Mode Farbpalette */ + --bg-primary: #1e1e1e; + --bg-secondary: #2d2d30; + --bg-card: #2d2d30; + --bg-header: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + --bg-filter: #363636; + + /* Text Farben */ + --text-primary: #ffffff; + --text-secondary: #b0b0b0; + --text-muted: #888888; + --text-accent: #667eea; + + /* Status Farben */ + --status-new: #2196f3; + --status-new-bg: #1565c0; + --status-rewrite: #ff9800; + --status-rewrite-bg: #ef6c00; + --status-process: #9c27b0; + --status-process-bg: #6a1b9a; + --status-online: #4caf50; + --status-online-bg: #2e7d32; + --status-hold: #e91e63; + --status-hold-bg: #ad1457; + --status-trash: #f44336; + --status-trash-bg: #c62828; + --status-wp-pending: #00bcd4; + --status-wp-pending-bg: #0097a7; + + /* Borders & Shadows */ + --border-color: #404040; + --shadow-light: 0 2px 8px rgba(0, 0, 0, 0.3); + --shadow-hover: 0 8px 20px rgba(0, 0, 0, 0.4); + + /* Accent Colors */ + --gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + --gradient-secondary: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); +} + +/* === LIGHT MODE FALLBACKS === */ +[data-theme="light"], .stApp[data-theme="light"] { + --bg-primary: #ffffff; + --bg-secondary: #f8f9fa; + --bg-card: #ffffff; + --bg-filter: #f0f2f6; + + --text-primary: #212529; + --text-secondary: #495057; + --text-muted: #6c757d; + --text-accent: #667eea; + + --border-color: #dee2e6; + --shadow-light: 0 2px 8px rgba(0, 0, 0, 0.1); + --shadow-hover: 0 8px 20px rgba(0, 0, 0, 0.15); +} + +/* === GLOBALE RESETS === */ +* { + box-sizing: border-box; +} + +/* === HAUPTCONTAINER === */ +.main-header { + background: var(--bg-header); + padding: 2rem; + border-radius: 12px; + margin-bottom: 2rem; + color: var(--text-primary); + text-align: center; + box-shadow: var(--shadow-light); +} + +.main-header h1 { + color: var(--text-primary) !important; + margin: 0 0 0.5rem 0; + font-size: 2.5rem; + font-weight: 700; +} + +.main-header p { + color: rgba(255, 255, 255, 0.9) !important; + margin: 0; + font-size: 1.1rem; +} + +/* === ARTIKEL CARDS === */ +.article-card { + background: var(--bg-card) !important; + border-radius: 12px; + padding: 1.5rem; + margin-bottom: 1rem; + box-shadow: var(--shadow-light); + border-left: 4px solid var(--text-accent); + border: 1px solid var(--border-color); + transition: all 0.3s ease; + color: var(--text-primary) !important; +} + +.article-card:hover { + transform: translateY(-2px); + box-shadow: var(--shadow-hover); + border-color: var(--text-accent); +} + +.article-card h3, +.article-card .article-title { + color: var(--text-primary) !important; + margin: 0 0 0.5rem 0; + font-size: 1.2rem; + font-weight: 600; + line-height: 1.4; +} + +.article-card .article-meta { + color: var(--text-secondary) !important; + font-size: 0.9rem; + margin-bottom: 1rem; +} + +.article-card .article-summary { + color: var(--text-secondary) !important; + line-height: 1.5; + margin-bottom: 1rem; +} + +.article-card .article-footer { + color: var(--text-muted) !important; + font-size: 0.85rem; + display: flex; + justify-content: space-between; + align-items: center; +} + +/* === STATUS BADGES === */ +.status-badge { + padding: 0.3rem 0.8rem; + border-radius: 20px; + font-size: 0.8rem; + font-weight: 600; + margin-right: 0.5rem; + display: inline-block; + color: white !important; +} + +.status-new { + background-color: var(--status-new-bg) !important; + color: white !important; +} + +.status-rewrite { + background-color: var(--status-rewrite-bg) !important; + color: white !important; +} + +.status-process { + background-color: var(--status-process-bg) !important; + color: white !important; +} + +.status-online { + background-color: var(--status-online-bg) !important; + color: white !important; +} + +.status-hold { + background-color: var(--status-hold-bg) !important; + color: white !important; +} + +.status-trash { + background-color: var(--status-trash-bg) !important; + color: white !important; +} + +.status-wp-pending { + background-color: var(--status-wp-pending-bg) !important; + color: white !important; +} + +/* === FILTER SECTION === */ +.filter-section { + background: var(--bg-filter) !important; + padding: 1.5rem; + border-radius: 12px; + margin-bottom: 2rem; + border: 1px solid var(--border-color); + box-shadow: var(--shadow-light); +} + +.filter-section h3 { + color: var(--text-primary) !important; + margin: 0 0 1rem 0; + font-size: 1.3rem; + font-weight: 600; +} + +/* === STATS CARDS === */ +.stats-card { + background: var(--bg-card) !important; + padding: 1.5rem; + border-radius: 12px; + text-align: center; + box-shadow: var(--shadow-light); + border: 1px solid var(--border-color); + transition: transform 0.2s ease; +} + +.stats-card:hover { + transform: translateY(-2px); +} + +.stats-number { + font-size: 2.5rem; + font-weight: 700; + color: var(--text-accent) !important; + margin-bottom: 0.5rem; + display: block; +} + +.stats-card div:last-child { + color: var(--text-secondary) !important; + font-weight: 500; + font-size: 1rem; +} + +/* === WORDPRESS STATUS === */ +.wp-status { + background: var(--bg-card) !important; + padding: 1rem; + border-radius: 8px; + margin: 1rem 0; + border-left: 4px solid var(--status-wp-pending); + border: 1px solid var(--border-color); + box-shadow: var(--shadow-light); +} + +.wp-status strong { + color: var(--text-primary) !important; +} + +.wp-status small { + color: var(--text-muted) !important; +} + +/* === IMAGE GALLERY === */ +.image-gallery { + display: flex; + gap: 1rem; + overflow-x: auto; + padding: 1rem 0; +} + +.image-item { + min-width: 200px; + text-align: center; + background: var(--bg-card); + padding: 1rem; + border-radius: 8px; + border: 1px solid var(--border-color); +} + +.image-item img { + border-radius: 6px; + max-width: 100%; +} + +.image-item strong, +.image-item p { + color: var(--text-primary) !important; +} + +.image-item small { + color: var(--text-muted) !important; +} + +/* === BUTTONS & ACTIONS === */ +.action-button { + margin: 0.25rem; + border-radius: 6px; +} + +/* Streamlit Button Overrides */ +.stButton > button { + background: var(--gradient-primary) !important; + color: white !important; + border: none !important; + border-radius: 8px !important; + font-weight: 600 !important; + transition: all 0.2s ease !important; +} + +.stButton > button:hover { + transform: translateY(-1px) !important; + box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4) !important; +} + +/* === SELECTBOX & INPUT OVERRIDES === */ +.stSelectbox > div > div { + background-color: var(--bg-card) !important; + color: var(--text-primary) !important; + border: 1px solid var(--border-color) !important; +} + +.stTextInput > div > div > input { + background-color: var(--bg-card) !important; + color: var(--text-primary) !important; + border: 1px solid var(--border-color) !important; +} + +/* === TABS === */ +.stTabs [data-baseweb="tab-list"] { + background-color: var(--bg-secondary) !important; + border-radius: 8px; + padding: 0.25rem; +} + +.stTabs [data-baseweb="tab"] { + color: var(--text-secondary) !important; + background-color: transparent !important; + border-radius: 6px !important; + font-weight: 600 !important; +} + +.stTabs [aria-selected="true"] { + background-color: var(--text-accent) !important; + color: white !important; +} + +/* === EXPANDER === */ +.streamlit-expanderHeader { + background-color: var(--bg-card) !important; + color: var(--text-primary) !important; + border: 1px solid var(--border-color) !important; + border-radius: 8px !important; +} + +.streamlit-expanderContent { + background-color: var(--bg-card) !important; + border: 1px solid var(--border-color) !important; + border-top: none !important; +} + +/* === METRICS === */ +.metric-container { + background: var(--bg-card) !important; + padding: 1rem; + border-radius: 8px; + border: 1px solid var(--border-color); + text-align: center; +} + +.metric-container [data-testid="metric-container"] { + background: transparent !important; +} + +.metric-container [data-testid="metric-container"] > div { + color: var(--text-primary) !important; +} + +/* === CODE BLOCKS === */ +.stCodeBlock { + background-color: var(--bg-secondary) !important; + border: 1px solid var(--border-color) !important; + border-radius: 8px; +} + +/* === SUCCESS/ERROR/WARNING/INFO === */ +.stAlert { + border-radius: 8px !important; + border: 1px solid var(--border-color) !important; +} + +.stSuccess { + background-color: rgba(76, 175, 80, 0.1) !important; + color: var(--status-online) !important; + border-color: var(--status-online) !important; +} + +.stError { + background-color: rgba(244, 67, 54, 0.1) !important; + color: var(--status-trash) !important; + border-color: var(--status-trash) !important; +} + +.stWarning { + background-color: rgba(255, 152, 0, 0.1) !important; + color: var(--status-rewrite) !important; + border-color: var(--status-rewrite) !important; +} + +.stInfo { + background-color: rgba(33, 150, 243, 0.1) !important; + color: var(--status-new) !important; + border-color: var(--status-new) !important; +} + +/* === SIDEBAR === */ +.css-1d391kg { + background-color: var(--bg-secondary) !important; +} + +.css-1d391kg .stMarkdown { + color: var(--text-primary) !important; +} + +/* === RESPONSIVE DESIGN === */ +@media (max-width: 768px) { + .main-header { + padding: 1.5rem; + } + + .main-header h1 { + font-size: 2rem; + } + + .article-card { + padding: 1rem; + } + + .stats-card { + padding: 1rem; + } + + .stats-number { + font-size: 2rem; + } +} + +/* === UTILITY CLASSES === */ +.text-primary { color: var(--text-primary) !important; } +.text-secondary { color: var(--text-secondary) !important; } +.text-muted { color: var(--text-muted) !important; } +.text-accent { color: var(--text-accent) !important; } + +.bg-card { background-color: var(--bg-card) !important; } +.bg-secondary { background-color: var(--bg-secondary) !important; } + +.border-radius { border-radius: 8px; } +.shadow-light { box-shadow: var(--shadow-light); } +.shadow-hover { box-shadow: var(--shadow-hover); } + +/* === SCROLLBAR STYLING === */ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + background: var(--bg-secondary); + border-radius: 4px; +} + +::-webkit-scrollbar-thumb { + background: var(--text-muted); + border-radius: 4px; +} + +::-webkit-scrollbar-thumb:hover { + background: var(--text-secondary); +} + +/* === LOADING SPINNER === */ +@keyframes spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + +.loading-spinner { + border: 4px solid var(--bg-secondary); + border-top: 4px solid var(--text-accent); + border-radius: 50%; + width: 40px; + height: 40px; + animation: spin 1s linear infinite; + margin: 0 auto 1rem auto; +} + +/* === FOCUS STATES === */ +.stButton > button:focus, +.stSelectbox > div > div:focus, +.stTextInput > div > div > input:focus { + outline: 2px solid var(--text-accent) !important; + outline-offset: 2px !important; +} \ No newline at end of file diff --git a/tools/image_deduper.py b/tools/image_deduper.py new file mode 100644 index 0000000..8bbec23 --- /dev/null +++ b/tools/image_deduper.py @@ -0,0 +1,303 @@ +#!/usr/bin/env python3 +""" +image_deduper.py — Finde und bereinige Bild-Dubletten sicher & reversibel. + +Funktionen: +- Scan: Verzeichnisse rekursiv scannen, sha256 + pHash berechnen +- Report: CSV + menschenlesbare Zusammenfassung mit Gruppen +- Apply: Duplikate auf kanonische Datei umbiegen (Hardlink/Löschen) +- Optional: DB-Referenzen aktualisieren (SQLite/SQLModel kompatibel) + +Nutzung (Beispiele): + # 1) Nur scannen + reporten (keine Änderungen): + python tools/image_deduper.py scan --roots media,assets/images --out-dir .dedupe --phash + + # 2) Report anzeigen: + python tools/image_deduper.py report --index .dedupe/index.sqlite --csv + + # 3) Anwenden (Hardlinks setzen, Dry-Run): + python tools/image_deduper.py apply --index .dedupe/index.sqlite --mode hardlink --dry-run + + # 4) Anwenden (wirklich ändern): + python tools/image_deduper.py apply --index .dedupe/index.sqlite --mode hardlink + + # 5) Referenzen in DB aktualisieren (optional): + python tools/image_deduper.py apply --index .dedupe/index.sqlite --update-db sqlite:///./rssbot.db --dry-run +""" + +import argparse +import csv +import hashlib +import os +import sqlite3 +import sys +from dataclasses import dataclass +from pathlib import Path +from typing import Iterable, List, Optional, Tuple + +try: + from PIL import Image +except ImportError: + Image = None + +try: + import imagehash # type: ignore +except ImportError: + imagehash = None + + +IMAGE_EXTS = {".jpg", ".jpeg", ".png", ".webp", ".gif"} +DEFAULT_INDEX = ".dedupe/index.sqlite" +DEFAULT_REPORT = ".dedupe/report.csv" + + +def sha256_file(path: Path, bufsize: int = 1024 * 1024) -> str: + h = hashlib.sha256() + with path.open("rb") as f: + while True: + b = f.read(bufsize) + if not b: + break + h.update(b) + return h.hexdigest() + + +def calc_phash(path: Path) -> Optional[str]: + if Image is None or imagehash is None: + return None + try: + with Image.open(path) as im: + im = im.convert("RGB") + ph = imagehash.phash(im, hash_size=16) # 16x16 → 256-bit + return str(ph) + except Exception: + return None + + +def ensure_dir(p: Path): + p.mkdir(parents=True, exist_ok=True) + + +def init_index(db_path: Path): + conn = sqlite3.connect(str(db_path)) + cur = conn.cursor() + cur.execute(""" + CREATE TABLE IF NOT EXISTS files ( + id INTEGER PRIMARY KEY, + path TEXT NOT NULL UNIQUE, + size INTEGER NOT NULL, + mtime REAL NOT NULL, + sha256 TEXT NOT NULL, + phash TEXT, + ext TEXT NOT NULL + ); + """) + cur.execute("CREATE INDEX IF NOT EXISTS idx_sha256 ON files (sha256);") + cur.execute("CREATE INDEX IF NOT EXISTS idx_phash ON files (phash);") + conn.commit() + conn.close() + + +def is_image(path: Path) -> bool: + return path.suffix.lower() in IMAGE_EXTS + + +def walk_images(roots: List[Path]) -> Iterable[Path]: + for root in roots: + for p in root.rglob("*"): + if p.is_file() and is_image(p): + yield p + + +def upsert_file(db_path: Path, path: Path, sha256: str, phash: Optional[str]): + st = path.stat() + row = (str(path), st.st_size, st.st_mtime, sha256, phash, path.suffix.lower()) + conn = sqlite3.connect(str(db_path)) + cur = conn.cursor() + cur.execute(""" + INSERT INTO files (path, size, mtime, sha256, phash, ext) + VALUES (?, ?, ?, ?, ?, ?) + ON CONFLICT(path) DO UPDATE SET + size=excluded.size, + mtime=excluded.mtime, + sha256=excluded.sha256, + phash=excluded.phash, + ext=excluded.ext; + """, row) + conn.commit() + conn.close() + + +def group_by_sha256(db_path: Path) -> List[List[Tuple[int, str, int]]]: + """Return list of groups: [(id, path, size), ...] where sha256 identical and len(group) > 1.""" + conn = sqlite3.connect(str(db_path)) + cur = conn.cursor() + cur.execute(""" + SELECT sha256 FROM files GROUP BY sha256 HAVING COUNT(*) > 1; + """) + hashes = [r[0] for r in cur.fetchall()] + groups = [] + for h in hashes: + cur.execute("SELECT id, path, size FROM files WHERE sha256=?", (h,)) + rows = cur.fetchall() + groups.append([(rid, rpath, rsize) for rid, rpath, rsize in rows]) + conn.close() + return groups + + +def write_csv_report(db_path: Path, csv_path: Path) -> Tuple[int, int]: + groups = group_by_sha256(db_path) + ensure_dir(csv_path.parent) + total_dups = 0 + total_savings = 0 + with csv_path.open("w", newline="", encoding="utf-8") as f: + w = csv.writer(f) + w.writerow(["group_id", "canonical_path", "dup_path", "dup_size_bytes"]) + gid = 0 + for g in groups: + if not g: + continue + # Kanon: größte Datei (oder erste) + canonical = max(g, key=lambda x: x[2]) + for rid, path, size in g: + if path == canonical[1]: + continue + total_dups += 1 + total_savings += size + w.writerow([gid, canonical[1], path, size]) + gid += 1 + return total_dups, total_savings + + +def apply_hardlink(canonical: Path, dup: Path, dry_run: bool) -> None: + # Ersetzt dup durch Hardlink auf canonical (gleiche Partition nötig) + if dry_run: + return + tmp = dup.with_suffix(dup.suffix + ".dedupe.tmp") + dup.unlink() # entferne dup + os.link(canonical, tmp) # hardlink temp + tmp.replace(dup) # atomarer move + + +def apply_delete(dup: Path, dry_run: bool) -> None: + if dry_run: + return + dup.unlink() + + +@dataclass +class ApplyStats: + processed: int = 0 + errors: int = 0 + saved_bytes: int = 0 + + +def apply_changes(csv_report: Path, mode: str, dry_run: bool) -> ApplyStats: + stats = ApplyStats() + with csv_report.open("r", encoding="utf-8") as f: + r = csv.DictReader(f) + for row in r: + canonical = Path(row["canonical_path"]) + dup = Path(row["dup_path"]) + size = int(row["dup_size_bytes"]) + try: + if mode == "hardlink": + apply_hardlink(canonical, dup, dry_run) + elif mode == "delete": + apply_delete(dup, dry_run) + else: + raise ValueError("mode must be 'hardlink' or 'delete'") + stats.processed += 1 + stats.saved_bytes += size + except Exception as e: + stats.errors += 1 + print(f"[ERROR] {dup}: {e}", file=sys.stderr) + return stats + + +def parse_roots(roots_arg: str) -> List[Path]: + parts = [Path(p.strip()) for p in roots_arg.split(",") if p.strip()] + for p in parts: + if not p.exists(): + raise FileNotFoundError(f"Root not found: {p}") + return parts + + +def cmd_scan(args): + out_dir = Path(args.out_dir) + index = Path(args.index or DEFAULT_INDEX) + ensure_dir(out_dir) + ensure_dir(index.parent) + init_index(index) + roots = parse_roots(args.roots) + + count = 0 + for path in walk_images(roots): + try: + h = sha256_file(path) + ph = calc_phash(path) if args.phash else None + upsert_file(index, path, h, ph) + count += 1 + if count % 500 == 0: + print(f"... indexed {count} files") + except Exception as e: + print(f"[WARN] {path}: {e}", file=sys.stderr) + + dups, savings = write_csv_report(index, Path(args.report or DEFAULT_REPORT)) + print(f"Indexed {count} images. Found duplicate files: {dups}, potential savings: {savings/1_000_000:.2f} MB") + print(f"Index: {index}") + print(f"Report: {args.report or DEFAULT_REPORT}") + + +def cmd_report(args): + index = Path(args.index or DEFAULT_INDEX) + csv_path = Path(args.report or DEFAULT_REPORT) + dups, savings = write_csv_report(index, csv_path) + print(f"Duplicates: {dups}, potential savings: {savings/1_000_000:.2f} MB") + if args.csv: + print(f"CSV written: {csv_path}") + + +def cmd_apply(args): + csv_report = Path(args.report or DEFAULT_REPORT) + if not csv_report.exists(): + raise FileNotFoundError(f"Report not found: {csv_report}") + stats = apply_changes(csv_report, args.mode, args.dry_run) + print(f"Processed: {stats.processed}, Errors: {stats.errors}, Saved: {stats.saved_bytes/1_000_000:.2f} MB (mode={args.mode}, dry_run={args.dry_run})") + if args.update_db: + # Platzhalter: hier könntest du eure DB-Referenzen aktualisieren (falls Bilder-Paths in DB gespeichert sind). + # Beispiel: SQLModel mit Tabelle ImageMeta(content_hash UNIQUE, local_path) → auf kanonischen Pfad umbiegen. + print(f"[INFO] DB update requested for: {args.update_db} (implementierung projektspezifisch)") + + +def main(): + ap = argparse.ArgumentParser(description="Bild-Deduplizierung (scan/report/apply)") + sub = ap.add_subparsers(dest="cmd", required=True) + + sc = sub.add_parser("scan", help="Verzeichnisse scannen und Index/Report erstellen") + sc.add_argument("--roots", required=True, help="Kommagetrennte Wurzelpfade, z.B. 'media,assets/images'") + sc.add_argument("--out-dir", default=".dedupe", help="Ausgabeverzeichnis für Index/Reports") + sc.add_argument("--index", help="Pfad zur SQLite-Indexdatei (default .dedupe/index.sqlite)") + sc.add_argument("--report", help="Pfad zum CSV-Report (default .dedupe/report.csv)") + sc.add_argument("--phash", action="store_true", help="Perzeptuellen Hash berechnen (für zukünftige Near-Dups)") + sc.set_defaults(func=cmd_scan) + + rp = sub.add_parser("report", help="Report neu generieren/anzeigen") + rp.add_argument("--index", help="Pfad zur SQLite-Indexdatei") + rp.add_argument("--report", help="Pfad zum CSV-Report") + rp.add_argument("--csv", action="store_true", help="CSV-Pfad ausgeben") + rp.set_defaults(func=cmd_report) + + aply = sub.add_parser("apply", help="Änderungen anwenden (Hardlink/Delete)") + aply.add_argument("--report", help="Pfad zum CSV-Report") + aply.add_argument("--mode", choices=["hardlink", "delete"], default="hardlink", help="Strategie für Duplikate") + aply.add_argument("--dry-run", action="store_true", help="Nur anzeigen, nichts ändern") + aply.add_argument("--update-db", help="Optional: DB-URL für Referenz-Updates (projektspezifisch)") + aply.set_defaults(func=cmd_apply) + + args = ap.parse_args() + args.func(args) + + +if __name__ == "__main__": + main() diff --git a/utils/article_extractor.py b/utils/article_extractor.py new file mode 100644 index 0000000..346a07f --- /dev/null +++ b/utils/article_extractor.py @@ -0,0 +1,363 @@ +# utils/article_extractor.py + +import requests +from bs4 import BeautifulSoup +import logging +import time +from typing import Optional + +# Konfiguration +REQUEST_TIMEOUT = 15 +MAX_RETRIES = 3 +USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' + +# Website-spezifische Selektoren +CONTENT_SELECTORS = { + # Promobil & Camping-spezifisch + 'promobil.de': [ + {'tag': 'div', 'class': 'article__text'}, + {'tag': 'div', 'class': 'article-content'}, + {'tag': 'div', 'class': 'content-text'} + ], + 'camping.info': [ + {'tag': 'div', 'class': 'article-body'}, + {'tag': 'div', 'class': 'post-content'} + ], + 'caravaning.de': [ + {'tag': 'div', 'class': 'article__content'}, + {'tag': 'div', 'class': 'entry-content'} + ], + + # WordPress Standard-Selektoren + 'wordpress': [ + {'tag': 'div', 'class': 'entry-content'}, + {'tag': 'div', 'class': 'post-content'}, + {'tag': 'div', 'class': 'content'}, + {'tag': 'main', 'class': 'main-content'}, + {'tag': 'article', 'class': None} + ], + + # Allgemeine Fallbacks + 'generic': [ + {'tag': 'article', 'class': None}, + {'tag': 'div', 'class': 'content'}, + {'tag': 'div', 'class': 'post'}, + {'tag': 'div', 'class': 'entry'}, + {'tag': 'main', 'class': None}, + {'tag': 'div', 'id': 'content'}, + {'tag': 'div', 'id': 'main'} + ] +} + +def get_domain_from_url(url: str) -> str: + """ + Extrahiert die Domain aus einer URL + """ + try: + from urllib.parse import urlparse + parsed = urlparse(url) + return parsed.netloc.lower() + except: + return "" + +def get_selectors_for_domain(domain: str) -> list: + """ + Gibt die passenden Selektoren für eine Domain zurück + """ + # Direkte Domain-Matches + for known_domain in CONTENT_SELECTORS: + if known_domain != 'wordpress' and known_domain != 'generic' and known_domain in domain: + return CONTENT_SELECTORS[known_domain] + + # WordPress erkennen (wird später durch Meta-Tags erkannt) + return CONTENT_SELECTORS['generic'] + +def is_wordpress_site(soup: BeautifulSoup) -> bool: + """ + Erkennt WordPress-Websites anhand von Meta-Tags + """ + try: + # WordPress Generator Meta-Tag + generator = soup.find('meta', attrs={'name': 'generator'}) + if generator and 'wordpress' in generator.get('content', '').lower(): + return True + + # WordPress-spezifische Link-Tags + wp_links = soup.find_all('link', href=lambda x: x and '/wp-' in x) + if wp_links: + return True + + # WordPress REST API + rest_api = soup.find('link', attrs={'rel': 'https://api.w.org/'}) + if rest_api: + return True + + return False + except: + return False + +def clean_extracted_text(text: str) -> str: + """ + Bereinigt extrahierten Text von unerwünschten Elementen + """ + if not text: + return "" + + lines = text.split('\n') + cleaned_lines = [] + + for line in lines: + line = line.strip() + + # Überspringe sehr kurze Zeilen (wahrscheinlich Navigation/Werbung) + if len(line) < 10: + continue + + # Überspringe typische Navigation/Footer-Texte + skip_patterns = [ + 'cookie', 'datenschutz', 'impressum', 'agb', 'newsletter', + 'folgen sie uns', 'social media', 'teilen', 'weiterlesen', + 'mehr zum thema', 'ähnliche artikel', 'kommentare', + 'anzeige', 'werbung', 'advertisement' + ] + + if any(pattern in line.lower() for pattern in skip_patterns): + continue + + # Überspringe Zeilen mit zu vielen Sonderzeichen (Navigation) + if len([c for c in line if c in '|•→←↑↓']) > 3: + continue + + cleaned_lines.append(line) + + # Text zusammenfügen + cleaned_text = ' '.join(cleaned_lines) + + # Mehrfache Leerzeichen entfernen + cleaned_text = ' '.join(cleaned_text.split()) + + return cleaned_text + +def extract_with_selectors(soup: BeautifulSoup, selectors: list) -> str: + """ + Versucht Text mit einer Liste von Selektoren zu extrahieren + """ + for selector in selectors: + try: + element = None + + if selector.get('class'): + element = soup.find(selector['tag'], class_=selector['class']) + elif selector.get('id'): + element = soup.find(selector['tag'], id=selector['id']) + else: + element = soup.find(selector['tag']) + + if element: + # Entferne Script- und Style-Tags + for script in element(['script', 'style', 'nav', 'header', 'footer', 'aside']): + script.decompose() + + text = element.get_text(' ', strip=True) + + # Nur zurückgeben wenn genügend Text vorhanden + if len(text.split()) > 50: + logging.info(f"✅ Erfolgreiche Extraktion mit Selektor: {selector}") + return clean_extracted_text(text) + + except Exception as e: + logging.debug(f"Selektor {selector} fehlgeschlagen: {e}") + continue + + return "" + +def extract_from_paragraphs(soup: BeautifulSoup) -> str: + """ + Fallback: Extrahiert Text aus allen Paragraph-Tags + """ + try: + paragraphs = soup.find_all('p') + + if not paragraphs: + return "" + + # Sammle alle Paragraph-Texte + texts = [] + for p in paragraphs: + text = p.get_text(strip=True) + if len(text) > 20: # Nur längere Absätze + texts.append(text) + + combined_text = ' '.join(texts) + + if len(combined_text.split()) > 30: + logging.info(f"✅ Fallback-Extraktion aus {len(paragraphs)} Paragraphen") + return clean_extracted_text(combined_text) + + return "" + + except Exception as e: + logging.error(f"Fehler bei Paragraph-Extraktion: {e}") + return "" + +def extract_full_article(url: str) -> str: + """ + Hauptfunktion: Extrahiert den vollständigen Artikeltext von einer URL + """ + if not url: + return "" + + retries = 0 + + while retries < MAX_RETRIES: + try: + logging.info(f"📰 Starte Volltextextraktion von: {url} (Versuch {retries + 1})") + + # HTTP-Request mit verbessertem Header + headers = { + 'User-Agent': USER_AGENT, + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + 'Accept-Language': 'de,en-US;q=0.7,en;q=0.3', + 'Accept-Encoding': 'gzip, deflate', + 'Connection': 'keep-alive', + 'Upgrade-Insecure-Requests': '1', + } + + response = requests.get(url, timeout=REQUEST_TIMEOUT, headers=headers) + response.raise_for_status() + + # Encoding sicherstellen + if response.encoding.lower() in ['iso-8859-1', 'windows-1252']: + response.encoding = 'utf-8' + + soup = BeautifulSoup(response.text, "html.parser") + + # Domain-spezifische Selektoren ermitteln + domain = get_domain_from_url(url) + selectors = get_selectors_for_domain(domain) + + # WordPress erkennen und entsprechende Selektoren verwenden + if is_wordpress_site(soup): + logging.info("🔧 WordPress-Site erkannt") + selectors = CONTENT_SELECTORS['wordpress'] + selectors + + # 1. Versuch: Domain-spezifische Selektoren + extracted_text = extract_with_selectors(soup, selectors) + + if extracted_text and len(extracted_text.split()) > 50: + logging.info(f"🎉 Erfolgreiche Extraktion: {len(extracted_text.split())} Wörter") + return extracted_text + + # 2. Versuch: Generische Selektoren + if not extracted_text: + logging.info("🔄 Fallback auf generische Selektoren") + extracted_text = extract_with_selectors(soup, CONTENT_SELECTORS['generic']) + + if extracted_text and len(extracted_text.split()) > 50: + logging.info(f"🎉 Erfolgreiche Extraktion (generisch): {len(extracted_text.split())} Wörter") + return extracted_text + + # 3. Versuch: Paragraph-Extraktion + if not extracted_text: + logging.info("🔄 Fallback auf Paragraph-Extraktion") + extracted_text = extract_from_paragraphs(soup) + + if extracted_text and len(extracted_text.split()) > 30: + logging.info(f"🎉 Erfolgreiche Extraktion (Paragraphen): {len(extracted_text.split())} Wörter") + return extracted_text + + # 4. Letzter Versuch: Gesamter Body-Text + if not extracted_text: + logging.info("🔄 Letzter Fallback: Body-Text") + body = soup.find('body') + if body: + # Entferne Navigation, Header, Footer + for element in body(['nav', 'header', 'footer', 'aside', 'script', 'style']): + element.decompose() + + body_text = body.get_text(' ', strip=True) + if len(body_text.split()) > 100: + extracted_text = clean_extracted_text(body_text) + logging.info(f"⚠️ Body-Extraktion: {len(extracted_text.split())} Wörter") + return extracted_text + + # Kein brauchbarer Text gefunden + if not extracted_text: + logging.warning(f"⚠️ Keine verwertbaren Inhalte gefunden bei: {url}") + return "" + + return extracted_text + + except requests.RequestException as e: + retries += 1 + logging.warning(f"🌐 Netzwerkfehler bei {url} (Versuch {retries}): {e}") + + if retries < MAX_RETRIES: + time.sleep(2 ** retries) # Exponential backoff + continue + else: + logging.error(f"❌ Maximale Anzahl Versuche erreicht für: {url}") + return "" + + except Exception as e: + logging.error(f"❌ Unerwarteter Fehler bei Volltextextraktion von {url}: {e}") + return "" + + return "" + +def extract_article_summary(full_text: str, max_length: int = 300) -> str: + """ + Erstellt eine intelligente Zusammenfassung aus dem Volltext + """ + if not full_text: + return "" + + sentences = full_text.split('.') + + # Erste 2-3 sinnvolle Sätze als Summary verwenden + summary_sentences = [] + current_length = 0 + + for sentence in sentences[:5]: # Maximal erste 5 Sätze prüfen + sentence = sentence.strip() + + if len(sentence) < 20: # Zu kurze Sätze überspringen + continue + + if current_length + len(sentence) > max_length: + break + + summary_sentences.append(sentence) + current_length += len(sentence) + + summary = '. '.join(summary_sentences) + + if summary and not summary.endswith('.'): + summary += '.' + + return summary[:max_length] + +def validate_extracted_content(text: str) -> bool: + """ + Validiert ob der extrahierte Inhalt brauchbar ist + """ + if not text or len(text.strip()) < 100: + return False + + words = text.split() + + # Mindestens 50 Wörter + if len(words) < 50: + return False + + # Nicht zu viele Sonderzeichen (Navigation etc.) + special_chars = len([c for c in text if c in '|•→←↑↓']) + if special_chars > len(text) * 0.05: # Mehr als 5% Sonderzeichen + return False + + # Durchschnittliche Wortlänge prüfen (zu kurz = Navigation) + avg_word_length = sum(len(word) for word in words) / len(words) + if avg_word_length < 3: + return False + + return True \ No newline at end of file diff --git a/utils/article_utils.py b/utils/article_utils.py new file mode 100644 index 0000000..ee6f289 --- /dev/null +++ b/utils/article_utils.py @@ -0,0 +1,23 @@ +# utils/article_utils.py + +import hashlib + +def clean_text(text: str) -> str: + return text.strip() + +def generate_id(link: str) -> str: + return hashlib.md5(link.encode("utf-8")).hexdigest() + +def categorize_article(text: str) -> str: + # Dummy-Kategorie + return "Allgemein" + +def tag_article(text: str) -> list: + # Dummy-Tags + return ["tag1", "tag2"] + +def summarize_text(text: str) -> str: + return text[:200] + "..." + +def rewrite_text(text: str) -> str: + return text # Platzhalter, z. B. für GPT-Rewrite später diff --git a/utils/config.py b/utils/config.py new file mode 100644 index 0000000..fa7f655 --- /dev/null +++ b/utils/config.py @@ -0,0 +1,51 @@ +import os +from typing import Dict, List +from dotenv import load_dotenv + +load_dotenv() + + +def validate_env() -> Dict: + """Validiert sicherheitsrelevante .env-Variablen. + + Returns dict with: ok: bool, errors: List[str], warnings: List[str], summary: Dict[str, bool] + """ + errors: List[str] = [] + warnings: List[str] = [] + + wp_base_url = os.getenv("WP_BASE_URL", "").strip() + wp_user = os.getenv("WP_USERNAME", "").strip() + wp_pass = os.getenv("WP_PASSWORD", "").strip() + wp_b64 = os.getenv("WP_AUTH_BASE64", "").strip() + openai_key = os.getenv("OPENAI_API_KEY", "").strip() + + # WP_BASE_URL Pflicht + if not wp_base_url: + errors.append("WP_BASE_URL fehlt in .env") + elif not (wp_base_url.startswith("http://") or wp_base_url.startswith("https://")): + errors.append("WP_BASE_URL muss mit http:// oder https:// beginnen") + + # Auth-Creds: entweder Base64 ODER Username+Password + if not wp_b64 and not (wp_user and wp_pass): + errors.append("Entweder WP_AUTH_BASE64 oder WP_USERNAME + WP_PASSWORD in .env setzen") + + # Empfehlungen + if not wp_b64 and (wp_user and wp_pass): + warnings.append("WP_AUTH_BASE64 nicht gesetzt – Empfehlung: Base64 nutzen (Application Password)") + + if not openai_key: + warnings.append("OPENAI_API_KEY ist nicht gesetzt – Umschreibungsfunktion ist deaktiviert") + + summary = { + "WP_BASE_URL": bool(wp_base_url), + "WP_USERNAME": bool(wp_user), + "WP_PASSWORD": bool(wp_pass), + "WP_AUTH_BASE64": bool(wp_b64), + "OPENAI_API_KEY": bool(openai_key), + } + + return {"ok": len(errors) == 0, "errors": errors, "warnings": warnings, "summary": summary} + + +__all__ = ["validate_env"] + diff --git a/utils/css_loader.py b/utils/css_loader.py new file mode 100644 index 0000000..84ebc90 --- /dev/null +++ b/utils/css_loader.py @@ -0,0 +1,367 @@ +# utils/css_loader.py + +import streamlit as st +import os +from pathlib import Path + +def load_css(): + """ + Lädt die zentrale CSS-Datei und injiziert sie in die Streamlit-App + """ + try: + # Pfad zur CSS-Datei bestimmen + css_file = Path(__file__).parent.parent / "static" / "styles.css" + + if css_file.exists(): + with open(css_file, "r", encoding="utf-8") as f: + css_content = f.read() + + # CSS in Streamlit injizieren + st.markdown(f""" + + """, unsafe_allow_html=True) + + return True + else: + # Fallback: CSS-Datei erstellen + create_css_file() + return load_css() # Rekursiver Aufruf nach Erstellung + + except Exception as e: + st.error(f"Fehler beim Laden der CSS-Datei: {e}") + return False + +def create_css_file(): + """ + Erstellt die CSS-Datei falls sie nicht existiert + """ + css_content = """/* =============================================== + RSS Feed Manager - Zentrale CSS-Datei + Dark-Mode optimiert mit Fallbacks + =============================================== */ + +/* === ROOT VARIABLEN === */ +:root { + /* Dark Mode Farbpalette */ + --bg-primary: #1e1e1e; + --bg-secondary: #2d2d30; + --bg-card: #2d2d30; + --bg-header: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + --bg-filter: #363636; + + /* Text Farben */ + --text-primary: #ffffff; + --text-secondary: #b0b0b0; + --text-muted: #888888; + --text-accent: #667eea; + + /* Status Farben */ + --status-new: #2196f3; + --status-new-bg: #1565c0; + --status-rewrite: #ff9800; + --status-rewrite-bg: #ef6c00; + --status-process: #9c27b0; + --status-process-bg: #6a1b9a; + --status-online: #4caf50; + --status-online-bg: #2e7d32; + --status-hold: #e91e63; + --status-hold-bg: #ad1457; + --status-trash: #f44336; + --status-trash-bg: #c62828; + --status-wp-pending: #00bcd4; + --status-wp-pending-bg: #0097a7; + + /* Borders & Shadows */ + --border-color: #404040; + --shadow-light: 0 2px 8px rgba(0, 0, 0, 0.3); + --shadow-hover: 0 8px 20px rgba(0, 0, 0, 0.4); + + /* Accent Colors */ + --gradient-primary: linear-gradient(135deg, #667eea 0%, #764ba2 100%); + --gradient-secondary: linear-gradient(135deg, #f093fb 0%, #f5576c 100%); +} + +/* === LIGHT MODE FALLBACKS === */ +[data-theme="light"], .stApp[data-theme="light"] { + --bg-primary: #ffffff; + --bg-secondary: #f8f9fa; + --bg-card: #ffffff; + --bg-filter: #f0f2f6; + + --text-primary: #212529; + --text-secondary: #495057; + --text-muted: #6c757d; + --text-accent: #667eea; + + --border-color: #dee2e6; + --shadow-light: 0 2px 8px rgba(0, 0, 0, 0.1); + --shadow-hover: 0 8px 20px rgba(0, 0, 0, 0.15); +} + +/* === HAUPTCONTAINER === */ +.main-header { + background: var(--bg-header); + padding: 2rem; + border-radius: 12px; + margin-bottom: 2rem; + color: var(--text-primary); + text-align: center; + box-shadow: var(--shadow-light); +} + +.main-header h1 { + color: var(--text-primary) !important; + margin: 0 0 0.5rem 0; + font-size: 2.5rem; + font-weight: 700; +} + +.main-header p { + color: rgba(255, 255, 255, 0.9) !important; + margin: 0; + font-size: 1.1rem; +} + +/* === ARTIKEL CARDS === */ +.article-card { + background: var(--bg-card) !important; + border-radius: 12px; + padding: 1.5rem; + margin-bottom: 1rem; + box-shadow: var(--shadow-light); + border-left: 4px solid var(--text-accent); + border: 1px solid var(--border-color); + transition: all 0.3s ease; + color: var(--text-primary) !important; +} + +.article-card:hover { + transform: translateY(-2px); + box-shadow: var(--shadow-hover); + border-color: var(--text-accent); +} + +.article-card h3, +.article-card .article-title { + color: var(--text-primary) !important; + margin: 0 0 0.5rem 0; + font-size: 1.2rem; + font-weight: 600; + line-height: 1.4; +} + +.article-card .article-meta { + color: var(--text-secondary) !important; + font-size: 0.9rem; + margin-bottom: 1rem; +} + +.article-card .article-summary { + color: var(--text-secondary) !important; + line-height: 1.5; + margin-bottom: 1rem; +} + +.article-card .article-footer { + color: var(--text-muted) !important; + font-size: 0.85rem; + display: flex; + justify-content: space-between; + align-items: center; +} + +/* === STATUS BADGES === */ +.status-badge { + padding: 0.3rem 0.8rem; + border-radius: 20px; + font-size: 0.8rem; + font-weight: 600; + margin-right: 0.5rem; + display: inline-block; + color: white !important; +} + +.status-new { + background-color: var(--status-new-bg) !important; + color: white !important; +} + +.status-rewrite { + background-color: var(--status-rewrite-bg) !important; + color: white !important; +} + +.status-process { + background-color: var(--status-process-bg) !important; + color: white !important; +} + +.status-online { + background-color: var(--status-online-bg) !important; + color: white !important; +} + +.status-hold { + background-color: var(--status-hold-bg) !important; + color: white !important; +} + +.status-trash { + background-color: var(--status-trash-bg) !important; + color: white !important; +} + +.status-wp-pending { + background-color: var(--status-wp-pending-bg) !important; + color: white !important; +} + +/* === FILTER SECTION === */ +.filter-section { + background: var(--bg-filter) !important; + padding: 1.5rem; + border-radius: 12px; + margin-bottom: 2rem; + border: 1px solid var(--border-color); + box-shadow: var(--shadow-light); +} + +.filter-section h3 { + color: var(--text-primary) !important; + margin: 0 0 1rem 0; + font-size: 1.3rem; + font-weight: 600; +} + +/* === STATS CARDS === */ +.stats-card { + background: var(--bg-card) !important; + padding: 1.5rem; + border-radius: 12px; + text-align: center; + box-shadow: var(--shadow-light); + border: 1px solid var(--border-color); + transition: transform 0.2s ease; +} + +.stats-card:hover { + transform: translateY(-2px); +} + +.stats-number { + font-size: 2.5rem; + font-weight: 700; + color: var(--text-accent) !important; + margin-bottom: 0.5rem; + display: block; +} + +.stats-card div:last-child { + color: var(--text-secondary) !important; + font-weight: 500; + font-size: 1rem; +} + +/* === WORDPRESS STATUS === */ +.wp-status { + background: var(--bg-card) !important; + padding: 1rem; + border-radius: 8px; + margin: 1rem 0; + border-left: 4px solid var(--status-wp-pending); + border: 1px solid var(--border-color); + box-shadow: var(--shadow-light); +} + +.wp-status strong { + color: var(--text-primary) !important; +} + +.wp-status small { + color: var(--text-muted) !important; +} + +/* === BUTTONS & ACTIONS === */ +.stButton > button { + background: var(--gradient-primary) !important; + color: white !important; + border: none !important; + border-radius: 8px !important; + font-weight: 600 !important; + transition: all 0.2s ease !important; +} + +.stButton > button:hover { + transform: translateY(-1px) !important; + box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4) !important; +} + +/* === SELECTBOX & INPUT OVERRIDES === */ +.stSelectbox > div > div { + background-color: var(--bg-card) !important; + color: var(--text-primary) !important; + border: 1px solid var(--border-color) !important; +} + +.stTextInput > div > div > input { + background-color: var(--bg-card) !important; + color: var(--text-primary) !important; + border: 1px solid var(--border-color) !important; +} + +/* === RESPONSIVE DESIGN === */ +@media (max-width: 768px) { + .main-header { + padding: 1.5rem; + } + + .main-header h1 { + font-size: 2rem; + } + + .article-card { + padding: 1rem; + } + + .stats-card { + padding: 1rem; + } + + .stats-number { + font-size: 2rem; + } +} +""" + + try: + # Static-Ordner erstellen falls nicht vorhanden + static_dir = Path(__file__).parent.parent / "static" + static_dir.mkdir(exist_ok=True) + + # CSS-Datei schreiben + css_file = static_dir / "styles.css" + with open(css_file, "w", encoding="utf-8") as f: + f.write(css_content) + + return True + except Exception as e: + st.error(f"Fehler beim Erstellen der CSS-Datei: {e}") + return False + +def apply_dark_theme(): + """ + Wendet das Dark Theme an (zusätzlich zur CSS-Datei) + """ + st.markdown(""" + + """, unsafe_allow_html=True) \ No newline at end of file diff --git a/utils/image_extractor.py b/utils/image_extractor.py index 597ea3b..6ffddca 100644 --- a/utils/image_extractor.py +++ b/utils/image_extractor.py @@ -2,59 +2,325 @@ import requests from bs4 import BeautifulSoup -from urllib.parse import urljoin +from urllib.parse import urljoin, urlparse import logging +import time +from typing import List, Dict +# Konfiguration +MAX_IMAGES = 5 +MIN_IMAGE_SIZE = 100 # Mindestgröße in Pixeln +ALLOWED_EXTENSIONS = {'.jpg', '.jpeg', '.png', '.webp', '.gif'} +REQUEST_TIMEOUT = 10 +USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36' -def extract_images_with_metadata(article_url): +def is_valid_image_url(url: str) -> bool: """ - Versucht, Bilder mit Bildunterschrift und Copyright aus dem Originalartikel zu extrahieren. - Gibt eine Liste mit Dictionaries zurück: {url, alt, copyright, copyright_url, caption} + Prüft ob eine URL auf ein gültiges Bild zeigt + """ + try: + parsed = urlparse(url) + path = parsed.path.lower() + + # Prüfe Dateiendung + if not any(path.endswith(ext) for ext in ALLOWED_EXTENSIONS): + return False + + # Prüfe ob URL vollständig ist + if not parsed.scheme or not parsed.netloc: + return False + + # Blacklist für unerwünschte Bilder + blacklist_patterns = [ + 'avatar', 'profile', 'icon', 'logo', 'banner', + 'advertisement', 'ads', 'tracking', 'pixel', 'social' + ] + + return not any(pattern in url.lower() for pattern in blacklist_patterns) + + except Exception: + return False + +def get_image_dimensions(img_tag) -> tuple: + """ + Versucht die Bildabmessungen aus HTML-Attributen zu ermitteln + """ + try: + width = img_tag.get('width') + height = img_tag.get('height') + + if width and height: + return int(width), int(height) + + # Aus Style-Attribut extrahieren + style = img_tag.get('style', '') + if 'width:' in style or 'height:' in style: + # Vereinfachte Extraktion - könnte erweitert werden + pass + + return None, None + except: + return None, None + +def extract_image_metadata(img_tag, base_url: str) -> Dict: + """ + Extrahiert alle verfügbaren Metadaten eines Bildes + """ + try: + # Basis-URL + src = img_tag.get('src') or img_tag.get('data-src') or img_tag.get('data-lazy-src') + if not src: + return None + + img_url = urljoin(base_url, src) + + if not is_valid_image_url(img_url): + return None + + # Alt-Text + alt_text = img_tag.get('alt', '').strip() + + # Titel + title = img_tag.get('title', '').strip() + + # Bildabmessungen + width, height = get_image_dimensions(img_tag) + + # Überspringe sehr kleine Bilder + if width and height and (width < MIN_IMAGE_SIZE or height < MIN_IMAGE_SIZE): + return None + + # Caption und Copyright aus Parent-Elementen suchen + caption = "" + copyright_text = "Unbekannt" + copyright_url = base_url + + # Suche in Parent-Elementen nach Caption + parent = img_tag.find_parent(['figure', 'div', 'span', 'p']) + if parent: + # Figcaption + figcaption = parent.find('figcaption') + if figcaption: + caption = figcaption.get_text(strip=True) + + # Copyright-Link in Figcaption suchen + copyright_link = figcaption.find('a') + if copyright_link: + copyright_url = urljoin(base_url, copyright_link.get('href', '')) + copyright_text = copyright_link.get_text(strip=True) + + # Alternative: Caption in kleinen Texten unter dem Bild + caption_candidates = parent.find_all(['small', 'em', 'i'], limit=3) + for candidate in caption_candidates: + text = candidate.get_text(strip=True) + if len(text) > 10 and len(text) < 200: # Plausible Caption-Länge + if not caption: # Nur wenn noch keine Caption gefunden + caption = text + + # Fallback für Caption + if not caption: + caption = title or alt_text or "Bild aus Originalartikel" + + return { + "url": img_url, + "alt": alt_text, + "caption": caption[:300] if caption else "Kein Bildtitel vorhanden", + "copyright": copyright_text or "Unbekannt", + "copyright_url": copyright_url or base_url, + "width": width, + "height": height, + "title": title + } + + except Exception as e: + logging.error(f"Fehler bei Metadaten-Extraktion: {e}") + return None + +def extract_images_with_metadata(article_url: str) -> List[Dict]: + """ + Hauptfunktion: Extrahiert Bilder mit Metadaten aus einem Artikel """ images = [] - try: - logging.info(f"📷 Extrahiere Bilder von {article_url}") - response = requests.get(article_url, timeout=10) - if response.status_code != 200: - logging.warning(f"Keine gültige Antwort von {article_url} (Status {response.status_code})") - return [] - - soup = BeautifulSoup(response.content, "html.parser") - - for img_tag in soup.find_all("img"): - src = img_tag.get("src") - if not src: - continue - - img_url = urljoin(article_url, src) - alt_text = img_tag.get("alt", "").strip() - - copyright_text = "Unbekannt" - copyright_link = article_url - caption = alt_text or "Bild aus Originalartikel" - - parent = img_tag.find_parent(["figure", "div"]) - if parent: - figcaption = parent.find("figcaption") - if figcaption: - caption = figcaption.get_text(strip=True) - link_tag = figcaption.find("a") - if link_tag and link_tag.has_attr("href"): - copyright_link = link_tag["href"] - copyright_text = link_tag.get_text(strip=True) - - image_data = { - "url": img_url, - "alt": alt_text, - "caption": caption or "Kein Bildtitel vorhanden", - "copyright": copyright_text or "Unbekannt", - "copyright_url": copyright_link or article_url - } - images.append(image_data) - - logging.info(f"{len(images)} Bilder gefunden bei {article_url}") + + if not article_url: return images - + + try: + logging.info(f"🖼️ Starte Bildextraktion von: {article_url}") + + # HTTP-Request mit verbessertem Header + headers = { + 'User-Agent': USER_AGENT, + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', + 'Accept-Language': 'de,en-US;q=0.7,en;q=0.3', + 'Accept-Encoding': 'gzip, deflate', + 'Connection': 'keep-alive', + } + + response = requests.get(article_url, timeout=REQUEST_TIMEOUT, headers=headers) + response.raise_for_status() + + soup = BeautifulSoup(response.content, "html.parser") + + # Alle img-Tags finden + img_tags = soup.find_all("img") + logging.info(f"🔍 {len(img_tags)} img-Tags gefunden") + + processed_urls = set() # Duplikate vermeiden + + for img_tag in img_tags: + try: + # Metadaten extrahieren + image_data = extract_image_metadata(img_tag, article_url) + + if image_data and image_data["url"] not in processed_urls: + images.append(image_data) + processed_urls.add(image_data["url"]) + + logging.info(f"✅ Bild hinzugefügt: {image_data['caption'][:50]}...") + + # Maximum erreicht? + if len(images) >= MAX_IMAGES: + break + + except Exception as e: + logging.error(f"❌ Fehler beim Verarbeiten eines Bildes: {e}") + continue + + # Bilder nach Größe sortieren (größere zuerst) + images.sort(key=lambda x: (x.get('width', 0) * x.get('height', 0)), reverse=True) + + logging.info(f"🎉 {len(images)} Bilder erfolgreich extrahiert von {article_url}") + return images[:MAX_IMAGES] # Sicherheitshalber nochmal begrenzen + + except requests.RequestException as e: + logging.error(f"🌐 Netzwerkfehler bei {article_url}: {e}") + return [] except Exception as e: - logging.exception(f"Fehler bei der Bildextraktion aus {article_url}:") - return [] \ No newline at end of file + logging.error(f"❌ Unerwarteter Fehler bei Bildextraktion von {article_url}: {e}") + return [] + +def validate_image_url(url: str) -> bool: + """ + Prüft ob ein Bild tatsächlich erreichbar ist + """ + try: + response = requests.head(url, timeout=5) + content_type = response.headers.get('content-type', '').lower() + return response.status_code == 200 and 'image' in content_type + except: + return False + +def extract_featured_image(article_url: str) -> Dict: + """ + Versucht das Hauptbild/Featured Image eines Artikels zu finden + """ + try: + headers = {'User-Agent': USER_AGENT} + response = requests.get(article_url, timeout=REQUEST_TIMEOUT, headers=headers) + response.raise_for_status() + + soup = BeautifulSoup(response.content, "html.parser") + + # OpenGraph Image + og_image = soup.find('meta', property='og:image') + if og_image and og_image.get('content'): + img_url = urljoin(article_url, og_image['content']) + if is_valid_image_url(img_url): + return { + "url": img_url, + "alt": "Featured Image", + "caption": "Hauptbild des Artikels", + "copyright": "Unbekannt", + "copyright_url": article_url, + "type": "featured" + } + + # Twitter Card Image + twitter_image = soup.find('meta', attrs={'name': 'twitter:image'}) + if twitter_image and twitter_image.get('content'): + img_url = urljoin(article_url, twitter_image['content']) + if is_valid_image_url(img_url): + return { + "url": img_url, + "alt": "Featured Image", + "caption": "Hauptbild des Artikels", + "copyright": "Unbekannt", + "copyright_url": article_url, + "type": "featured" + } + + return None + + except Exception as e: + logging.error(f"Fehler bei Featured Image Extraktion: {e}") + return None + +def clean_image_metadata(images: List[Dict]) -> List[Dict]: + """ + Bereinigt und normalisiert Bildmetadaten + """ + cleaned_images = [] + + for img in images: + try: + # URL validieren + if not img.get("url") or not is_valid_image_url(img["url"]): + continue + + # Metadaten bereinigen + cleaned_img = { + "url": img["url"].strip(), + "alt": (img.get("alt") or "").strip()[:200], + "caption": (img.get("caption") or "Kein Bildtitel vorhanden").strip()[:300], + "copyright": (img.get("copyright") or "Unbekannt").strip()[:100], + "copyright_url": (img.get("copyright_url") or "#").strip(), + "width": img.get("width"), + "height": img.get("height"), + "title": (img.get("title") or "").strip()[:200] + } + + # Leere Felder mit Standardwerten füllen + if not cleaned_img["caption"]: + cleaned_img["caption"] = "Kein Bildtitel vorhanden" + if not cleaned_img["copyright"]: + cleaned_img["copyright"] = "Unbekannt" + if not cleaned_img["copyright_url"] or cleaned_img["copyright_url"] == "#": + cleaned_img["copyright_url"] = img["url"] # Bild-URL als Fallback + + cleaned_images.append(cleaned_img) + + except Exception as e: + logging.error(f"Fehler beim Bereinigen der Bildmetadaten: {e}") + continue + + return cleaned_images + +# Hauptfunktion für bessere Kompatibilität mit dem bestehenden Code +def extract_images_with_metadata_enhanced(article_url: str) -> List[Dict]: + """ + Erweiterte Bildextraktion mit Fallback-Strategien + """ + all_images = [] + + # 1. Featured Image versuchen + featured = extract_featured_image(article_url) + if featured: + all_images.append(featured) + + # 2. Normale Bildextraktion + content_images = extract_images_with_metadata(article_url) + all_images.extend(content_images) + + # 3. Duplikate entfernen + seen_urls = set() + unique_images = [] + for img in all_images: + if img["url"] not in seen_urls: + unique_images.append(img) + seen_urls.add(img["url"]) + + # 4. Metadaten bereinigen + cleaned_images = clean_image_metadata(unique_images) + + return cleaned_images[:MAX_IMAGES] \ No newline at end of file diff --git a/utils/ui_helpers.py b/utils/ui_helpers.py new file mode 100644 index 0000000..d5eb5c0 --- /dev/null +++ b/utils/ui_helpers.py @@ -0,0 +1,236 @@ +# utils/ui_helpers.py + +import streamlit as st +from datetime import datetime +import logging + +def show_toast(message, type="success", duration=3): + """ + Zeigt eine Toast-Benachrichtigung an + """ + if type == "success": + st.success(message) + elif type == "error": + st.error(message) + elif type == "warning": + st.warning(message) + elif type == "info": + st.info(message) + +def format_datetime(date_str): + """ + Formatiert Datetime-Strings für bessere Lesbarkeit + """ + try: + if isinstance(date_str, str): + if "GMT" in date_str or "+" in date_str: + dt = datetime.strptime(date_str, "%a, %d %b %Y %H:%M:%S %z") + return dt.strftime("%d.%m.%Y %H:%M") + elif "T" in date_str: + dt = datetime.fromisoformat(date_str.replace("Z", "+00:00")) + return dt.strftime("%d.%m.%Y %H:%M") + else: + return date_str[:16].replace("T", " ") + return str(date_str) + except Exception as e: + logging.warning(f"Datum konnte nicht formatiert werden: {date_str} - {e}") + return str(date_str)[:16] + +def get_status_color(status): + """ + Gibt die passende Farbe für einen Status zurück + """ + colors = { + "New": "#2196f3", + "Rewrite": "#ff9800", + "Process": "#9c27b0", + "Online": "#4caf50", + "On Hold": "#e91e63", + "Trash": "#f44336" + } + return colors.get(status, "#2196f3") + +def create_status_badge(status): + """ + Erstellt einen HTML-Status-Badge + """ + color = get_status_color(status) + return f""" + {status} + """ + +def truncate_text(text, max_length=150): + """ + Kürzt Text auf maximale Länge + """ + if not text: + return "" + + if len(text) <= max_length: + return text + + return text[:max_length].rsplit(' ', 1)[0] + "..." + +def calculate_reading_time(text): + """ + Berechnet geschätzte Lesezeit (200 Wörter/Minute) + """ + if not text: + return 0 + + word_count = len(text.split()) + reading_time = max(1, word_count // 200) + return reading_time + +def validate_url(url): + """ + Validiert eine URL + """ + import re + pattern = re.compile( + r'^https?://' # http:// oder https:// + r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|' # domain... + r'localhost|' # localhost... + r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...oder IP + r'(?::\d+)?' # optional port + r'(?:/?|[/?]\S+)$', re.IGNORECASE) + return pattern.match(url) is not None + +def create_article_card_html(article, source_name="Unbekannt"): + """ + Erstellt HTML für eine Artikel-Karte + """ + has_images = len(article.get("images", [])) > 0 + word_count = len(article.get("text", "").split()) + reading_time = calculate_reading_time(article.get("text", "")) + + # Unvollständige Bilder prüfen + incomplete_images = any( + not all(k in img and img[k] for k in ("caption", "copyright", "copyright_url")) + for img in article.get("images", []) + ) + + warning_icon = " ⚠️" if incomplete_images else "" + + return f""" +
    + +
    +
    +

    + {article.get('title', 'Kein Titel')}{warning_icon} +

    +
    + 📅 {format_datetime(article.get('date', ''))} • + 📝 {word_count} Wörter • + ⏱️ {reading_time} Min Lesezeit + {'• 🖼️ ' + str(len(article.get('images', []))) + ' Bilder' if has_images else ''} +
    +
    +
    + {create_status_badge(article.get('status', 'New'))} +
    +
    + +
    + {truncate_text(article.get('summary', ''), 200)} +
    + +
    +
    + 📡 {source_name} +
    +
    + 🏷️ {', '.join(article.get('tags', [])[:3])}{'...' if len(article.get('tags', [])) > 3 else ''} +
    +
    +
    + """ + +def create_stats_card(title, value, icon="📊", color="#667eea"): + """ + Erstellt eine Statistik-Karte + """ + return f""" +
    +
    {icon}
    +
    {value}
    +
    {title}
    +
    + """ + +def show_loading_spinner(text="Lädt..."): + """ + Zeigt einen Lade-Spinner mit Text + """ + return st.empty().markdown(f""" +
    +
    +
    {text}
    +
    + + """, unsafe_allow_html=True) + +def create_filter_section(): + """ + Erstellt einen modernen Filter-Bereich + """ + return """ +
    +

    🔍 Filter & Suche

    + """ + +def get_error_message(error_type, details=""): + """ + Gibt formatierte Fehlermeldungen zurück + """ + messages = { + "feed_error": f"❌ Fehler beim Laden des Feeds: {details}", + "save_error": f"❌ Fehler beim Speichern: {details}", + "api_error": f"❌ API-Fehler: {details}", + "validation_error": f"⚠️ Validierungsfehler: {details}", + "network_error": f"🌐 Netzwerkfehler: {details}" + } + return messages.get(error_type, f"❌ Unbekannter Fehler: {details}") \ No newline at end of file diff --git a/utils/wordpress_uploader.py b/utils/wordpress_uploader.py new file mode 100644 index 0000000..5f7da6a --- /dev/null +++ b/utils/wordpress_uploader.py @@ -0,0 +1,464 @@ +# utils/wordpress_uploader.py + +import requests +import json +import os +import logging +import base64 +from datetime import datetime +from typing import Dict, List, Optional, Tuple +from dotenv import load_dotenv + +load_dotenv() + +# WordPress API Konfiguration – ausschließlich aus .env +WP_BASE_URL = os.getenv("WP_BASE_URL") +WP_USERNAME = os.getenv("WP_USERNAME") +WP_PASSWORD = os.getenv("WP_PASSWORD") +WP_AUTH_BASE64 = os.getenv("WP_AUTH_BASE64") + +# Request-Konfiguration +REQUEST_TIMEOUT = 30 +MAX_RETRIES = 3 +USER_AGENT = 'RSS-Feed-Manager/1.7.x' + +class WordPressUploader: + """ + Klasse für den Upload von Artikeln zu WordPress über die REST API + mit Base64-Authentifizierung + """ + + def __init__(self): + # Basis-URL validieren und Endpunkt bauen + if not WP_BASE_URL: + raise ValueError("WP_BASE_URL nicht gesetzt. Bitte .env konfigurieren.") + self.base_url = WP_BASE_URL.rstrip('/') + self.api_endpoint = f"{self.base_url}/wp-json/wp/v2" + + # Zugangsdaten (aus .env) + self.username = WP_USERNAME + self.password = WP_PASSWORD + self.auth_base64 = WP_AUTH_BASE64 + + if not self.auth_base64 and not (self.username and self.password): + raise ValueError("WordPress-Authentifizierung nicht konfiguriert. WP_AUTH_BASE64 oder WP_USERNAME + WP_PASSWORD setzen.") + + # Session für bessere Performance + self.session = requests.Session() + + # Authentifizierung über Authorization Header mit Base64 + if self.auth_base64: + self.session.headers.update({ + 'Authorization': f'Basic {self.auth_base64}', + 'User-Agent': USER_AGENT, + 'Content-Type': 'application/json', + 'Accept': 'application/json' + }) + logging.info("✅ WordPress-Authentifizierung: Base64-String verwendet") + else: + credentials = f"{self.username}:{self.password}" + encoded_credentials = base64.b64encode(credentials.encode('utf-8')).decode('utf-8') + self.session.headers.update({ + 'Authorization': f'Basic {encoded_credentials}', + 'User-Agent': USER_AGENT, + 'Content-Type': 'application/json', + 'Accept': 'application/json' + }) + logging.info("✅ WordPress-Authentifizierung: Base64 aus Username/Password generiert") + + # Standard-Kategorie ID ermitteln + self.default_category_id = self._get_default_category_id() + + def _get_default_category_id(self) -> int: + """ + Ermittelt die ID der Standard-Kategorie 'Allgemein' + """ + try: + response = self.session.get( + f"{self.api_endpoint}/categories", + params={'search': 'Allgemein', 'per_page': 10}, + timeout=REQUEST_TIMEOUT + ) + response.raise_for_status() + + categories = response.json() + + for category in categories: + if category['name'].lower() == 'allgemein': + logging.info(f"✅ Standard-Kategorie 'Allgemein' gefunden: ID {category['id']}") + return category['id'] + + # Fallback: Erste Kategorie oder Standard-ID + if categories: + logging.warning(f"⚠️ Kategorie 'Allgemein' nicht gefunden, verwende '{categories[0]['name']}' (ID: {categories[0]['id']})") + return categories[0]['id'] + else: + logging.warning("⚠️ Keine Kategorien gefunden, verwende Standard-ID 1") + return 1 + + except Exception as e: + logging.error(f"❌ Fehler beim Ermitteln der Standard-Kategorie: {e}") + return 1 # WordPress Standard-Kategorie + + def _get_or_create_tags(self, tag_names: List[str]) -> List[int]: + """ + Ermittelt oder erstellt Tags und gibt deren IDs zurück + """ + tag_ids = [] + + if not tag_names: + return tag_ids + + try: + # Bestehende Tags abrufen + for tag_name in tag_names: + tag_name = tag_name.strip() + if not tag_name: + continue + + try: + # Suche nach existierendem Tag + response = self.session.get( + f"{self.api_endpoint}/tags", + params={'search': tag_name, 'per_page': 10}, + timeout=REQUEST_TIMEOUT + ) + response.raise_for_status() + + existing_tags = response.json() + tag_found = False + + # Exakte Übereinstimmung suchen + for tag in existing_tags: + if tag['name'].lower() == tag_name.lower(): + tag_ids.append(tag['id']) + tag_found = True + logging.info(f"✅ Existierender Tag gefunden: '{tag_name}' (ID: {tag['id']})") + break + + # Tag erstellen falls nicht gefunden + if not tag_found: + create_response = self.session.post( + f"{self.api_endpoint}/tags", + json={'name': tag_name}, + timeout=REQUEST_TIMEOUT + ) + + if create_response.status_code == 201: + new_tag = create_response.json() + tag_ids.append(new_tag['id']) + logging.info(f"✅ Neuer Tag erstellt: '{tag_name}' (ID: {new_tag['id']})") + else: + logging.warning(f"⚠️ Tag '{tag_name}' konnte nicht erstellt werden: {create_response.status_code}") + continue + + except Exception as e: + logging.error(f"❌ Fehler beim Verarbeiten von Tag '{tag_name}': {e}") + continue + + logging.info(f"🏷️ Tags verarbeitet: {len(tag_ids)} Tag-IDs erstellt") + return tag_ids + + except Exception as e: + logging.error(f"❌ Allgemeiner Fehler bei Tag-Verarbeitung: {e}") + return [] + def _prepare_post_data(self, article: Dict) -> Dict: + """ + Bereitet die Artikel-Daten für WordPress vor + """ + # Tags verarbeiten - WordPress benötigt Tag-IDs, nicht Namen + tag_names = article.get('tags', []) + tag_ids = self._get_or_create_tags(tag_names) + + # Basis Post-Daten + post_data = { + 'title': article.get('title', 'Kein Titel'), + 'content': article.get('text', ''), + 'status': 'pending', # Artikel als "Ausstehend" markieren + 'categories': [self.default_category_id], + 'excerpt': article.get('summary', '')[:300], # WordPress Excerpt + 'meta': { + 'rss_source': article.get('source', ''), + 'rss_original_link': article.get('link', ''), + 'rss_import_date': datetime.now().isoformat(), + 'rss_article_id': article.get('id', '') + } + } + + # Tags nur hinzufügen wenn vorhanden + if tag_ids: + post_data['tags'] = tag_ids + + # Optional: Author setzen (falls unterschiedliche Autoren gewünscht) + # post_data['author'] = 1 # WordPress User ID + + logging.info(f"📝 Post-Daten vorbereitet: Titel='{post_data['title']}', Tags={len(tag_ids)}, Kategorie={self.default_category_id}") + return post_data + + def _check_duplicate(self, article: Dict) -> Optional[int]: + """ + Prüft, ob ein Artikel bereits in WordPress existiert + """ + try: + # Suche nach Titel + title = article.get('title', '') + if not title: + return None + + response = self.session.get( + f"{self.api_endpoint}/posts", + params={ + 'search': title, + 'per_page': 5, + 'status': 'any' # Alle Status durchsuchen + }, + timeout=REQUEST_TIMEOUT + ) + response.raise_for_status() + + posts = response.json() + + for post in posts: + # Exakte Titel-Übereinstimmung + if post['title']['rendered'].strip() == title.strip(): + logging.info(f"🔄 Duplikat gefunden: '{title}' (WordPress ID: {post['id']})") + return post['id'] + + # Prüfe auch Custom Meta Fields (RSS Article ID) + article_id = article.get('id') + if article_id: + # Meta-Felder würden eine separate API-Abfrage erfordern + # Für jetzt: Nur Titel-basierte Duplikatserkennung + pass + + return None + + except Exception as e: + logging.error(f"❌ Fehler bei Duplikatsprüfung für '{article.get('title', 'Unbekannt')}': {e}") + return None + + def upload_article(self, article: Dict) -> Tuple[bool, str, Optional[int]]: + """ + Lädt einen einzelnen Artikel zu WordPress hoch + + Returns: + Tuple[bool, str, Optional[int]]: (Erfolg, Nachricht, WordPress Post ID) + """ + title = article.get('title', 'Unbekannt') + + try: + logging.info(f"📤 Starte WordPress-Upload: {title}") + + # Duplikatsprüfung + existing_post_id = self._check_duplicate(article) + if existing_post_id: + return False, f"Artikel '{title}' existiert bereits in WordPress (ID: {existing_post_id})", existing_post_id + + # Post-Daten vorbereiten + post_data = self._prepare_post_data(article) + + # Upload mit Retry-Logik + for attempt in range(MAX_RETRIES): + try: + response = self.session.post( + f"{self.api_endpoint}/posts", + json=post_data, + timeout=REQUEST_TIMEOUT + ) + + if response.status_code == 201: + # Erfolgreich erstellt + wp_post = response.json() + wp_post_id = wp_post['id'] + wp_url = wp_post['link'] + + logging.info(f"✅ WordPress-Upload erfolgreich: '{title}' (ID: {wp_post_id})") + logging.info(f"🔗 WordPress-URL: {wp_url}") + return True, f"Erfolgreich hochgeladen: {wp_url}", wp_post_id + + elif response.status_code == 400: + # Client Error - nicht wiederholen + error_data = response.json() + error_msg = error_data.get('message', 'Unbekannter Fehler') + error_code = error_data.get('code', 'unknown') + + # Detaillierte Fehleranalyse + if 'parameter' in error_msg.lower() and 'tags' in error_msg.lower(): + logging.error(f"❌ WordPress-Tag-Fehler für '{title}': {error_msg}") + logging.error(f"📋 Post-Daten: {json.dumps(post_data, indent=2, ensure_ascii=False)}") + return False, f"Tag-Fehler: {error_msg} (Artikel-Tags: {article.get('tags', [])})", None + else: + logging.error(f"❌ WordPress-Fehler 400 für '{title}': {error_msg} (Code: {error_code})") + logging.error(f"📋 Post-Daten: {json.dumps(post_data, indent=2, ensure_ascii=False)}") + return False, f"WordPress-Fehler: {error_msg}", None + + elif response.status_code == 401: + # Authentifizierungsfehler + logging.error(f"❌ WordPress-Authentifizierungsfehler für '{title}'") + return False, "Authentifizierungsfehler - bitte Zugangsdaten prüfen", None + + elif response.status_code == 403: + # Berechtigungsfehler + logging.error(f"❌ WordPress-Berechtigungsfehler für '{title}'") + return False, "Keine Berechtigung zum Erstellen von Posts", None + + else: + # Server Error - Retry möglich + if attempt < MAX_RETRIES - 1: + logging.warning(f"⚠️ WordPress-Upload Versuch {attempt + 1} fehlgeschlagen für '{title}' (Status: {response.status_code}), versuche erneut...") + continue + else: + logging.error(f"❌ WordPress-Upload nach {MAX_RETRIES} Versuchen fehlgeschlagen für '{title}' (Status: {response.status_code})") + return False, f"Upload fehlgeschlagen nach {MAX_RETRIES} Versuchen (HTTP {response.status_code})", None + + except requests.exceptions.Timeout: + if attempt < MAX_RETRIES - 1: + logging.warning(f"⏱️ Timeout bei WordPress-Upload für '{title}' (Versuch {attempt + 1}), versuche erneut...") + continue + else: + logging.error(f"❌ Timeout bei WordPress-Upload für '{title}' nach {MAX_RETRIES} Versuchen") + return False, f"Timeout nach {MAX_RETRIES} Versuchen", None + + except requests.exceptions.ConnectionError as e: + if attempt < MAX_RETRIES - 1: + logging.warning(f"🌐 Verbindungsfehler bei WordPress-Upload für '{title}' (Versuch {attempt + 1}): {e}") + continue + else: + logging.error(f"❌ Verbindungsfehler bei WordPress-Upload für '{title}' nach {MAX_RETRIES} Versuchen: {e}") + return False, f"Verbindungsfehler nach {MAX_RETRIES} Versuchen", None + + except Exception as e: + logging.error(f"❌ Unerwarteter Fehler bei WordPress-Upload für '{title}': {e}") + return False, f"Unerwarteter Fehler: {str(e)}", None + + def test_connection(self) -> Tuple[bool, str]: + """ + Testet die Verbindung zur WordPress API mit Base64-Authentifizierung + """ + try: + logging.info("🔧 Teste WordPress-API-Verbindung...") + + # Einfache Abfrage der Kategorien als Test + response = self.session.get( + f"{self.api_endpoint}/categories", + params={'per_page': 1}, + timeout=REQUEST_TIMEOUT + ) + + logging.info(f"📡 API-Response Status: {response.status_code}") + + if response.status_code == 200: + logging.info("✅ WordPress-API-Verbindung erfolgreich") + return True, "Verbindung zur WordPress API erfolgreich" + elif response.status_code == 401: + logging.error("❌ WordPress-API-Authentifizierung fehlgeschlagen") + logging.error(f"Response Body: {response.text}") + return False, "Authentifizierung fehlgeschlagen - bitte Base64-String oder Zugangsdaten prüfen" + elif response.status_code == 403: + logging.error("❌ WordPress-API-Berechtigung fehlgeschlagen") + logging.error(f"Response Body: {response.text}") + return False, "Keine Berechtigung - bitte Benutzerrechte prüfen" + else: + logging.error(f"❌ WordPress-API-Test fehlgeschlagen (Status: {response.status_code})") + logging.error(f"Response Body: {response.text}") + return False, f"API-Test fehlgeschlagen (HTTP {response.status_code}): {response.text[:100]}" + + except requests.exceptions.ConnectionError as e: + logging.error(f"❌ Verbindungsfehler zur WordPress API: {e}") + return False, f"Verbindungsfehler: {str(e)}" + except Exception as e: + logging.error(f"❌ Unerwarteter Fehler beim WordPress-API-Test: {e}") + return False, f"Unerwarteter Fehler: {str(e)}" + + def upload_multiple_articles(self, articles: List[Dict]) -> Dict: + """ + Lädt mehrere Artikel zu WordPress hoch + + Returns: + Dict mit Statistiken über erfolgreiche und fehlgeschlagene Uploads + """ + results = { + 'total': len(articles), + 'successful': 0, + 'failed': 0, + 'duplicates': 0, + 'details': [] + } + + logging.info(f"📦 Starte Batch-Upload von {len(articles)} Artikeln zu WordPress") + + for i, article in enumerate(articles, 1): + title = article.get('title', f'Artikel {i}') + logging.info(f"📤 Upload {i}/{len(articles)}: {title}") + + success, message, wp_post_id = self.upload_article(article) + + result_detail = { + 'article_id': article.get('id'), + 'title': title, + 'success': success, + 'message': message, + 'wp_post_id': wp_post_id + } + + results['details'].append(result_detail) + + if success: + results['successful'] += 1 + elif 'existiert bereits' in message: + results['duplicates'] += 1 + else: + results['failed'] += 1 + + # Kurze Pause zwischen Uploads + if i < len(articles): + import time + time.sleep(1) + + logging.info(f"📊 Batch-Upload abgeschlossen: {results['successful']} erfolgreich, {results['failed']} fehlgeschlagen, {results['duplicates']} Duplikate") + return results + + def __del__(self): + """ + Session sauber schließen + """ + if hasattr(self, 'session'): + self.session.close() + + +def upload_articles_to_wordpress(articles: List[Dict]) -> Dict: + """ + Convenience-Funktion für den Upload von Artikeln zu WordPress + """ + uploader = WordPressUploader() + + # Verbindung testen + connection_ok, connection_msg = uploader.test_connection() + if not connection_ok: + logging.error(f"❌ WordPress-Verbindung fehlgeschlagen: {connection_msg}") + return { + 'total': len(articles), + 'successful': 0, + 'failed': len(articles), + 'duplicates': 0, + 'error': connection_msg, + 'details': [] + } + + # Artikel hochladen + return uploader.upload_multiple_articles(articles) + + +def upload_single_article_to_wordpress(article: Dict) -> Tuple[bool, str, Optional[int]]: + """ + Convenience-Funktion für den Upload eines einzelnen Artikels + """ + uploader = WordPressUploader() + + # Verbindung testen + connection_ok, connection_msg = uploader.test_connection() + if not connection_ok: + return False, connection_msg, None + + # Artikel hochladen + return uploader.upload_article(article) diff --git a/versioning.py b/versioning.py index 1d782e5..0b56e74 100644 --- a/versioning.py +++ b/versioning.py @@ -2,8 +2,7 @@ import re import subprocess from pathlib import Path from datetime import datetime -import typer -import os +import click CHANGELOG_FILE = Path("CHANGELOG.md") VERSION_FILE = Path("__version__.py") @@ -11,16 +10,15 @@ VERSION_PATTERN = r"## \[v?(\d+\.\d+\.\d+)\]" def get_latest_version(): try: - # Versuch über Git-Tags + # Zuerst versuchen, Git-Tag auszulesen tag = subprocess.check_output(["git", "describe", "--tags", "--abbrev=0"], stderr=subprocess.DEVNULL) return tag.decode("utf-8").strip().lstrip("v") except subprocess.CalledProcessError: - # Fallback: Changelog + # Fallback auf CHANGELOG.md content = CHANGELOG_FILE.read_text(encoding="utf-8") matches = re.findall(VERSION_PATTERN, content) return matches[0] if matches else "0.0.0" - def bump_version(version: str, level: str = "patch") -> str: major, minor, patch = map(int, version.split(".")) if level == "major": @@ -32,17 +30,6 @@ def bump_version(version: str, level: str = "patch") -> str: def write_version_file(version: str): VERSION_FILE.write_text(f"VERSION = \"{version}\"\n", encoding="utf-8") -def update_changelog(version: str): - date = datetime.now().strftime("%Y-%m-%d") - new_entry = f"## [{version}] - {date}\n\n- Beschreibung...\n\n" - content = CHANGELOG_FILE.read_text(encoding="utf-8") - - if f"## [{version}]" in content: - typer.secho(f"ℹ️ Version {version} ist bereits im CHANGELOG.md vorhanden. Kein Eintrag hinzugefügt.", fg=typer.colors.BLUE) - else: - CHANGELOG_FILE.write_text(new_entry + content, encoding="utf-8") - typer.secho(f"📄 CHANGELOG.md um Version {version} ergänzt.", fg=typer.colors.MAGENTA) - def is_ssh_signing_available() -> bool: return Path("~/.ssh/id_ed25519").expanduser().exists() @@ -53,6 +40,14 @@ def is_gpg_available() -> bool: except Exception: return False +def tag_exists(tag_name: str) -> bool: + """Prüft, ob ein Git-Tag bereits existiert""" + try: + result = subprocess.check_output(["git", "tag", "-l", tag_name], stderr=subprocess.DEVNULL).decode().strip() + return result == tag_name + except subprocess.CalledProcessError: + return False + def configure_signing(use_ssh: bool): if use_ssh: subprocess.run(["git", "config", "--global", "gpg.format", "ssh"], check=True) @@ -61,35 +56,94 @@ def configure_signing(use_ssh: bool): subprocess.run(["git", "config", "--global", "gpg.format", "openpgp"], check=True) subprocess.run(["git", "config", "--global", "commit.gpgsign", "true"], check=True) -def create( - level: str = "patch", - push: bool = False, - no_sign: bool = False, - dry_run: bool = False -): +@click.command() +@click.option("--level", default="patch", help="Version bump level: patch, minor, major") +@click.option("--version", "specific_version", help="Set specific version (e.g., 2.1.0) instead of auto-bumping") +@click.option("--push", is_flag=True, help="Push to GitHub after creating version") +@click.option("--no-sign", is_flag=True, help="Skip signing of commits and tags") +@click.option("--dry-run", is_flag=True, help="Show what would be done without executing") +@click.option("--force", is_flag=True, help="Force creation even if tag already exists (overwrites existing tag)") +def create(level, specific_version, push, no_sign, dry_run, force): """ Erstellt eine neue Version mit optional signiertem Commit & Tag. - Optional: --push, --no-sign, --dry-run + Optional: --push, --no-sign, --dry-run, --version, --force """ current = get_latest_version() - new_version = bump_version(current, level) + + # Validierung und Festlegung der neuen Version + if specific_version: + # Validiere das Format der vorgegebenen Version + version_pattern = r"^\d+\.\d+\.\d+$" + if not re.match(version_pattern, specific_version): + click.secho("❌ Fehler: Version muss im Format X.Y.Z sein (z.B. 2.1.0)", fg="red") + return + + # Prüfe, ob der Tag bereits existiert + tag_name = f"v{specific_version}" + if tag_exists(tag_name) and not force: + click.secho(f"❌ Fehler: Tag {tag_name} existiert bereits. Verwende --force zum Überschreiben.", fg="red") + return + elif tag_exists(tag_name) and force: + click.secho(f"⚠️ Tag {tag_name} existiert bereits - wird überschrieben (--force aktiviert)", fg="yellow") + + # Prüfe, ob die vorgegebene Version höher als die aktuelle ist (nur ohne force) + if not force: + def version_tuple(v): + return tuple(map(int, v.split('.'))) + + if version_tuple(specific_version) <= version_tuple(current): + click.secho(f"❌ Fehler: Neue Version {specific_version} muss höher sein als aktuelle Version {current}", fg="red") + click.secho("💡 Tipp: Verwende --force um diese Prüfung zu überspringen", fg="blue") + return + + new_version = specific_version + click.secho(f"📌 Verwende vorgegebene Version: {new_version}", fg="blue") + else: + new_version = bump_version(current, level) + + # Prüfe auch bei Auto-Bump, ob Tag existiert + tag_name = f"v{new_version}" + if tag_exists(tag_name) and not force: + click.secho(f"❌ Fehler: Tag {tag_name} existiert bereits. Verwende --force zum Überschreiben.", fg="red") + return + elif tag_exists(tag_name) and force: + click.secho(f"⚠️ Tag {tag_name} existiert bereits - wird überschrieben (--force aktiviert)", fg="yellow") + + click.secho(f"🔄 Auto-Bump ({level}): {current} → {new_version}", fg="green") if dry_run: - typer.secho("🔍 Dry-Run aktiviert – keine Dateien oder Git-Kommandos werden ausgeführt.\n", fg=typer.colors.YELLOW) - typer.echo(f"➡️ Aktuelle Version: {current}") - typer.echo(f"➡️ Neue Version: {new_version}") - typer.echo(f"➡️ Commit-Level: {level}") - typer.echo(f"➡️ Push nach GitHub: {'Ja' if push else 'Nein'}") - typer.echo(f"➡️ Signieren: {'Nein' if no_sign else 'Automatisch (SSH > GPG)'}") + click.secho("🔍 Dry-Run aktiviert – keine Dateien oder Git-Kommandos werden ausgeführt.\n", fg="yellow") + click.echo(f"➡️ Aktuelle Version: {current}") + click.echo(f"➡️ Neue Version: {new_version}") + click.echo(f"➡️ Commit-Level: {level}") + click.echo(f"➡️ Push nach GitHub: {'Ja' if push else 'Nein'}") + click.echo(f"➡️ Signieren: {'Nein' if no_sign else 'Automatisch (SSH > GPG)'}") + click.echo(f"➡️ Force-Modus: {'Ja' if force else 'Nein'}") date = datetime.now().strftime("%Y-%m-%d") - typer.echo("\n📄 Vorschlag für CHANGELOG-Eintrag:") - typer.echo(f"\n## [{new_version}] - {date}\n\n- Beschreibung...\n") - typer.secho("🚫 Dry-Run beendet.\n", fg=typer.colors.YELLOW) + click.echo("\n📄 Vorschlag für CHANGELOG-Eintrag:") + click.echo(f"\n## [{new_version}] - {date}\n\n- Beschreibung...\n") + click.secho("🚫 Dry-Run beendet.\n", fg="yellow") return + # Update version file write_version_file(new_version) - update_changelog(new_version) + + # Prepare or check changelog entry + date = datetime.now().strftime("%Y-%m-%d") + new_entry = f"## [{new_version}] - {date}\n\n- Beschreibung...\n\n" + content = CHANGELOG_FILE.read_text(encoding="utf-8") + + if f"## [{new_version}]" in content: + click.secho(f"ℹ️ Version {new_version} ist bereits im CHANGELOG.md vorhanden. Kein Eintrag hinzugefügt.", fg="blue") + else: + CHANGELOG_FILE.write_text(new_entry + content, encoding="utf-8") + click.secho(f"📄 CHANGELOG.md wurde vorbereitet für Version {new_version}.", fg="magenta") + + click.echo("") + click.secho("✏️ Bitte jetzt den Eintrag in CHANGELOG.md überprüfen oder anpassen.", fg="cyan") + input("⏸️ Drücke [Enter], um fortzufahren...") + subprocess.run(["git", "add", "."], check=True) use_signing = False @@ -110,22 +164,32 @@ def create( commit_cmd.append("-S") subprocess.run(commit_cmd, check=True) + # Tag erstellen + tag_name = f"v{new_version}" if use_signing: - subprocess.run(["git", "tag", "-s", f"v{new_version}", "-m", f"Release v{new_version}"], check=True) + if force and tag_exists(tag_name): + subprocess.run(["git", "tag", "-d", tag_name], check=True) # Lokalen Tag löschen + subprocess.run(["git", "tag", "-s", tag_name, "-m", f"Release {tag_name}"], check=True) else: - subprocess.run(["git", "tag", "-a", f"v{new_version}", "-m", f"Release v{new_version} (unsigned)"], check=True) + if force and tag_exists(tag_name): + subprocess.run(["git", "tag", "-d", tag_name], check=True) # Lokalen Tag löschen + subprocess.run(["git", "tag", "-a", tag_name, "-m", f"Release {tag_name} (unsigned)"], check=True) if push: subprocess.run(["git", "push"], check=True) - subprocess.run(["git", "push", "origin", f"v{new_version}"], check=True) + if force and tag_exists(tag_name): + # Force push des Tags, falls er bereits auf Remote existiert + subprocess.run(["git", "push", "origin", tag_name, "--force"], check=True) + else: + subprocess.run(["git", "push", "origin", tag_name], check=True) if use_signing: if signing_method == "ssh": - typer.secho(f"✅ Version {new_version} erstellt und signiert mit SSH 🔐", fg=typer.colors.GREEN) + click.secho(f"✅ Version {new_version} erstellt und signiert mit SSH 🔐", fg="green") elif signing_method == "gpg": - typer.secho(f"✅ Version {new_version} erstellt und signiert mit GPG 🔏", fg=typer.colors.CYAN) + click.secho(f"✅ Version {new_version} erstellt und signiert mit GPG 🔏", fg="cyan") else: - typer.secho(f"⚠️ Version {new_version} wurde ohne Signatur erstellt", fg=typer.colors.YELLOW) + click.secho(f"⚠️ Version {new_version} wurde ohne Signatur erstellt", fg="yellow") if __name__ == "__main__": - typer.run(create) + create() \ No newline at end of file