bugfix
This commit is contained in:
@@ -319,7 +319,7 @@ def process_find_wiki_with_serp(sheet_handler, row_limit=None, min_employees=500
|
|||||||
"""
|
"""
|
||||||
Sucht fehlende Wikipedia-URLs (Spalte M = k.A.) für Unternehmen mit > min_employees
|
Sucht fehlende Wikipedia-URLs (Spalte M = k.A.) für Unternehmen mit > min_employees
|
||||||
über SerpAPI und trägt gefundene URLs in Spalte M ein. Setzt ReEval-Flag (A)
|
über SerpAPI und trägt gefundene URLs in Spalte M ein. Setzt ReEval-Flag (A)
|
||||||
und löscht Timestamps (AN, AO) für gefundene Einträge.
|
und löscht abhängige Wiki-Spalten (N-V, AN, AO, AP, AX).
|
||||||
Merkt sich in Spalte AY, wann die Suche durchgeführt wurde.
|
Merkt sich in Spalte AY, wann die Suche durchgeführt wurde.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@@ -337,16 +337,27 @@ def process_find_wiki_with_serp(sheet_handler, row_limit=None, min_employees=500
|
|||||||
header_rows = 5
|
header_rows = 5
|
||||||
data_rows = all_data[header_rows:]
|
data_rows = all_data[header_rows:]
|
||||||
|
|
||||||
# Benötigte Spaltenindizes holen (inkl. neuer Spalte AY)
|
# Benötigte Spaltenindizes holen (inkl. aller zu löschenden Spalten)
|
||||||
try:
|
try:
|
||||||
col_indices = {
|
col_indices = {
|
||||||
"A": COLUMN_MAP["ReEval Flag"],
|
"A": COLUMN_MAP["ReEval Flag"],
|
||||||
"K": COLUMN_MAP["CRM Anzahl Mitarbeiter"],
|
"K": COLUMN_MAP["CRM Anzahl Mitarbeiter"],
|
||||||
"M": COLUMN_MAP["Wiki URL"],
|
"M": COLUMN_MAP["Wiki URL"],
|
||||||
"B": COLUMN_MAP["CRM Name"],
|
"B": COLUMN_MAP["CRM Name"],
|
||||||
|
"N": COLUMN_MAP["Wiki Absatz"], # NEU zum Löschen
|
||||||
|
"O": COLUMN_MAP["Wiki Branche"], # NEU zum Löschen
|
||||||
|
"P": COLUMN_MAP["Wiki Umsatz"], # NEU zum Löschen
|
||||||
|
"Q": COLUMN_MAP["Wiki Mitarbeiter"], # NEU zum Löschen
|
||||||
|
"R": COLUMN_MAP["Wiki Kategorien"], # NEU zum Löschen
|
||||||
|
"S": COLUMN_MAP["Chat Wiki Konsistenzprüfung"], # NEU zum Löschen
|
||||||
|
"T": COLUMN_MAP["Chat Begründung Wiki Inkonsistenz"], # NEU zum Löschen
|
||||||
|
"U": COLUMN_MAP["Chat Vorschlag Wiki Artikel"], # NEU zum Löschen
|
||||||
|
"V": COLUMN_MAP["Begründung bei Abweichung"], # NEU zum Löschen
|
||||||
"AN": COLUMN_MAP["Wikipedia Timestamp"],
|
"AN": COLUMN_MAP["Wikipedia Timestamp"],
|
||||||
"AO": COLUMN_MAP["Timestamp letzte Prüfung"],
|
"AO": COLUMN_MAP["Timestamp letzte Prüfung"],
|
||||||
"AY": COLUMN_MAP["SerpAPI Wiki Search Timestamp"] # <-- NEU
|
"AP": COLUMN_MAP["Version"], # NEU zum Löschen
|
||||||
|
"AX": COLUMN_MAP["Wiki Verif. Timestamp"], # NEU zum Löschen
|
||||||
|
"AY": COLUMN_MAP["SerpAPI Wiki Search Timestamp"]
|
||||||
}
|
}
|
||||||
col_letters = {key: sheet_handler._get_col_letter(idx + 1) for key, idx in col_indices.items()}
|
col_letters = {key: sheet_handler._get_col_letter(idx + 1) for key, idx in col_indices.items()}
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
@@ -356,14 +367,13 @@ def process_find_wiki_with_serp(sheet_handler, row_limit=None, min_employees=500
|
|||||||
logging.critical(f"FEHLER beim Holen der Spaltenbuchstaben: {e}")
|
logging.critical(f"FEHLER beim Holen der Spaltenbuchstaben: {e}")
|
||||||
return
|
return
|
||||||
|
|
||||||
# --- HIER WIRD all_sheet_updates definiert ---
|
|
||||||
all_sheet_updates = []
|
all_sheet_updates = []
|
||||||
processed_rows = 0 # Zählt Zeilen, für die eine Suche durchgeführt wurde
|
processed_rows = 0
|
||||||
found_urls = 0 # Zählt Zeilen, wo eine URL gefunden wurde
|
found_urls = 0
|
||||||
skipped_timestamp_ay = 0 # Zählt Zeilen, die übersprungen wurden, weil AY gesetzt war
|
skipped_timestamp_ay = 0
|
||||||
skipped_employee_count = 0
|
skipped_employee_count = 0
|
||||||
skipped_m_filled_count = 0
|
skipped_m_filled_count = 0
|
||||||
now_timestamp_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # Einmaliger Timestamp für diesen Lauf
|
now_timestamp_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
|
||||||
for idx, row in enumerate(data_rows):
|
for idx, row in enumerate(data_rows):
|
||||||
row_num_in_sheet = idx + header_rows + 1
|
row_num_in_sheet = idx + header_rows + 1
|
||||||
@@ -372,18 +382,14 @@ def process_find_wiki_with_serp(sheet_handler, row_limit=None, min_employees=500
|
|||||||
logging.info(f"Zeilenlimit ({row_limit}) für durchgeführte Suchen erreicht.")
|
logging.info(f"Zeilenlimit ({row_limit}) für durchgeführte Suchen erreicht.")
|
||||||
break
|
break
|
||||||
|
|
||||||
# --- NEUE PRÜFUNG: Wurde diese Zeile schon via SerpAPI geprüft? ---
|
# Prüfe AY Timestamp
|
||||||
ts_ay_val = row[col_indices["AY"]] if len(row) > col_indices["AY"] else ""
|
ts_ay_val = row[col_indices["AY"]] if len(row) > col_indices["AY"] else ""
|
||||||
if ts_ay_val and ts_ay_val.strip():
|
if ts_ay_val and ts_ay_val.strip():
|
||||||
skipped_timestamp_ay += 1
|
skipped_timestamp_ay += 1
|
||||||
# Optional: Debug Log
|
continue
|
||||||
# logging.debug(f"Zeile {row_num_in_sheet}: Übersprungen (SerpAPI Wiki Search Timestamp AY bereits gesetzt: '{ts_ay_val}').")
|
|
||||||
continue # Nächste Zeile, diese wurde schon geprüft
|
|
||||||
# --- ENDE NEUE PRÜFUNG ---
|
|
||||||
|
|
||||||
# Prüfe, ob Zeile überhaupt verarbeitet werden soll
|
|
||||||
try:
|
try:
|
||||||
# 1. Mitarbeiterzahl prüfen
|
# Mitarbeiterzahl prüfen
|
||||||
ma_val_str = row[col_indices["K"]] if len(row) > col_indices["K"] else "0"
|
ma_val_str = row[col_indices["K"]] if len(row) > col_indices["K"] else "0"
|
||||||
try:
|
try:
|
||||||
ma_val_str_cleaned = re.sub(r"[^\d]", "", ma_val_str)
|
ma_val_str_cleaned = re.sub(r"[^\d]", "", ma_val_str)
|
||||||
@@ -394,60 +400,66 @@ def process_find_wiki_with_serp(sheet_handler, row_limit=None, min_employees=500
|
|||||||
skipped_employee_count += 1
|
skipped_employee_count += 1
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# 2. Prüfen, ob Wiki URL (M) leer oder "k.A." ist
|
# Wiki URL (M) prüfen
|
||||||
m_value = row[col_indices["M"]] if len(row) > col_indices["M"] else ""
|
m_value = row[col_indices["M"]] if len(row) > col_indices["M"] else ""
|
||||||
# Prüfe auf leer UND 'k.a.' (case-insensitive)
|
|
||||||
if m_value and m_value.strip().lower() != "k.a.":
|
if m_value and m_value.strip().lower() != "k.a.":
|
||||||
skipped_m_filled_count += 1
|
skipped_m_filled_count += 1
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Wenn wir hier sind, ist die Zeile ein Kandidat FÜR DIESEN LAUF
|
# Kandidat gefunden
|
||||||
company_name = row[col_indices["B"]] if len(row) > col_indices["B"] else ""
|
company_name = row[col_indices["B"]] if len(row) > col_indices["B"] else ""
|
||||||
if not company_name:
|
if not company_name:
|
||||||
logging.warning(f"Zeile {row_num_in_sheet}: Übersprungen, kein Firmenname für Suche vorhanden.")
|
logging.warning(f"Zeile {row_num_in_sheet}: Übersprungen, kein Firmenname für Suche vorhanden.")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# --- SerpAPI Suche durchführen ---
|
# SerpAPI Suche
|
||||||
logging.info(f"Zeile {row_num_in_sheet}: Suche Wiki-URL für '{company_name}' (MA: {ma_val})...")
|
logging.info(f"Zeile {row_num_in_sheet}: Suche Wiki-URL für '{company_name}' (MA: {ma_val})...")
|
||||||
wiki_url_found = serp_wikipedia_lookup(company_name) # Annahme: nutzt logging
|
wiki_url_found = serp_wikipedia_lookup(company_name)
|
||||||
processed_rows += 1 # Zähle die durchgeführte Suche
|
processed_rows += 1
|
||||||
time.sleep(1.5) # Pause zwischen SerpAPI-Aufrufen
|
time.sleep(1.5)
|
||||||
|
|
||||||
# --- Updates vorbereiten ---
|
# Updates vorbereiten
|
||||||
# Timestamp AY IMMER setzen, um die Suche zu markieren
|
# Timestamp AY IMMER setzen
|
||||||
row_updates = [{'range': f'{col_letters["AY"]}{row_num_in_sheet}', 'values': [[now_timestamp_str]]}]
|
row_updates = [{'range': f'{col_letters["AY"]}{row_num_in_sheet}', 'values': [[now_timestamp_str]]}]
|
||||||
|
|
||||||
if wiki_url_found:
|
if wiki_url_found:
|
||||||
logging.info(f" -> URL gefunden: {wiki_url_found}. Bereite Update vor.")
|
logging.info(f" -> URL gefunden: {wiki_url_found}. Bereite Update vor (Setze M, A; Lösche N-V, AN, AO, AP, AX).")
|
||||||
found_urls += 1
|
found_urls += 1
|
||||||
# Zusätzliche Updates nur, wenn URL gefunden wurde
|
# Zusätzliche Updates für gefundene URL
|
||||||
row_updates.extend([
|
row_updates.extend([
|
||||||
{'range': f'{col_letters["M"]}{row_num_in_sheet}', 'values': [[wiki_url_found]]},
|
{'range': f'{col_letters["M"]}{row_num_in_sheet}', 'values': [[wiki_url_found]]}, # URL setzen
|
||||||
{'range': f'{col_letters["A"]}{row_num_in_sheet}', 'values': [['x']]},
|
{'range': f'{col_letters["A"]}{row_num_in_sheet}', 'values': [['x']]}, # ReEval Flag
|
||||||
|
# --- Spalten leeren ---
|
||||||
|
{'range': f'{col_letters["N"]}{row_num_in_sheet}', 'values': [['']]},
|
||||||
|
{'range': f'{col_letters["O"]}{row_num_in_sheet}', 'values': [['']]},
|
||||||
|
{'range': f'{col_letters["P"]}{row_num_in_sheet}', 'values': [['']]},
|
||||||
|
{'range': f'{col_letters["Q"]}{row_num_in_sheet}', 'values': [['']]},
|
||||||
|
{'range': f'{col_letters["R"]}{row_num_in_sheet}', 'values': [['']]},
|
||||||
|
{'range': f'{col_letters["S"]}{row_num_in_sheet}', 'values': [['']]},
|
||||||
|
{'range': f'{col_letters["T"]}{row_num_in_sheet}', 'values': [['']]},
|
||||||
|
{'range': f'{col_letters["U"]}{row_num_in_sheet}', 'values': [['']]},
|
||||||
|
{'range': f'{col_letters["V"]}{row_num_in_sheet}', 'values': [['']]},
|
||||||
{'range': f'{col_letters["AN"]}{row_num_in_sheet}', 'values': [['']]},
|
{'range': f'{col_letters["AN"]}{row_num_in_sheet}', 'values': [['']]},
|
||||||
{'range': f'{col_letters["AO"]}{row_num_in_sheet}', 'values': [['']]}
|
{'range': f'{col_letters["AO"]}{row_num_in_sheet}', 'values': [['']]},
|
||||||
|
{'range': f'{col_letters["AP"]}{row_num_in_sheet}', 'values': [['']]},
|
||||||
|
{'range': f'{col_letters["AX"]}{row_num_in_sheet}', 'values': [['']]}
|
||||||
])
|
])
|
||||||
else:
|
else:
|
||||||
logging.info(f" -> Keine Wiki-URL für '{company_name}' via SerpAPI gefunden.")
|
logging.info(f" -> Keine Wiki-URL für '{company_name}' via SerpAPI gefunden.")
|
||||||
# Optional: Marker in M schreiben? Vorerst nicht, AY reicht.
|
# Nur AY Timestamp wird geschrieben
|
||||||
# row_updates.append({'range': f'{col_letters["M"]}{row_num_in_sheet}', 'values': [['k.A. (SerpAPI Searched)']]})
|
|
||||||
|
|
||||||
# Füge die Updates für diese Zeile zur Gesamtliste hinzu
|
|
||||||
all_sheet_updates.extend(row_updates)
|
all_sheet_updates.extend(row_updates)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
# Logge Fehler und fahre mit der nächsten Zeile fort
|
|
||||||
logging.exception(f"Unerwarteter Fehler bei Verarbeitung von Zeile {row_num_in_sheet}: {e}")
|
logging.exception(f"Unerwarteter Fehler bei Verarbeitung von Zeile {row_num_in_sheet}: {e}")
|
||||||
continue # Gehe zur nächsten Zeile
|
continue
|
||||||
|
|
||||||
# --- Batch Update am Ende ---
|
# --- Batch Update am Ende ---
|
||||||
# Dieser Block muss auf derselben Einrückungsebene wie die for-Schleife sein!
|
|
||||||
if all_sheet_updates:
|
if all_sheet_updates:
|
||||||
logging.info(f"Sende Batch-Update für {processed_rows} geprüfte Zeilen ({found_urls} URLs gefunden, {len(all_sheet_updates)} Zellen)...")
|
logging.info(f"Sende Batch-Update für {processed_rows} geprüfte Zeilen ({found_urls} URLs gefunden, {len(all_sheet_updates)} Zellen)...")
|
||||||
success = sheet_handler.batch_update_cells(all_sheet_updates)
|
success = sheet_handler.batch_update_cells(all_sheet_updates)
|
||||||
if success:
|
if success:
|
||||||
logging.info(f"Sheet-Update für 'find_wiki_serp' erfolgreich.")
|
logging.info(f"Sheet-Update für 'find_wiki_serp' erfolgreich.")
|
||||||
# Fehler wird von batch_update_cells geloggt
|
|
||||||
else:
|
else:
|
||||||
logging.info("Keine Zeilen gefunden, für die eine SerpAPI Wiki-Suche durchgeführt werden musste/konnte.")
|
logging.info("Keine Zeilen gefunden, für die eine SerpAPI Wiki-Suche durchgeführt werden musste/konnte.")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user