Release 1.1.0
This commit is contained in:
parent
633f312bc7
commit
2f7f2a1eb7
8 changed files with 242 additions and 20 deletions
33
.gitignore
vendored
33
.gitignore
vendored
|
|
@ -1 +1,34 @@
|
|||
# Byte-compiled / optimierte / andere Python-Dateien
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
|
||||
# Virtuelle Umgebungen
|
||||
.venv/
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
|
||||
# VS Code / PyCharm / andere IDEs
|
||||
.vscode/
|
||||
.idea/
|
||||
|
||||
# Betriebssystemdateien
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Streamlit spezifisch
|
||||
.streamlit/config.toml
|
||||
|
||||
# dotenv / Umgebungsvariablen
|
||||
.env
|
||||
|
||||
# JSON-Datenbanken / Zwischenspeicherung
|
||||
*.json
|
||||
!feeds.json # optional entfernbar, wenn du Beispielfeeds mit versionieren willst
|
||||
|
||||
# LOG Files ausschließen, dienen nur zum Debuggen
|
||||
# *.log
|
||||
|
||||
# Start Bash ignirieren
|
||||
start.sh
|
||||
|
|
|
|||
28
CHANGELOG.md
Normal file
28
CHANGELOG.md
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# CHANGELOG.md
|
||||
|
||||
## [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
|
||||
21
LICENCE
Normal file
21
LICENCE
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2025 Oliver Giertz
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
25
README.md
Normal file
25
README.md
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# 📰 RSS Artikel Manager
|
||||
|
||||
Ein Python-Webtool, das RSS-Artikel automatisch einliest, per ChatGPT umschreibt und mit Tags versieht. Die Artikel lassen sich nach Status filtern und über eine tabellarische Streamlit-Oberfläche verwalten.
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Features
|
||||
|
||||
- Verwaltung von RSS-Feeds direkt in der Weboberfläche
|
||||
- Artikel laden, duplikatfrei speichern und anzeigen
|
||||
- Artikelstatus: `New`, `Rewrite`, `Process`, `Online`, `On Hold`, `Trash`
|
||||
- Artikel per ChatGPT umformulieren und automatisch taggen
|
||||
- Filterbare und editierbare Artikelübersicht in Tabellenform
|
||||
- Speicherung in `articles.json` (lokale JSON-Datei)
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Installation
|
||||
|
||||
```bash
|
||||
git clone https://github.com/dein-user/rss-artikel-manager.git
|
||||
cd rss-artikel-manager
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate # oder .venv\\Scripts\\activate auf Windows
|
||||
pip install -r requirements.txt
|
||||
4
app.log
Normal file
4
app.log
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
2025-07-04 09:29:50,207 - INFO - Status von 1 Artikel(n) auf 'Rewrite' gesetzt.
|
||||
2025-07-04 09:30:17,000 - INFO - HTTP Request: POST https://api.openai.com/v1/chat/completions "HTTP/1.1 200 OK"
|
||||
2025-07-04 09:30:17,010 - INFO - ✅ Artikel umgeschrieben: Das weltweit größte Caravaning-Erlebnis
|
||||
2025-07-04 09:46:03,001 - INFO - Status von 1 Artikel(n) auf 'Online' gesetzt.
|
||||
71
app.py
71
app.py
|
|
@ -6,7 +6,20 @@ import os
|
|||
from datetime import datetime
|
||||
import pandas as pd
|
||||
import openai
|
||||
from openai import OpenAI
|
||||
from dotenv import load_dotenv
|
||||
import logging
|
||||
|
||||
# ==== Version ====
|
||||
APP_VERSION = "1.1.0"
|
||||
|
||||
# ==== Logging konfigurieren ====
|
||||
LOG_FILE = "app.log"
|
||||
logging.basicConfig(
|
||||
filename=LOG_FILE,
|
||||
level=logging.INFO,
|
||||
format="%(asctime)s - %(levelname)s - %(message)s",
|
||||
)
|
||||
|
||||
# ==== Konfiguration ====
|
||||
ARTICLES_FILE = "articles.json"
|
||||
|
|
@ -16,7 +29,8 @@ ALL_STATUSES = ["New", "Rewrite", "Process", "Online", "On Hold", "Trash"]
|
|||
|
||||
# ==== API Schlüssel laden ====
|
||||
load_dotenv()
|
||||
openai.api_key = os.getenv("OPENAI_API_KEY")
|
||||
api_key = os.getenv("OPENAI_API_KEY")
|
||||
client = OpenAI(api_key=api_key)
|
||||
|
||||
# ==== Hilfsfunktionen ====
|
||||
def load_articles():
|
||||
|
|
@ -26,6 +40,7 @@ def load_articles():
|
|||
with open(ARTICLES_FILE, "r") as f:
|
||||
return json.load(f)
|
||||
except json.JSONDecodeError:
|
||||
logging.error("Fehler beim Laden von articles.json")
|
||||
return []
|
||||
|
||||
def save_articles(articles):
|
||||
|
|
@ -39,6 +54,7 @@ def load_feeds():
|
|||
with open(FEEDS_FILE, "r") as f:
|
||||
return json.load(f)
|
||||
except json.JSONDecodeError:
|
||||
logging.error("Fehler beim Laden von feeds.json")
|
||||
return []
|
||||
|
||||
def save_feeds(feeds):
|
||||
|
|
@ -81,28 +97,31 @@ def format_date(date_str):
|
|||
except Exception:
|
||||
return date_str
|
||||
|
||||
def rewrite_article_with_gpt(original_text):
|
||||
def rewrite_article_with_gpt(original_text, title):
|
||||
prompt = (
|
||||
"Schreibe folgenden Artikel um und formuliere ihn in journalistischem Stil neu. "
|
||||
"Füge am Ende eine Liste von 2–3 passenden Tags hinzu (nur Schlagwörter, keine Hashtags):\n"
|
||||
f"{original_text}"
|
||||
)
|
||||
try:
|
||||
response = openai.ChatCompletion.create(
|
||||
response = client.chat.completions.create(
|
||||
model="gpt-4",
|
||||
messages=[{"role": "user", "content": prompt}],
|
||||
temperature=0.7
|
||||
)
|
||||
return response.choices[0].message.content
|
||||
result = response.choices[0].message.content
|
||||
logging.info(f"✅ Artikel umgeschrieben: {title}")
|
||||
return result
|
||||
except Exception as e:
|
||||
logging.error(f"❌ Fehler beim Umschreiben von '{title}': {e}")
|
||||
return f"FEHLER: {e}"
|
||||
|
||||
# ==== UI ====
|
||||
st.set_page_config(page_title="RSS Artikel Manager", layout="wide")
|
||||
st.title("📰 RSS Artikel Manager")
|
||||
st.sidebar.markdown(f"🧩 Version: `{APP_VERSION}`")
|
||||
|
||||
# Bereich: Feed-Verwaltung
|
||||
st.sidebar.header("RSS Feeds verwalten")
|
||||
feeds = load_feeds()
|
||||
new_feed = st.sidebar.text_input("Neuen Feed hinzufügen")
|
||||
if st.sidebar.button("➕ Feed hinzufügen") and new_feed:
|
||||
|
|
@ -126,6 +145,7 @@ if st.button("🔄 Artikel aus Feeds laden"):
|
|||
all_articles = load_articles() + new
|
||||
save_articles(all_articles)
|
||||
st.success(f"{len(new)} neue Artikel geladen.")
|
||||
logging.info(f"{len(new)} neue Artikel geladen.")
|
||||
else:
|
||||
st.info("Keine neuen Artikel gefunden.")
|
||||
|
||||
|
|
@ -134,12 +154,16 @@ rewrite_articles = [a for a in load_articles() if a["status"] == "Rewrite"]
|
|||
if rewrite_articles:
|
||||
if st.button("✍️ Alle Artikel mit Status 'Rewrite' umschreiben"):
|
||||
all_articles = load_articles()
|
||||
progress_text = st.empty()
|
||||
with st.spinner("Artikel werden umgeschrieben..."):
|
||||
total = len([a for a in all_articles if a["status"] == "Rewrite"])
|
||||
count = 0
|
||||
for a in all_articles:
|
||||
if a["status"] == "Rewrite":
|
||||
result = rewrite_article_with_gpt(a["content"])
|
||||
count += 1
|
||||
progress_text.markdown(f"➡️ Umschreibe Artikel {count} von {total}: **{a['title']}**")
|
||||
result = rewrite_article_with_gpt(a["content"], a["title"])
|
||||
if "FEHLER:" not in result:
|
||||
# Aufteilen in Text und Tags, falls möglich
|
||||
if "Tags:" in result:
|
||||
rewritten, tags = result.rsplit("Tags:", 1)
|
||||
a["content"] = rewritten.strip()
|
||||
|
|
@ -161,12 +185,11 @@ if articles:
|
|||
st.markdown("---")
|
||||
st.subheader(f"Artikel mit Status '{status_filter}'")
|
||||
|
||||
# Checkbox-Auswahl manuell verwalten
|
||||
selected_ids = []
|
||||
for i, article in enumerate(articles):
|
||||
cols = st.columns([0.5, 1.5, 3, 4, 1, 2, 1])
|
||||
with cols[0]:
|
||||
if st.checkbox("", key=article["id"]):
|
||||
if st.checkbox("Auswählen", key=article["id"], label_visibility="collapsed"):
|
||||
selected_ids.append(article["id"])
|
||||
cols[1].markdown(format_date(article["date"]))
|
||||
cols[2].markdown(f"**{article['title']}**")
|
||||
|
|
@ -177,14 +200,42 @@ if articles:
|
|||
|
||||
st.markdown("---")
|
||||
if selected_ids:
|
||||
all_articles = load_articles()
|
||||
selected_articles = [a for a in all_articles if a["id"] in selected_ids]
|
||||
|
||||
|
||||
with st.expander("📋 Inhalte für WordPress kopieren"):
|
||||
for a in selected_articles:
|
||||
with st.container():
|
||||
st.markdown("""
|
||||
<div style="border: 1px solid #CCC; padding: 1rem; border-radius: 10px; background-color: #F9F9F9;">
|
||||
""", unsafe_allow_html=True)
|
||||
|
||||
st.markdown(f"### ✏️ {a['title']}")
|
||||
|
||||
st.markdown(f"<button style='margin-bottom:0.5rem;' onclick=\"navigator.clipboard.writeText('{a['title']}')\">🔗 Titel kopieren</button>", unsafe_allow_html=True)
|
||||
|
||||
st.text_area("📝 Artikeltext", value=a["content"], height=300, key=f"content_{a['id']}", help="CMD+C zum Kopieren")
|
||||
|
||||
st.markdown(f"<button style='margin-bottom:0.5rem;' onclick=\"navigator.clipboard.writeText(`{a['content']}`)\">📋 Artikeltext kopieren</button>", unsafe_allow_html=True)
|
||||
|
||||
st.text_input("🏷️ Tags", value=", ".join(a["tags"]), key=f"tags_{a['id']}", help="CMD+C zum Kopieren")
|
||||
|
||||
st.markdown(f"<button style='margin-bottom:0.5rem;' onclick=\"navigator.clipboard.writeText('{', '.join(a['tags'])}')\">📎 Tags kopieren</button>", unsafe_allow_html=True)
|
||||
|
||||
st.markdown(f"<a href='{a['link']}' target='_blank' style='text-decoration: none;'><button style='background-color:#e8f0fe; border:none; padding:0.5rem 1rem; border-radius:5px;'>🔗 Zum Originalartikel</button></a>", unsafe_allow_html=True)
|
||||
|
||||
st.markdown("</div>", unsafe_allow_html=True)
|
||||
|
||||
|
||||
new_status = st.selectbox("Neuen Status setzen für ausgewählte Artikel", ALL_STATUSES)
|
||||
if st.button("✅ Status ändern"):
|
||||
all_articles = load_articles()
|
||||
for a in all_articles:
|
||||
if a["id"] in selected_ids:
|
||||
a["status"] = new_status
|
||||
save_articles(all_articles)
|
||||
st.success("Status aktualisiert.")
|
||||
logging.info(f"Status von {len(selected_ids)} Artikel(n) auf '{new_status}' gesetzt.")
|
||||
st.rerun()
|
||||
else:
|
||||
st.warning(f"Keine Artikel mit Status '{status_filter}' vorhanden.")
|
||||
|
|
|
|||
|
|
@ -47,11 +47,15 @@
|
|||
"id": "a97f65f6-ce4e-4607-9ed6-1d33e04a278b",
|
||||
"date": "Tue, 13 May 2025 00:00:00 +0200",
|
||||
"title": "Das weltweit gr\u00f6\u00dfte Caravaning-Erlebnis",
|
||||
"summary": "<p>Der CARAVAN SALON ist die größte und wichtigste Messe weltweit, die sich ausschließlich dem Thema Caravaning widmet - und macht di",
|
||||
"content": "<p>Der CARAVAN SALON ist die größte und wichtigste Messe weltweit, die sich ausschließlich dem Thema Caravaning widmet - und macht dieses Lebensgefühl zu einem einzigartigen Messe-Erlebnis. Als unangefochtener Branchentreffpunkt präsentiert die weltweit führende Leitmesse die größte Auswahl an Reisemobilen, Caravans und Campervans. Ergänzt wird das Angebot durch eine unvergleichliche Vielfalt an Zubehör, technischem Equipment, Ausbauteilen, Dachzelten, Mobilheimen, Caravaning- und Campingzubehör, Reisedestinationen, Campingplätzen sowie Reisemobilstellplätzen.<br /><br /></p>\n<p><strong>Messeerlebnis nicht zu ersetzen</strong><br /><br />„Gerade in herausfordernden Zeiten zeigt sich eindrucksvoll, welchen unschätzbaren Wert Messen für unsere Branche haben. Potenzielle Kunden wollen die Fahrzeuge vor der Kaufentscheidung nicht nur sehen – sie wollen erleben, anfassen, vergleichen, einsteigen und spüren, welcher Grundriss zu ihrem Lebensstil passt. Der CARAVAN SALON ist der einzige Ort, an dem alle renommierten nationalen und internationalen Hersteller versammelt sind – und Besucher die ganze Bandbreite des Marktes auf einen Blick erfassen können“, sagt Director Stefan Koschke. In Düsseldorf werden die Premieren der kommenden Saison gezeigt: Top-Produkte, Innovationen und Weltneuheiten – erstmals öffentlich erlebbar, ergänzt durch zahlreiche spannende Neuaussteller, die die Modellvielfalt nochmals erweitern. „Das Messeerlebnis CARAVAN SALON wird damit noch intensiver, vom passenden Fahrzeug bis zum ganz persönlichen Traumziel“, ergänzt Stefan Koschke.</p>\n<p><br /><strong>Neue Halleneinteilung – noch mehr entdecken, noch leichter finden</strong><br /><br />Dank einer neuen, übersichtlich gestalteten Hallenstruktur, gelangen Besucherinnen und Besucher weiterhin schnell und gezielt in ihre persönliche Caravaning-Welt. Ob Camping-Neuling, Technik-Fan, kreativer Selbstausbauer oder Luxus-Liebhaber – auf dem CARAVAN SALON kommt jeder auf seine Kosten und entdeckt genau das, was das eigene Herz höherschlagen lässt. „Mit der neuen Aufteilung schaffen wir ein inspirierendes Messeerlebnis für unsere Gäste. Durch laufende Modernisierungen des Geländes und der Hallen sichern wir auch langfristig optimale Bedingungen für Beratung, Austausch und Networking. Im Zuge dieser Maßnahmen wird Halle 9 vorübergehend nicht genutzt – dafür dürfen sich Besucher auf interessante und spannende Platzierungen vieler Marken in einem frischen Umfeld freuen“, erklärt Stefan Koschke.</p>\n<p><br /><strong>Caravaning so beliebt wie nie zuvor</strong><br /><br />„Caravaning erfreut sich seit vielen Jahren wachsender Beliebtheit, denn die individuelle und flexible Art des Reisens im Einklang mit der Natur entspricht dem Wunsch vieler Menschen nach einem selbstbestimmten Urlaub. Im Zuge dieser Entwicklung hat sich der mobile Urlaub längst generationenübergreifend zu einer der beliebtesten Reiseformen entwickelt – und das nicht nur in Europa, sondern weltweit. Noch nie waren so viele Menschen mit Reisemobil oder Caravan unterwegs wie heute. Diese Dynamik spiegelt sich auch auf dem CARAVAN SALON wider, der seit jeher die wichtigste internationale Bühne der Caravaningbranche ist. Nirgendwo sonst ist die Vielfalt an Fahrzeugen, Zubehör, Dienstleistungen und Reiseinspirationen größer als in Düsseldorf. Jahr für Jahr untermauert der CARAVAN SALON damit seine Rolle als Leuchtturm der Branche“, erklärt Daniel Onggowinarso, Geschäftsführer des Caravaning Industrie Verbandes (CIVD).</p>\n<p>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.</p>\n<p>Der Ticketverkauf startet am 11. Juni. Aktuelle Informationen und Neuigkeiten gibt es im Internet unter <a href=\"https://www.caravan-salon.de\" target=\"_blank\">www.caravan-salon.de</a>.</p>",
|
||||
"word_count": 487,
|
||||
"tags": [],
|
||||
"status": "Rewrite",
|
||||
"summary": "Als f\u00fchrendes internationales Forum f\u00fcr die Caravaning-Industrie setzt der CARAVAN SALON neue Standards und bietet Besuchern ein unvergleichliches Erl",
|
||||
"content": "Als f\u00fchrendes internationales Forum f\u00fcr die Caravaning-Industrie setzt der CARAVAN SALON neue Standards und bietet Besuchern ein unvergleichliches Erlebnis. Der Salon hat sich als weltweite Drehscheibe f\u00fcr mobile Reiseenthusiasten etabliert und stellt eine umfangreiche Auswahl an Reisemobilen, Caravans und Campervans vor. Die Ausstellung wird durch ein breites Spektrum an Zubeh\u00f6r, technischen Ger\u00e4ten, Ausbauteilen, Dachzelten, Mobilheimen, Campingbedarf und Reisedestinationen erg\u00e4nzt.\n\nStefan Koschke, Direktor des CARAVAN SALON, hebt die entscheidende Rolle hervor, die Messen - besonders in herausfordernden Zeiten - f\u00fcr die Branche spielen. \"Potenzielle Kunden wollen die Fahrzeuge nicht nur sehen, sondern sie erleben, anfassen und vergleichen. Der CARAVAN SALON bietet die unvergleichliche Gelegenheit, alle nationalen und internationalen Hersteller unter einem Dach zu erleben und einen umfassenden \u00dcberblick \u00fcber den Markt zu gewinnen\", so Koschke.\n\nEine Neuerung auf dem CARAVAN SALON ist die klar strukturierte Hallenorganisation, die Besuchern hilft, schnell und gezielt ihre gew\u00fcnschten Ausstellungen zu erreichen. Koschke f\u00fcgt hinzu, dass st\u00e4ndige Modernisierungen des Veranstaltungsortes und der Hallen ideale Bedingungen f\u00fcr Beratung, Austausch und Networking gew\u00e4hrleisten.\n\nDaniel Onggowinarso, Gesch\u00e4ftsf\u00fchrer des Caravaning Industrie Verbandes (CIVD), unterstreicht die wachsende Attraktivit\u00e4t des Caravaning. \"Die individuelle und flexible Art des Reisens in Harmonie mit der Natur erf\u00fcllt den Wunsch vieler Menschen nach einem selbstbestimmten Urlaub. Der CARAVAN SALON reflektiert diese Trenddynamik und best\u00e4tigt seine Position als internationale Plattform der Caravaningbranche\", so Onggowinarso.\n\nAm 29. August bietet der Preview Day den Besuchern die M\u00f6glichkeit, die Branchenneuheiten in einer entspannten Umgebung zu erkunden. Der Ticketverkauf startet am 11. Juni. Weitere Informationen und Updates sind auf der Website des CARAVAN SALON verf\u00fcgbar.",
|
||||
"word_count": 254,
|
||||
"tags": [
|
||||
"CARAVAN SALON",
|
||||
"Caravaning",
|
||||
"Mobiles Reisen"
|
||||
],
|
||||
"status": "Online",
|
||||
"link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5926"
|
||||
},
|
||||
{
|
||||
|
|
@ -69,11 +73,15 @@
|
|||
"id": "4f83b2d1-f43c-4d41-8d68-bcb6b0675c46",
|
||||
"date": "Wed, 07 May 2025 00:00:00 +0200",
|
||||
"title": "Fr\u00fchjahrsaktionen vom Verein WOHNmobil f\u00fcr Klimaschutz",
|
||||
"summary": "Jagsthausen in Baden-Württemberg, Uchte in Niedersachsen, Wernigerode in Sachsen-Anhalt und Harkebrügger See in Niedersachsen - so heiß",
|
||||
"content": "Jagsthausen in Baden-Württemberg, Uchte in Niedersachsen, Wernigerode in Sachsen-Anhalt und Harkebrügger See in Niedersachsen - so heißen die Stationen der \"Frühjahrs-Tour\" des Vereins WOHNmobil für Klimaschutz e.V. <br /><br />Dabei fanden 6.000 Hainbuchen, Rotbuchen, Hainbuchen, Eichen und Weißtannen ihr neues Zuhause im jeweils heimischen Wald. Teams in der Stärke von 12 bis 18 Vereinsmitgliedern pflanzten an 3 Wochenenden im März und Anfang April die 2- bis 3-jährigen Setzlinge gemein sam mit dem jeweiligen Revierförster auf den vorgesehenen Flächen. Dabei handelte es sich in zwei Fällen um freigeräumte Flächen, auf denen früher Fichten standen, die aber Trockenheit, Stürme und Borkenkäfer nicht überlebt haben. Im anderen Fall wurden die Setzlinge in einem reinen Kiefernbestand untergepflanzt und sollen so die Basis für den beabsichtigen Umbau zu einem Mischwald bilden. Je nach Bodenbeschaffenheit kamen bei den Arbeiten Hohlspaten oder Pflanzhacke zum Einsatz. <br /><br />Mit den neuen Setzlingen füllt sich das \"Baumkonto\" von WOHNmobil für Klimaschutz e.V. auf nunmehr fast 19.000 gespendete und in vielen Teilen Deutschlands gepflanzte Bäume. \"Wenn man bedenkt, dass jeder Baum in den kommenden 100 Jahren durchschnittlich jährlich 10 kg CO2 speichert, dann leisten unsere Bäume einen großartigen Beitrag zum Klimaschutz\", bewertet Vereinsvorstand Albert Märkl die bisherige Bilanz des Vereins.<br /><br /> Das Gesellige kommt bei den Aktionen des Vereins nicht zu kurz. Dieses mal standen auf dem Programm: Stadtführungen in Öhringen und Wernigerode, eine Fahrt mit einer historischen Moorbahn und eine Führung durch das Neustädter Moor. <br /><br />Einen Beitrag zu umweltfreundlichem und -bewusstem Camping leistete WOHNmobil für Kli maschutz e.V. auch dadurch, dass der Verein das ökologische Profil von Wohnmobilstellplätzen bewertete sowie ökologisch gestaltete und betriebene Plätze auszeichnete. Am 27.03.2025 prämierte der Verein das Wohnmobilcamp Småland am Harkebrügger See bei 26676 Barßel/NI als seinen Ökologischen Wohnmobilstellplatz 2025. Vereinsvorstand Albert Märkl (links im Bild) überreichte dem stolzen Besitzer Hans-Jürgen Lampe die Urkunde und ein Camper-Insektenhotel. Der idyllisch gelegene und naturnah gestaltete Stellplatz erinnert nicht nur wegen seines Namens an Schweden, sondern vor allem aufgrund seiner schönen Lage und Umgebung. Er be sticht zudem nicht nur durch seine Idylle und das liebevoll gestaltete Grün. Er verfügt auch über eine Reihe von energie- und wassersparenden Einrichtungen, über eine sorgfältige Mülltren nung und über Informationen für die Gäste zum umweltschonenden Verhalten auf dem Platz, wie zu Rad- und Wanderwegen. Die Stellplatzflächen sind nicht versiegelt, Oberflächenwasser wird zusätzlich in eine Art Biotop abgeleitet. Die Einrichtungen zur Ver- und Entsorgung sind gut anzufahren und hygienisch mit Spülungen ausgestattet. Märkl: \"Es lohnt sich, den Stellplatz an zufahren, man spürt sofort, dass den Betreibern das Wohl ihrer Gäste und das Wohl unserer Umwelt und Natur am Herzen liegen\". <br /><br />Informationen darüber, wie man Mitglied oder Fördermitglied werden kann, sind unter <a href=\"http://www.wohnmobil-fuer-klimaschutz.de\" target=\"_blank\">www.wohnmobil-fuer-klimaschutz.de</a> zu finden.",
|
||||
"word_count": 450,
|
||||
"tags": [],
|
||||
"status": "Rewrite",
|
||||
"summary": "\"Fr\u00fchlings-Tour\" des Vereins WOHNmobil f\u00fcr Klimaschutz: 6.000 neue B\u00e4ume gepflanzt\n\nDer Verein WOHNmobil f\u00fcr Klimaschutz e.V. hat es sich zur Mission ",
|
||||
"content": "\"Fr\u00fchlings-Tour\" des Vereins WOHNmobil f\u00fcr Klimaschutz: 6.000 neue B\u00e4ume gepflanzt\n\nDer Verein WOHNmobil f\u00fcr Klimaschutz e.V. hat es sich zur Mission gemacht, die Umwelt zu sch\u00fctzen. In ihrer j\u00fcngsten Aktion, der \"Fr\u00fchlings-Tour\", haben die Mitglieder des Vereins in den W\u00e4ldern von Jagsthausen (Baden-W\u00fcrttemberg), Uchte und Harkebr\u00fcgger See (beide in Niedersachsen) und Wernigerode (Sachsen-Anhalt) insgesamt 6.000 junge B\u00e4ume gepflanzt.\n\nDie Vielfalt der gepflanzten B\u00e4ume reicht von Hain- und Rotbuchen \u00fcber Eichen bis hin zu Wei\u00dftannen. Diese wurden in drei Wochenenden im M\u00e4rz und April von Teams aus 12 bis 18 Vereinsmitgliedern unter Anleitung lokaler F\u00f6rster gepflanzt. Ziel der Aktion war es, fr\u00fchere Fichtenfl\u00e4chen, die unter Trockenheit, St\u00fcrmen und Borkenk\u00e4ferbefall gelitten hatten, neu zu bepflanzen und reine Kiefernw\u00e4lder in Mischw\u00e4lder umzuwandeln.\n\nMit dieser Aktion ist das \"Baumkonto\" des Vereins auf knapp 19.000 gespendete und gepflanzte B\u00e4ume angewachsen. \"Jeder dieser B\u00e4ume wird in den n\u00e4chsten 100 Jahren durchschnittlich 10 kg CO2 pro Jahr speichern. Damit tragen unsere B\u00e4ume wesentlich zum Klimaschutz bei\", erkl\u00e4rt Vereinsvorstand Albert M\u00e4rkl.\n\nNeben dem Umweltschutz legt der Verein auch Wert auf soziale Aktivit\u00e4ten. So wurden w\u00e4hrend der \"Fr\u00fchlings-Tour\" Stadtf\u00fchrungen in \u00d6hringen und Wernigerode organisiert, eine historische Moorbahn besichtigt und eine F\u00fchrung durch das Neust\u00e4dter Moor angeboten. \n\nDar\u00fcber hinaus setzt sich der Verein f\u00fcr nachhaltiges und umweltfreundliches Camping ein. Im Rahmen seiner Aktivit\u00e4ten bewertet er die \u00f6kologischen Merkmale von Wohnmobilstellpl\u00e4tzen und zeichnet besonders umweltfreundlich gestaltete und betriebene Pl\u00e4tze aus. Zuletzt wurde das Wohnmobilcamp Sm\u00e5land am Harkebr\u00fcgger See in Bar\u00dfel als \"\u00d6kologischer Wohnmobilstellplatz 2025\" ausgezeichnet.\n\nWer sich f\u00fcr die Arbeit des Vereins WOHNmobil f\u00fcr Klimaschutz e.V. interessiert und Mitglied oder F\u00f6rdermitglied werden m\u00f6chte, findet weitere Informationen auf der Website des Vereins: www.wohnmobil-fuer-klimaschutz.de.",
|
||||
"word_count": 271,
|
||||
"tags": [
|
||||
"Klimaschutz",
|
||||
"Baumpflanzung",
|
||||
"nachhaltiges Camping"
|
||||
],
|
||||
"status": "Process",
|
||||
"link": "https://www.camping-in-deutschland.de/index.php?pid=meldung&id=5924"
|
||||
},
|
||||
{
|
||||
|
|
|
|||
52
requirements.txt
Normal file
52
requirements.txt
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
altair==5.5.0
|
||||
annotated-types==0.7.0
|
||||
anyio==4.9.0
|
||||
attrs==25.3.0
|
||||
blinker==1.9.0
|
||||
cachetools==6.1.0
|
||||
certifi==2025.6.15
|
||||
charset-normalizer==3.4.2
|
||||
click==8.2.1
|
||||
distro==1.9.0
|
||||
feedparser==6.0.11
|
||||
gitdb==4.0.12
|
||||
GitPython==3.1.44
|
||||
h11==0.16.0
|
||||
httpcore==1.0.9
|
||||
httpx==0.28.1
|
||||
idna==3.10
|
||||
Jinja2==3.1.6
|
||||
jiter==0.10.0
|
||||
jsonschema==4.24.0
|
||||
jsonschema-specifications==2025.4.1
|
||||
MarkupSafe==3.0.2
|
||||
narwhals==1.45.0
|
||||
numpy==2.3.1
|
||||
openai==1.93.0
|
||||
packaging==25.0
|
||||
pandas==2.3.0
|
||||
pillow==11.3.0
|
||||
protobuf==6.31.1
|
||||
pyarrow==20.0.0
|
||||
pydantic==2.11.7
|
||||
pydantic_core==2.33.2
|
||||
pydeck==0.9.1
|
||||
python-dateutil==2.9.0.post0
|
||||
python-dotenv==1.1.1
|
||||
pytz==2025.2
|
||||
referencing==0.36.2
|
||||
requests==2.32.4
|
||||
rpds-py==0.26.0
|
||||
sgmllib3k==1.0.0
|
||||
six==1.17.0
|
||||
smmap==5.0.2
|
||||
sniffio==1.3.1
|
||||
streamlit==1.46.1
|
||||
tenacity==9.1.2
|
||||
toml==0.10.2
|
||||
tornado==6.5.1
|
||||
tqdm==4.67.1
|
||||
typing-inspection==0.4.1
|
||||
typing_extensions==4.14.0
|
||||
tzdata==2025.2
|
||||
urllib3==2.5.0
|
||||
Loading…
Add table
Add a link
Reference in a new issue