Import von WordPress-Beiträgen aus MarkDown inkl YAML-Metadaten via URL
Find a file
2025-10-01 06:28:35 +02:00
content Initial commit: WordPress News Import System 2025-10-01 06:16:10 +02:00
.env.example Initial commit: WordPress News Import System 2025-10-01 06:16:10 +02:00
.gitattributes Add QUICKSTART guide and .gitattributes 2025-10-01 06:17:58 +02:00
.gitignore Initial commit: WordPress News Import System 2025-10-01 06:16:10 +02:00
posts.yaml venv anleitung 2025-10-01 06:28:35 +02:00
QUICKSTART.md venv anleitung 2025-10-01 06:28:35 +02:00
README.md venv anleitung 2025-10-01 06:28:35 +02:00
requirements.txt Initial commit: WordPress News Import System 2025-10-01 06:16:10 +02:00
wordpress_api.py Initial commit: WordPress News Import System 2025-10-01 06:16:10 +02:00
workflow.py Initial commit: WordPress News Import System 2025-10-01 06:16:10 +02:00

WordPress News Import

Automatisierter Workflow zum Erstellen von WordPress-Beiträgen aus Markdown-Dateien über die WordPress REST-API.

Features

  • Duplikatsprüfung: Verhindert das doppelte Erstellen von Beiträgen und Medien
  • Markdown zu HTML: Automatische Konvertierung von Markdown-Inhalten
  • Medien-Upload: Hochladen von Beitragsbildern mit Duplikatsprüfung
  • Kategorien & Tags: Automatische Erstellung fehlender Kategorien und Tags
  • Flexible Quellen: Unterstützt Markdown-URLs und lokale Dateien
  • YAML-Konfiguration: Einfache Verwaltung mehrerer Beiträge

Voraussetzungen

  • Python 3.7 oder höher
  • WordPress-Installation mit aktivierter REST-API
  • WordPress Anwendungspasswort (Application Password)

Installation

  1. Repository klonen oder herunterladen

  2. Virtuelle Umgebung aktivieren

    source .venv/bin/activate
    

    Sie sollten jetzt (.venv) am Anfang Ihrer Kommandozeile sehen.

  3. Python-Abhängigkeiten installieren

    pip install -r requirements.txt
    
  4. Umgebungsvariablen konfigurieren

    Kopieren Sie .env.example zu .env und tragen Sie Ihre Credentials ein:

    cp .env.example .env
    

    Bearbeiten Sie .env:

    WORDPRESS_URL=https://news.rpi-virtuell.de
    WORDPRESS_USERNAME=ihr_benutzername
    WORDPRESS_APP_PASSWORD=UIVI 4Tdy oojL 9iZG g3X2 iAn5
    

WordPress Anwendungspasswort erstellen

  1. Melden Sie sich in WordPress an
  2. Gehen Sie zu Benutzer → Profil
  3. Scrollen Sie zu Anwendungspasswörter
  4. Geben Sie einen Namen ein (z.B. "News Import")
  5. Klicken Sie auf Neues Anwendungspasswort hinzufügen
  6. Kopieren Sie das generierte Passwort in Ihre .env-Datei

Verwendung

1. YAML-Konfiguration erstellen

Erstellen Sie eine posts.yaml-Datei mit Ihren Beiträgen:

posts:
  - title: "Mein erster Beitrag"
    markdown_url: "https://raw.githubusercontent.com/user/repo/main/post.md"
    status: "draft"  # draft, publish, pending, private
    categories:
      - "News"
      - "Tutorials"
    tags:
      - "WordPress"
      - "API"
    featured_image: "images/header.jpg"
    excerpt: "Eine kurze Zusammenfassung"
    
  - title: "Lokaler Beitrag"
    markdown_file: "content/local-post.md"
    status: "publish"
    categories:
      - "Updates"

settings:
  default_status: "draft"
  skip_duplicates: true
  skip_duplicate_media: true

2. Workflow ausführen

Aktivieren Sie zuerst die virtuelle Umgebung:

source .venv/bin/activate

Dann führen Sie das Workflow-Script aus:

python workflow.py posts.yaml

Oder ohne Angabe der Datei (verwendet posts.yaml als Standard):

python workflow.py

Struktur

newsimport/
├── .env                    # Credentials (nicht in Git!)
├── .env.example            # Beispiel-Konfiguration
├── .gitignore              # Git-Ignorier-Liste
├── requirements.txt        # Python-Abhängigkeiten
├── wordpress_api.py        # WordPress REST-API Client
├── workflow.py             # Haupt-Workflow Script
├── posts.yaml              # Beitrags-Konfiguration
├── README.md               # Diese Datei
├── content/                # Lokale Markdown-Dateien (optional)
│   └── *.md
└── images/                 # Lokale Bilder (optional)
    └── *.jpg/png

API-Funktionen

WordPress API Client (wordpress_api.py)

from wordpress_api import WordPressAPI

# API initialisieren
wp = WordPressAPI(url, username, app_password)

# Beitrag erstellen (mit Duplikatsprüfung)
post_id = wp.create_post(
    title="Titel",
    content="<p>HTML-Inhalt</p>",
    status="publish",
    check_duplicate=True
)

# Medien hochladen (mit Duplikatsprüfung)
media_id = wp.upload_media(
    file_path="bild.jpg",
    title="Bild-Titel",
    alt_text="Alt-Text",
    check_duplicate=True
)

# Kategorie holen oder erstellen
cat_id = wp.get_or_create_category("News")

# Tag holen oder erstellen
tag_id = wp.get_or_create_tag("WordPress")

# Auf Duplikate prüfen
existing_post_id = wp.check_post_exists("Titel")
existing_media_id = wp.check_media_exists("bild.jpg")

YAML-Konfiguration

Beitrags-Felder

  • title (erforderlich): Titel des Beitrags
  • markdown_url: URL zur Markdown-Datei
  • markdown_file: Pfad zu lokaler Markdown-Datei
  • content: Direkter Markdown-Inhalt
  • status: draft, publish, pending, private
  • categories: Liste von Kategorie-Namen
  • tags: Liste von Tag-Namen
  • featured_image: Pfad oder URL zum Beitragsbild
  • excerpt: Kurze Zusammenfassung
  • author: Autor-Username

Globale Einstellungen

settings:
  default_status: "draft"           # Standard-Status für Beiträge
  default_author: "admin"           # Standard-Autor
  skip_duplicates: true             # Bestehende Beiträge überspringen
  skip_duplicate_media: true        # Bestehende Medien überspringen
  markdown_extensions:              # Markdown-Erweiterungen
    - tables
    - fenced_code
    - footnotes

Duplikatsprüfung

Beiträge

Das System prüft vor dem Erstellen, ob ein Beitrag mit dem gleichen Titel bereits existiert. Falls ja, wird die bestehende Post-ID zurückgegeben und kein neuer Beitrag erstellt.

Medien

Vor dem Upload wird geprüft, ob eine Datei mit dem gleichen Namen bereits existiert. Falls ja, wird die bestehende Media-ID verwendet.

Beispiele

Beispiel 1: Einfacher Beitrag von URL

posts:
  - title: "News Update"
    markdown_url: "https://example.com/news.md"
    status: "publish"

Beispiel 2: Beitrag mit Kategorien, Tags und Bild

posts:
  - title: "Tutorial: WordPress REST-API"
    markdown_url: "https://example.com/tutorial.md"
    status: "draft"
    categories:
      - "Tutorials"
      - "WordPress"
    tags:
      - "REST-API"
      - "Entwicklung"
      - "PHP"
    featured_image: "https://example.com/images/header.jpg"
    excerpt: "Lernen Sie die WordPress REST-API kennen"

Beispiel 3: Lokale Dateien

posts:
  - title: "Lokaler Inhalt"
    markdown_file: "content/article.md"
    status: "publish"
    featured_image: "images/local-image.jpg"

Fehlerbehebung

Authentifizierungsfehler

Problem: 401 Unauthorized

Lösung:

  • Überprüfen Sie Username und Anwendungspasswort in .env
  • Stellen Sie sicher, dass das Anwendungspasswort korrekt ist (keine zusätzlichen Leerzeichen)
  • Verifizieren Sie, dass die WordPress REST-API aktiviert ist

Keine Verbindung zu WordPress

Problem: Connection refused oder Timeout

Lösung:

  • Überprüfen Sie die WORDPRESS_URL in .env
  • Stellen Sie sicher, dass WordPress erreichbar ist
  • Prüfen Sie Firewall-Einstellungen

Markdown wird nicht konvertiert

Problem: Markdown-Syntax erscheint im Beitrag

Lösung:

  • Überprüfen Sie, ob markdown installiert ist: pip install markdown
  • Prüfen Sie die Markdown-Syntax in der Quelldatei

Import-Fehler bei Modulen

Problem: ModuleNotFoundError: No module named 'requests'

Lösung:

pip install -r requirements.txt

Sicherheit

⚠️ Wichtig:

  • Committen Sie niemals die .env-Datei mit echten Credentials in Git!
  • Die .gitignore ist bereits so konfiguriert, dass .env ignoriert wird
  • Verwenden Sie .env.example als Vorlage für andere Nutzer

Lizenz

Dieses Projekt steht unter der MIT-Lizenz.

Support

Bei Problemen oder Fragen erstellen Sie bitte ein Issue im Repository.


Hinweis: Dieses Tool wurde für https://news.rpi-virtuell.de entwickelt, funktioniert aber mit jeder WordPress-Installation, die die REST-API unterstützt.