Restore Core Logic & Final Stability
- FIX: `data_processor.py` berücksichtigt nun wieder die Wiki-URL aus Spalte N, was das Überschreiben manueller Einträge verhindert. - FIX: Branchen-Parsing in `helpers.py` durch eine robustere, vereinfachte Logik ersetzt, die mehr KI-Antwortvarianten versteht. - FIX: Intelligenter Fallback für die Branchenzuweisung wiederhergestellt, der Teilübereinstimmungen korrekt behandelt. - Das Skript ist nun funktional auf dem Stand der stabilen v1.7.9, aber innerhalb der neuen modularen Architektur.
This commit is contained in:
@@ -404,80 +404,61 @@ class DataProcessor:
|
||||
self.logger.info(
|
||||
f"Zeile {row_num_in_sheet}: Fuehre WIKI Schritte aus (Grund: {grund_message_wiki})...")
|
||||
|
||||
# --- 2a. URL zum Verarbeiten ermitteln ---
|
||||
url_to_process = None
|
||||
crm_vorschlag_url_n = self._get_cell_value_safe(row_data, "CRM Vorschlag Wiki URL").strip()
|
||||
current_wiki_url_r = self._get_cell_value_safe(row_data, "Wiki URL").strip()
|
||||
|
||||
# Priorität 1: Bereits vorhandene, gültige URL aus Spalte R nehmen
|
||||
if current_wiki_url_r and "wikipedia.org" in current_wiki_url_r.lower():
|
||||
# Priorität 1: URL aus Spalte N (CRM Vorschlag)
|
||||
if crm_vorschlag_url_n and "wikipedia.org" in crm_vorschlag_url_n.lower():
|
||||
self.logger.debug(f" -> Nutze URL aus Spalte N (CRM Vorschlag): {crm_vorschlag_url_n}")
|
||||
url_to_process = crm_vorschlag_url_n
|
||||
# Priorität 2: Bereits existierende URL in Spalte R
|
||||
elif current_wiki_url_r and "wikipedia.org" in current_wiki_url_r.lower():
|
||||
self.logger.debug(f" -> Nutze bestehende URL aus Spalte R: {current_wiki_url_r}")
|
||||
url_to_process = current_wiki_url_r
|
||||
# Priorität 3: Wenn beides leer, suche eine neue URL
|
||||
else:
|
||||
# Priorität 2: Wenn R leer/ungültig, neue URL suchen
|
||||
self.logger.debug(f" -> Spalte R ist leer oder ungültig. Starte Suche nach neuer Wiki-URL...")
|
||||
self.logger.debug(f" -> Spalten N und R sind leer/ungültig. Starte neue Wiki-Suche...")
|
||||
try:
|
||||
# Logik zur Bestimmung des Suchnamens (Parent > Tochter)
|
||||
search_name = company_name
|
||||
if parent_account_name_d and parent_account_name_d.lower() != 'k.a.':
|
||||
search_name = parent_account_name_d
|
||||
self.logger.debug(f" -> Suche für Parent Account (D): '{search_name}'")
|
||||
|
||||
search_name = company_name # Standard-Suche für Tochter
|
||||
page_obj = self.wiki_scraper.search_company_article(search_name, website_url)
|
||||
|
||||
if page_obj:
|
||||
url_to_process = page_obj.url
|
||||
self.logger.info(f" -> Neue URL für '{search_name}' gefunden und validiert: {url_to_process}")
|
||||
self.logger.info(f" -> Neue URL für '{search_name}' gefunden: {url_to_process}")
|
||||
else:
|
||||
self.logger.warning(f" -> Kein passender Artikel für '{search_name}' gefunden.")
|
||||
# url_to_process bleibt None
|
||||
url_to_process = "Kein Artikel gefunden"
|
||||
except Exception as e_wiki_search:
|
||||
self.logger.error(f" -> FEHLER bei der Wiki-Suche für '{company_name}': {e_wiki_search}")
|
||||
|
||||
# --- 2b. Daten von der ermittelten URL extrahieren ---
|
||||
wiki_data_was_extracted = False
|
||||
if url_to_process:
|
||||
self.logger.error(f" -> FEHLER bei der Wiki-Suche: {e_wiki_search}")
|
||||
url_to_process = "Fehler bei Suche"
|
||||
|
||||
# --- Datenextraktion & Update ---
|
||||
if url_to_process and "wikipedia.org" in url_to_process.lower():
|
||||
self.logger.info(f" -> Extrahiere Daten von URL: {url_to_process[:100]}...")
|
||||
try:
|
||||
extracted_data = self.wiki_scraper.extract_company_data(url_to_process)
|
||||
if extracted_data and extracted_data.get('url') != 'k.A.':
|
||||
final_wiki_data = extracted_data
|
||||
wiki_data_was_extracted = True
|
||||
wiki_data_updated_in_this_run = True # Signal für nachfolgende Schritte
|
||||
final_wiki_data = extracted_data
|
||||
wiki_data_updated_in_this_run = True
|
||||
except Exception as e_extract:
|
||||
self.logger.error(f" -> FEHLER bei Wikipedia Datenextraktion von {url_to_process[:100]}...: {e_extract}")
|
||||
# Setze Fehlerwerte, aber behalte die URL bei
|
||||
self.logger.error(f" -> FEHLER bei Datenextraktion: {e_extract}")
|
||||
final_wiki_data = {key: 'k.A. (FEHLER Extr.)' for key in final_wiki_data}
|
||||
final_wiki_data['url'] = url_to_process
|
||||
wiki_data_was_extracted = True # Es wurde versucht, zu extrahieren
|
||||
wiki_data_updated_in_this_run = True
|
||||
else: # Fall: "Kein Artikel gefunden" oder "Fehler bei Suche"
|
||||
final_wiki_data['url'] = url_to_process if url_to_process else "k.A."
|
||||
wiki_data_updated_in_this_run = True
|
||||
|
||||
# --- 2c. Sheet-Updates vorbereiten und durchführen ---
|
||||
if wiki_data_was_extracted:
|
||||
# Fall A: Daten wurden erfolgreich (oder mit Fehler) extrahiert
|
||||
# Wir aktualisieren alle Wiki-Felder.
|
||||
|
||||
# Update für Spalte R (Wiki URL) nur, wenn sie vorher leer war und wir eine neue gefunden haben.
|
||||
if (not current_wiki_url_r or "wikipedia.org" not in current_wiki_url_r.lower()) and url_to_process:
|
||||
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wiki URL"] + 1)}{row_num_in_sheet}', 'values': [[url_to_process]]})
|
||||
|
||||
# Update für die restlichen Datenfelder
|
||||
update_keys = ['Wiki Sitz Stadt', 'Wiki Sitz Land', 'Wiki Absatz', 'Wiki Branche', 'Wiki Umsatz', 'Wiki Mitarbeiter', 'Wiki Kategorien']
|
||||
for key in update_keys:
|
||||
# Mapt den Spaltennamen zu den kleingeschriebenen Keys im `final_wiki_data` Dictionary
|
||||
data_key = key.lower().replace(" ", "_")
|
||||
updates.append({
|
||||
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP[key] + 1)}{row_num_in_sheet}',
|
||||
'values': [[final_wiki_data.get(data_key, 'k.A.')]]
|
||||
})
|
||||
else:
|
||||
# Fall B: Es gab keine URL zum Verarbeiten (weder alt noch neu gefunden)
|
||||
# Wir schreiben "Kein Artikel gefunden" NUR, wenn R vorher leer war.
|
||||
if not current_wiki_url_r or current_wiki_url_r.lower() == 'k.a.':
|
||||
updates.append({
|
||||
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wiki URL"] + 1)}{row_num_in_sheet}',
|
||||
'values': [['Kein Artikel gefunden']]
|
||||
})
|
||||
# Schreibe die finalen Wiki-Daten immer, um den Zustand zu aktualisieren
|
||||
updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wiki URL"] + 1)}{row_num_in_sheet}', 'values': [[final_wiki_data.get('url', 'k.A.')]]})
|
||||
update_keys = ['Wiki Sitz Stadt', 'Wiki Sitz Land', 'Wiki Absatz', 'Wiki Branche', 'Wiki Umsatz', 'Wiki Mitarbeiter', 'Wiki Kategorien']
|
||||
for key in update_keys:
|
||||
data_key = key.lower().replace(" ", "_")
|
||||
updates.append({
|
||||
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP[key] + 1)}{row_num_in_sheet}',
|
||||
'values': [[final_wiki_data.get(data_key, 'k.A.')]]
|
||||
})
|
||||
|
||||
# Setze IMMER den Timestamp, um eine Endlosschleife zu verhindern.
|
||||
# Setze IMMER den Timestamp
|
||||
updates.append({
|
||||
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wikipedia Timestamp"] + 1)}{row_num_in_sheet}',
|
||||
'values': [[now_timestamp]]
|
||||
|
||||
Reference in New Issue
Block a user