LinkedIn Update
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.
This commit is contained in:
@@ -337,6 +337,7 @@ def search_linkedin_contact(company_name, website, position_query):
|
|||||||
debug_print("Fehler beim Lesen des SerpAPI-Schlüssels: " + str(e))
|
debug_print("Fehler beim Lesen des SerpAPI-Schlüssels: " + str(e))
|
||||||
return None
|
return None
|
||||||
query = f'site:linkedin.com/in "{position_query}" "{company_name}"'
|
query = f'site:linkedin.com/in "{position_query}" "{company_name}"'
|
||||||
|
debug_print(f"Erstelle LinkedIn-Query: {query}")
|
||||||
params = {
|
params = {
|
||||||
"engine": "google",
|
"engine": "google",
|
||||||
"q": query,
|
"q": query,
|
||||||
@@ -346,9 +347,11 @@ def search_linkedin_contact(company_name, website, position_query):
|
|||||||
try:
|
try:
|
||||||
response = requests.get("https://serpapi.com/search", params=params)
|
response = requests.get("https://serpapi.com/search", params=params)
|
||||||
data = response.json()
|
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:
|
if "organic_results" in data and len(data["organic_results"]) > 0:
|
||||||
result = data["organic_results"][0]
|
result = data["organic_results"][0]
|
||||||
title = result.get("title", "")
|
title = result.get("title", "")
|
||||||
|
debug_print(f"LinkedIn-Suchergebnis-Titel: {title}")
|
||||||
if "–" in title:
|
if "–" in title:
|
||||||
parts = title.split("–")
|
parts = title.split("–")
|
||||||
elif "-" in title:
|
elif "-" in title:
|
||||||
@@ -364,18 +367,22 @@ def search_linkedin_contact(company_name, website, position_query):
|
|||||||
else:
|
else:
|
||||||
firstname = name_part
|
firstname = name_part
|
||||||
lastname = ""
|
lastname = ""
|
||||||
|
debug_print(f"Kontakt gefunden: {firstname} {lastname}, Position: {pos}")
|
||||||
return {"Firmenname": company_name, "Website": website, "Vorname": firstname, "Nachname": lastname, "Position": pos}
|
return {"Firmenname": company_name, "Website": website, "Vorname": firstname, "Nachname": lastname, "Position": pos}
|
||||||
else:
|
else:
|
||||||
|
debug_print(f"Kontakt gefunden, aber unvollständige Informationen: {title}")
|
||||||
return {"Firmenname": company_name, "Website": website, "Vorname": "", "Nachname": "", "Position": title}
|
return {"Firmenname": company_name, "Website": website, "Vorname": "", "Nachname": "", "Position": title}
|
||||||
else:
|
else:
|
||||||
|
debug_print(f"Keine LinkedIn-Ergebnisse für Query: {query}")
|
||||||
return None
|
return None
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
debug_print(f"Fehler bei der SerpAPI-Suche: {e}")
|
debug_print(f"Fehler bei der SerpAPI-Suche: {e}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def process_contacts():
|
def process_contacts():
|
||||||
# Öffne das Spreadsheet und erhalte das Arbeitsblatt "Contacts" (erstelle es, falls nicht vorhanden)
|
debug_print("Starte LinkedIn-Kontaktsuche...")
|
||||||
gc = gspread.authorize(ServiceAccountCredentials.from_json_keyfile_name(Config.CREDENTIALS_FILE, ["https://www.googleapis.com/auth/spreadsheets"]))
|
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)
|
sh = gc.open_by_url(Config.SHEET_URL)
|
||||||
try:
|
try:
|
||||||
contacts_sheet = sh.worksheet("Contacts")
|
contacts_sheet = sh.worksheet("Contacts")
|
||||||
@@ -383,26 +390,33 @@ def process_contacts():
|
|||||||
contacts_sheet = sh.add_worksheet(title="Contacts", rows="1000", cols="10")
|
contacts_sheet = sh.add_worksheet(title="Contacts", rows="1000", cols="10")
|
||||||
header = ["Firmenname", "Website", "Vorname", "Nachname", "Position", "Anrede", "E-Mail"]
|
header = ["Firmenname", "Website", "Vorname", "Nachname", "Position", "Anrede", "E-Mail"]
|
||||||
contacts_sheet.update("A1:G1", [header])
|
contacts_sheet.update("A1:G1", [header])
|
||||||
|
debug_print("Neues Blatt 'Contacts' erstellt und Header eingetragen.")
|
||||||
main_sheet = sh.sheet1
|
main_sheet = sh.sheet1
|
||||||
data = main_sheet.get_all_values()
|
data = main_sheet.get_all_values()
|
||||||
positions = ["Serviceleiter", "IT-Leiter", "Leiter After Sales", "Leiter Einsatzplanung"]
|
positions = ["Serviceleiter", "IT-Leiter", "Leiter After Sales", "Leiter Einsatzplanung"]
|
||||||
new_rows = []
|
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 ""
|
company_name = row[1] if len(row) > 1 else ""
|
||||||
website = row[2] if len(row) > 2 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:
|
if not company_name or not website:
|
||||||
|
debug_print("Überspringe, da Firmenname oder Website fehlt.")
|
||||||
continue
|
continue
|
||||||
for pos in positions:
|
for pos in positions:
|
||||||
|
debug_print(f"Suche nach Position: '{pos}' bei '{company_name}'")
|
||||||
contact = search_linkedin_contact(company_name, website, pos)
|
contact = search_linkedin_contact(company_name, website, pos)
|
||||||
if contact:
|
if contact:
|
||||||
|
debug_print(f"Kontakt gefunden: {contact}")
|
||||||
new_rows.append([contact["Firmenname"], contact["Website"], contact["Vorname"], contact["Nachname"], contact["Position"], "", ""])
|
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:
|
if new_rows:
|
||||||
last_row = len(contacts_sheet.get_all_values()) + 1
|
last_row = len(contacts_sheet.get_all_values()) + 1
|
||||||
range_str = f"A{last_row}:G{last_row + len(new_rows) - 1}"
|
range_str = f"A{last_row}:G{last_row + len(new_rows) - 1}"
|
||||||
contacts_sheet.update(range_str, new_rows)
|
contacts_sheet.update(range_str, new_rows)
|
||||||
debug_print(f"{len(new_rows)} Kontakte in 'Contacts' hinzugefügt.")
|
debug_print(f"{len(new_rows)} Kontakte in 'Contacts' hinzugefügt.")
|
||||||
else:
|
else:
|
||||||
debug_print("Keine Kontakte gefunden.")
|
debug_print("Keine Kontakte gefunden in der Haupttabelle.")
|
||||||
|
|
||||||
# ==================== BRANCHENABGLEICH PER CHATGPT ====================
|
# ==================== BRANCHENABGLEICH PER CHATGPT ====================
|
||||||
def load_target_branches():
|
def load_target_branches():
|
||||||
|
|||||||
Reference in New Issue
Block a user