Bugfix: Tag-Duplikate, Post-Duplikate und Veröffentlichungsdatum

Fixes:
- Tag/Kategorie-Erstellung: Bessere Fehlerbehandlung für bereits existierende Tags
- Post-Duplikatsprüfung: Verbesserte Suche mit status='any' und case-insensitive Vergleich
- Veröffentlichungsdatum: datePublished aus Frontmatter wird als WordPress-Datum gesetzt
- Erweiterte Datumsextraktion aus verschiedenen Frontmatter-Strukturen

Neue Datei:
- USAGE_MODES.md: Übersicht der drei Verwendungsmodi
This commit is contained in:
Jörg Lohrer 2025-10-01 08:30:07 +02:00
parent 7a234be652
commit 9ba1aa7b10
4 changed files with 169 additions and 8 deletions

View file

@ -57,13 +57,31 @@ class WordPressAPI:
Post-ID wenn gefunden, sonst None
"""
try:
response = self._get('posts', params={'search': title, 'per_page': 10})
# Suche mit verschiedenen Parametern
response = self._get('posts', params={
'search': title,
'per_page': 100, # Erhöht für bessere Suche
'status': 'any' # Alle Status (draft, publish, etc.)
})
posts = response.json()
# Normalisiere Titel für Vergleich
title_lower = title.lower().strip()
# Exakte Übereinstimmung prüfen
for post in posts:
if post.get('title', {}).get('rendered', '') == title:
# Prüfe rendered Titel
rendered_title = post.get('title', {}).get('rendered', '').strip()
if rendered_title.lower() == title_lower:
print(f" → Beitrag gefunden (ID: {post['id']}, Status: {post['status']})")
return post['id']
# Prüfe auch raw Titel falls vorhanden
raw_title = post.get('title', {}).get('raw', '').strip()
if raw_title and raw_title.lower() == title_lower:
print(f" → Beitrag gefunden (ID: {post['id']}, Status: {post['status']})")
return post['id']
return None
except requests.exceptions.RequestException as e:
print(f"Fehler bei der Suche nach Beitrag: {e}")
@ -241,7 +259,21 @@ class WordPressAPI:
response = self._post('categories', data={'name': name})
return response.json()['id']
except requests.exceptions.RequestException as e:
print(f"Fehler beim Erstellen der Kategorie: {e}")
# Prüfe ob Fehler durch bereits existierende Kategorie
if e.response is not None and e.response.status_code == 400:
# Kategorie könnte durch Race Condition gerade erstellt worden sein
# Erneut suchen
categories = self.get_categories()
for cat in categories:
if cat['name'].lower() == name.lower():
return cat['id']
print(f"Fehler beim Erstellen der Kategorie '{name}': {e}")
if hasattr(e, 'response') and e.response is not None:
try:
error_data = e.response.json()
print(f"Details: {error_data}")
except:
print(f"Response: {e.response.text}")
return None
def get_tags(self) -> List[Dict[str, Any]]:
@ -265,7 +297,21 @@ class WordPressAPI:
response = self._post('tags', data={'name': name})
return response.json()['id']
except requests.exceptions.RequestException as e:
print(f"Fehler beim Erstellen des Tags: {e}")
# Prüfe ob Fehler durch bereits existierenden Tag
if e.response is not None and e.response.status_code == 400:
# Tag könnte durch Race Condition gerade erstellt worden sein
# Erneut suchen
tags = self.get_tags()
for tag in tags:
if tag['name'].lower() == name.lower():
return tag['id']
print(f"Fehler beim Erstellen des Tags '{name}': {e}")
if hasattr(e, 'response') and e.response is not None:
try:
error_data = e.response.json()
print(f"Details: {error_data}")
except:
print(f"Response: {e.response.text}")
return None