diff --git a/data_processor.py b/data_processor.py index 3406b4dd..1d6429e7 100644 --- a/data_processor.py +++ b/data_processor.py @@ -968,9 +968,10 @@ class DataProcessor: """ Iteriert durch die Zeilen und führt eine ChatGPT-basierte Verifizierung des in Spalte R ("Wiki URL") gefundenen Artikels durch. - NEU: Arbeitet im Batch-Modus, sammelt alle Updates und schreibt sie am Ende. + Arbeitet im Batch-Modus, schreibt alle BATCH_SIZE Zeilen ins Sheet. """ - self.logger.info("Starte Modus: Wiki-Verifizierung via ChatGPT (Batch-Modus)...") + BATCH_SIZE = 20 # Wie viele Zeilen verarbeiten, bevor geschrieben wird + self.logger.info(f"Starte Modus: Wiki-Verifizierung via ChatGPT (Batch-Größe: {BATCH_SIZE})...") if not self.sheet_handler.load_data(): return @@ -984,13 +985,14 @@ class DataProcessor: rows_to_process = all_data[start_row_idx : end_row_idx + 1] processed_count = 0 - all_updates = [] # Liste zum Sammeln aller Updates + total_processed_since_start = 0 + all_updates = [] for idx, row_data in enumerate(rows_to_process): current_row_num = start_row_idx + idx + 1 - if limit is not None and processed_count >= limit: - self.logger.info(f"Limit von {limit} Zeilen erreicht. Stoppe Sammelphase.") + if limit is not None and total_processed_since_start >= limit: + self.logger.info(f"Globales Limit von {limit} Zeilen erreicht. Stoppe.") break verif_timestamp = self._get_cell_value_safe(row_data, "Wiki Verif. Timestamp").strip() @@ -1004,37 +1006,45 @@ class DataProcessor: try: verification_result = verify_wiki_article_chatgpt( - company_name=company_name, - website=website, - wiki_url=wiki_url + company_name=company_name, website=website, wiki_url=wiki_url ) now_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - if verification_result: - all_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Wiki Konsistenzpruefung"] + 1)}{current_row_num}', 'values': [[verification_result.get("consistency", "FEHLER")]]}) - all_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Begründung Wiki Inkonsistenz"] + 1)}{current_row_num}', 'values': [[verification_result.get("justification", "")]]}) - all_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Vorschlag Wiki Artikel"] + 1)}{current_row_num}', 'values': [[verification_result.get("suggested_url", "")]]}) - - all_updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wiki Verif. Timestamp"] + 1)}{current_row_num}', 'values': [[now_timestamp]]}) + # Updates für diese eine Zeile sammeln + updates_for_row = [ + {'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Wiki Konsistenzpruefung"] + 1)}{current_row_num}', 'values': [[verification_result.get("consistency")]]}, + {'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Begründung Wiki Inkonsistenz"] + 1)}{current_row_num}', 'values': [[verification_result.get("justification")]]}, + {'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Vorschlag Wiki Artikel"] + 1)}{current_row_num}', 'values': [[verification_result.get("suggested_url")]]}, + {'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wiki Verif. Timestamp"] + 1)}{current_row_num}', 'values': [[now_timestamp]]} + ] + all_updates.extend(updates_for_row) processed_count += 1 - time.sleep(2) + total_processed_since_start += 1 + + # Wenn Batch-Größe erreicht, schreiben und zurücksetzen + if processed_count >= BATCH_SIZE: + self.logger.info(f"Batch-Größe ({BATCH_SIZE}) erreicht. Schreibe {len(all_updates)} Zell-Updates...") + self.sheet_handler.batch_update_cells(all_updates) + self.logger.info("Batch erfolgreich geschrieben.") + all_updates = [] # Liste für den nächsten Batch leeren + processed_count = 0 # Zähler für den nächsten Batch zurücksetzen + + time.sleep(1) # API-Pause except Exception as e: - self.logger.error(f"Fehler bei der Wiki-Verifizierung für Zeile {current_row_num}: {e}") + self.logger.error(f"Unerwarteter Fehler bei Verarbeitung von Zeile {current_row_num}: {e}", exc_info=True) else: self.logger.debug(f"Zeile {current_row_num}: Übersprungen (Timestamp vorhanden oder keine URL).") - # Schreibe alle gesammelten Updates auf einmal ins Sheet + # Schreibe die restlichen gesammelten Updates am Ende des Laufs if all_updates: - self.logger.info(f"Sammelphase abgeschlossen. Schreibe {len(all_updates)} Zell-Updates für {processed_count} Zeilen ins Google Sheet...") + self.logger.info(f"Schleife beendet. Schreibe die letzten {len(all_updates)} Zell-Updates für {processed_count} Zeilen...") self.sheet_handler.batch_update_cells(all_updates) - self.logger.info("Batch-Update erfolgreich abgeschlossen.") - else: - self.logger.info("Keine Zeilen zur Verifizierung gefunden oder keine Updates generiert.") + self.logger.info("Finaler Batch erfolgreich geschrieben.") - self.logger.info(f"Wiki-Verifizierung abgeschlossen. {processed_count} Zeilen verarbeitet.") + self.logger.info(f"Wiki-Verifizierung abgeschlossen. {total_processed_since_start} Zeilen insgesamt verarbeitet.")