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:
parent
7a234be652
commit
9ba1aa7b10
4 changed files with 169 additions and 8 deletions
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue