Fix: term_exists Fehler - Nutze term_id aus WordPress-Fehlerantwort
Problem: - Tags/Kategorien wurden als existierend erkannt, aber nicht dem Beitrag zugewiesen - WordPress-API gibt bei 'term_exists'-Fehler die term_id in den Fehler-Daten zurück - Diese term_id wurde nicht genutzt, stattdessen wurde nur erneut gesucht Lösung: - Extrahiere term_id direkt aus error_data['data']['term_id'] - Bei term_exists-Code: Nutze die zurückgegebene term_id - Fallback: Suche erneut falls Extraktion fehlschlägt - Gezielte Suche mit 'search'-Parameter für bessere Performance Verbesserungen: - get_tags() und get_categories() mit optionalem search-Parameter - Debug-Ausgaben: '→ Tag gefunden' statt nur bei Erstellung - Reduziert API-Calls durch gezielte Suche Expected Output: Tags aus Frontmatter: ['OER', 'OEP', ...] → Tag 'OER' gefunden (ID: 3866) → Tag 'OEP' existiert bereits (ID: 3867) Gesamt Tag-IDs: [3866, 3867, ...]
This commit is contained in:
parent
74cb36b127
commit
4bac1ad597
1 changed files with 54 additions and 12 deletions
|
|
@ -257,10 +257,18 @@ class WordPressAPI:
|
|||
print(f"Details: {e.response.text}")
|
||||
return None
|
||||
|
||||
def get_categories(self) -> List[Dict[str, Any]]:
|
||||
"""Holt alle verfügbaren Kategorien"""
|
||||
def get_categories(self, search: Optional[str] = None) -> List[Dict[str, Any]]:
|
||||
"""
|
||||
Holt alle verfügbaren Kategorien oder sucht nach einer bestimmten Kategorie
|
||||
|
||||
Args:
|
||||
search: Optionaler Suchbegriff
|
||||
"""
|
||||
try:
|
||||
response = self._get('categories', params={'per_page': 100})
|
||||
params = {'per_page': 100}
|
||||
if search:
|
||||
params['search'] = search
|
||||
response = self._get('categories', params=params)
|
||||
return response.json()
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"Fehler beim Abrufen der Kategorien: {e}")
|
||||
|
|
@ -268,9 +276,11 @@ class WordPressAPI:
|
|||
|
||||
def get_or_create_category(self, name: str) -> Optional[int]:
|
||||
"""Holt oder erstellt eine Kategorie"""
|
||||
categories = self.get_categories()
|
||||
# Erst gezielt nach dieser Kategorie suchen
|
||||
categories = self.get_categories(search=name)
|
||||
for cat in categories:
|
||||
if cat['name'].lower() == name.lower():
|
||||
print(f" → Kategorie '{name}' gefunden (ID: {cat['id']})")
|
||||
return cat['id']
|
||||
|
||||
# Kategorie erstellen
|
||||
|
|
@ -280,12 +290,23 @@ class WordPressAPI:
|
|||
except requests.exceptions.RequestException as 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
|
||||
try:
|
||||
error_data = e.response.json()
|
||||
# WordPress gibt bei 'term_exists' die term_id zurück!
|
||||
if error_data.get('code') == 'term_exists':
|
||||
term_id = error_data.get('data', {}).get('term_id')
|
||||
if term_id:
|
||||
print(f" → Kategorie '{name}' existiert bereits (ID: {term_id})")
|
||||
return term_id
|
||||
except:
|
||||
pass
|
||||
|
||||
# Fallback: 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:
|
||||
|
|
@ -295,10 +316,18 @@ class WordPressAPI:
|
|||
print(f"Response: {e.response.text}")
|
||||
return None
|
||||
|
||||
def get_tags(self) -> List[Dict[str, Any]]:
|
||||
"""Holt alle verfügbaren Tags"""
|
||||
def get_tags(self, search: Optional[str] = None) -> List[Dict[str, Any]]:
|
||||
"""
|
||||
Holt alle verfügbaren Tags oder sucht nach einem bestimmten Tag
|
||||
|
||||
Args:
|
||||
search: Optionaler Suchbegriff
|
||||
"""
|
||||
try:
|
||||
response = self._get('tags', params={'per_page': 100})
|
||||
params = {'per_page': 100}
|
||||
if search:
|
||||
params['search'] = search
|
||||
response = self._get('tags', params=params)
|
||||
return response.json()
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"Fehler beim Abrufen der Tags: {e}")
|
||||
|
|
@ -306,9 +335,11 @@ class WordPressAPI:
|
|||
|
||||
def get_or_create_tag(self, name: str) -> Optional[int]:
|
||||
"""Holt oder erstellt einen Tag"""
|
||||
tags = self.get_tags()
|
||||
# Erst gezielt nach diesem Tag suchen
|
||||
tags = self.get_tags(search=name)
|
||||
for tag in tags:
|
||||
if tag['name'].lower() == name.lower():
|
||||
print(f" → Tag '{name}' gefunden (ID: {tag['id']})")
|
||||
return tag['id']
|
||||
|
||||
# Tag erstellen
|
||||
|
|
@ -318,12 +349,23 @@ class WordPressAPI:
|
|||
except requests.exceptions.RequestException as 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
|
||||
try:
|
||||
error_data = e.response.json()
|
||||
# WordPress gibt bei 'term_exists' die term_id zurück!
|
||||
if error_data.get('code') == 'term_exists':
|
||||
term_id = error_data.get('data', {}).get('term_id')
|
||||
if term_id:
|
||||
print(f" → Tag '{name}' existiert bereits (ID: {term_id})")
|
||||
return term_id
|
||||
except:
|
||||
pass
|
||||
|
||||
# Fallback: 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:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue