Files
job-tracker-automation/job_tracker_automation.py
T

132 lines
5.2 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
# job_tracker_automation.py - Script para generar tu tabla de seguimiento de empleo
# Requisitos: pip install openpyxl requests beautifulsoup4 (opcional para scraping real)
import openpyxl
from openpyxl.styles import Font, Alignment, PatternFill
from datetime import datetime, timedelta
import hashlib
import os
def create_or_load_workbook(filepath="Busqueda_Empleo_Y_Trabajo_Extra.xlsx"):
"""Crea un nuevo workbook o carga uno existente"""
if os.path.exists(filepath):
wb = openpyxl.load_workbook(filepath)
else:
wb = openpyxl.Workbook()
# Eliminar hoja por defecto si existe
if "Sheet" in wb.sheetnames:
wb.remove(wb["Sheet"])
return wb
def setup_worksheet(wb, sheet_name, headers):
"""Configura una hoja con headers y formato"""
if sheet_name in wb.sheetnames:
ws = wb[sheet_name]
else:
ws = wb.create_sheet(title=sheet_name)
# Escribir headers si la hoja está vacía
if ws.max_row == 1 and ws.cell(row=1, column=1).value is None:
for col_num, header in enumerate(headers, 1):
cell = ws.cell(row=1, column=col_num)
cell.value = header
cell.font = Font(bold=True)
cell.alignment = Alignment(horizontal="center", vertical="center")
cell.fill = PatternFill(start_color="366092", end_color="366092", fill_type="solid")
return ws
def add_unique_entry(worksheet, new_entry, unique_columns=None):
"""
Añade una entrada solo si no existe ya (basado en columnas únicas)
unique_columns: lista de índices de columnas que hacen única una entrada (0-based)
"""
if unique_columns is None:
unique_columns = [0, 5] # Por defecto: Fecha + URL
# Crear hash de las columnas únicas para comparación rápida
new_hash = hashlib.md5(
"".join(str(new_entry[i]) for i in unique_columns).encode()
).hexdigest()
# Verificar si ya existe
for row in worksheet.iter_rows(min_row=2, values_only=True):
existing_hash = hashlib.md5(
"".join(str(row[i]) for i in unique_columns if i < len(row)).encode()
).hexdigest()
if existing_hash == new_hash:
return False # Ya existe, no agregar
# No existe, agregar
worksheet.append(new_entry)
return True
def main():
# Configuración de tus hojas
MAIN_JOB_HEADERS = [
"Fecha", "País/Región", "Ciudad", "Puesto", "Empresa/Organización",
"Compensación Total Estimada", "Link/URL", "Estado", "Comentario"
]
EXTRA_WORK_HEADERS = [
"Fecha", "Tipo de trabajo", "Plataforma/Cliente", "Descripción breve",
"Ingreso estimado (€/mes)", "Estado", "Link/Nota de seguimiento", "Tiempo invertido (h/sem)"
]
# Ruta del archivo (cambia si lo guardas en otro lugar)
EXCEL_FILE = "/home/javi/.openclaw/workspace/Busqueda_Empleo_Y_Trabajo_Extra.xlsx"
# Cargar o crear workbook
wb = create_or_load_workbook(EXCEL_FILE)
# Configurar hojas
main_ws = setup_worksheet(wb, "Busqueda_Principal_Global", MAIN_JOB_HEADERS)
extra_ws = setup_worksheet(wb, "Trabajo_Extra_Online", EXTRA_WORK_HEADERS)
# === EJEMPLO: Cómo añadir nuevas entradas sin duplicados ===
# En la práctica, aquí iría tu lógica de scraping o entrada manual
# Ejemplo de nueva oferta de trabajo (evita duplicados por Fecha + URL)
new_job = [
"2026-05-13", # Fecha
"Estados Unidos", # País/Región
"California (San Francisco)", # Ciudad
"Senior Renewable Energy Project Manager", # Puesto
"NextEra Energy Resources", # Empresa
"$140,000 base + 20% target bonus + equity", # Compensación
"https://www.nexteraenergy.com/careers/job/senior-renewable-energy-project-manager-san-francisco-ca/12345", # URL
"Pendiente", # Estado
"Requerirá visa L-1 o H-1B, paquete de reubicación disponible" # Comentario
]
# Añadir solo si no existe (usando columnas 0=Fecha y 6=URL como únicas)
if add_unique_entry(main_ws, new_job, unique_columns=[0, 6]):
print(f"✅ Nueva oferta añadida: {new_job[3]} en {new_job[4]}")
else:
print(f"⚠️ Duplicado detectado y omitido: {new_job[3]}")
# Ejemplo de nuevo trabajo extra (evita duplicados por Fecha + Descripción)
new_extra = [
"2026-05-13", # Fecha
"Consultoría técnica", # Tipo de trabajo
"Freelancer.com", # Plataforma
"Revisión de estudio de impacto ambiental para parque eólico en México", # Descripción
350, # Ingreso estimado
"Propuesta enviada", # Estado
"https://www.freelancer.com/projects/...", # Link
4 # Tiempo invertido
]
if add_unique_entry(extra_ws, new_extra, unique_columns=[0, 3]):
print(f"✅ Nuevo trabajo extra añadido: {new_extra[1]} - {new_extra[3][:50]}...")
else:
print(f"⚠️ Duplicado de trabajo extra detectado: {new_extra[1]}")
# Guardar workbook
wb.save(EXCEL_FILE)
print(f"\n📊 Archivo actualizado: {EXCEL_FILE}")
print(f" - {main_ws.max_row - 1} oportunidades de empleo registradas")
print(f" - {extra_ws.max_row - 1} trabajos extra registrados")
if __name__ == "__main__":
main()