From 166fb5fa4ddb18519091ca6544f008f5f35ab76c Mon Sep 17 00:00:00 2001 From: Floke Date: Wed, 2 Apr 2025 19:16:42 +0000 Subject: [PATCH] LinkedIn Update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ersetze in deinem Skript den bisherigen Codeabschnitt, der den neuen Modus für die LinkedIn-Kontaktsuche (Modus 4) implementiert hat – also den gesamten Bereich ab der Definition von def search_linkedin_contact(...) bis zum Ende der Funktion def process_contacts(): – durch den oben stehenden Code. Diese Funktionen liegen in der Sektion „NEUER MODUS: CONTACTS“ (ungefähr im mittleren Bereich deines Skripts, direkt vor dem Main-Programm). Die zusätzlichen Debug-Ausgaben sorgen dafür, dass du in der Konsole und in der Log-Datei siehst, welche Firmen gerade verarbeitet werden, welche Suchanfragen erstellt werden und welche Ergebnisse (bzw. ob ein Kontakt gefunden wurde) zurückkommen. --- brancheneinstufung.py | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index dd41aafe..b792921b 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -337,6 +337,7 @@ def search_linkedin_contact(company_name, website, position_query): debug_print("Fehler beim Lesen des SerpAPI-Schlüssels: " + str(e)) return None query = f'site:linkedin.com/in "{position_query}" "{company_name}"' + debug_print(f"Erstelle LinkedIn-Query: {query}") params = { "engine": "google", "q": query, @@ -346,9 +347,11 @@ def search_linkedin_contact(company_name, website, position_query): try: response = requests.get("https://serpapi.com/search", params=params) data = response.json() + debug_print(f"SerpAPI-Response für Query '{query}': {data.get('organic_results', [])[:1]}") if "organic_results" in data and len(data["organic_results"]) > 0: result = data["organic_results"][0] title = result.get("title", "") + debug_print(f"LinkedIn-Suchergebnis-Titel: {title}") if "–" in title: parts = title.split("–") elif "-" in title: @@ -364,18 +367,22 @@ def search_linkedin_contact(company_name, website, position_query): else: firstname = name_part lastname = "" + debug_print(f"Kontakt gefunden: {firstname} {lastname}, Position: {pos}") return {"Firmenname": company_name, "Website": website, "Vorname": firstname, "Nachname": lastname, "Position": pos} else: + debug_print(f"Kontakt gefunden, aber unvollständige Informationen: {title}") return {"Firmenname": company_name, "Website": website, "Vorname": "", "Nachname": "", "Position": title} else: + debug_print(f"Keine LinkedIn-Ergebnisse für Query: {query}") return None except Exception as e: debug_print(f"Fehler bei der SerpAPI-Suche: {e}") return None def process_contacts(): - # Öffne das Spreadsheet und erhalte das Arbeitsblatt "Contacts" (erstelle es, falls nicht vorhanden) - gc = gspread.authorize(ServiceAccountCredentials.from_json_keyfile_name(Config.CREDENTIALS_FILE, ["https://www.googleapis.com/auth/spreadsheets"])) + debug_print("Starte LinkedIn-Kontaktsuche...") + gc = gspread.authorize(ServiceAccountCredentials.from_json_keyfile_name( + Config.CREDENTIALS_FILE, ["https://www.googleapis.com/auth/spreadsheets"])) sh = gc.open_by_url(Config.SHEET_URL) try: contacts_sheet = sh.worksheet("Contacts") @@ -383,26 +390,33 @@ def process_contacts(): contacts_sheet = sh.add_worksheet(title="Contacts", rows="1000", cols="10") header = ["Firmenname", "Website", "Vorname", "Nachname", "Position", "Anrede", "E-Mail"] contacts_sheet.update("A1:G1", [header]) + debug_print("Neues Blatt 'Contacts' erstellt und Header eingetragen.") main_sheet = sh.sheet1 data = main_sheet.get_all_values() positions = ["Serviceleiter", "IT-Leiter", "Leiter After Sales", "Leiter Einsatzplanung"] new_rows = [] - for row in data[1:]: + for idx, row in enumerate(data[1:], start=2): company_name = row[1] if len(row) > 1 else "" website = row[2] if len(row) > 2 else "" + debug_print(f"Verarbeite Firma: '{company_name}' (Zeile {idx}), Website: '{website}'") if not company_name or not website: + debug_print("Überspringe, da Firmenname oder Website fehlt.") continue for pos in positions: + debug_print(f"Suche nach Position: '{pos}' bei '{company_name}'") contact = search_linkedin_contact(company_name, website, pos) if contact: + debug_print(f"Kontakt gefunden: {contact}") new_rows.append([contact["Firmenname"], contact["Website"], contact["Vorname"], contact["Nachname"], contact["Position"], "", ""]) + else: + debug_print(f"Kein Kontakt für Position '{pos}' bei '{company_name}' gefunden.") if new_rows: last_row = len(contacts_sheet.get_all_values()) + 1 range_str = f"A{last_row}:G{last_row + len(new_rows) - 1}" contacts_sheet.update(range_str, new_rows) debug_print(f"{len(new_rows)} Kontakte in 'Contacts' hinzugefügt.") else: - debug_print("Keine Kontakte gefunden.") + debug_print("Keine Kontakte gefunden in der Haupttabelle.") # ==================== BRANCHENABGLEICH PER CHATGPT ==================== def load_target_branches():