Sobre el proyecto

discolike-python es el SDK y CLI oficiales en Python para la API de DiscoLike, un motor de búsqueda web empresarial que indexa más de 80 millones de sitios web de negocios en todo el mundo en 50 idiomas. El repositorio incluye dos paquetes: discolike (la biblioteca SDK) y discolike-cli (la interfaz de línea de comandos, que depende del SDK). Ambos requieren Python 3.10 o superior. El SDK proporciona un cliente tipado (Discolike) y una contraparte asíncrona (AsyncDiscolike) para interactuar con la API de DiscoLike. Las capacidades principales incluyen descubrir empresas similares mediante texto ICP, frases, stack tecnológico, geografía y más de 40 filtros; contar segmentos antes de extraerlos; relacionar nombres de empresas desordenados (con teléfono, ciudad, estado opcionales) con dominios en modo único o CSV masivo; enriquecer listas de dominios CSV con conjuntos de datos de DiscoLike; segmentar automáticamente listas de dominios; validar listas de dominios contra definiciones ICP; obtener perfiles completos de empresas con firmografía, puntuaciones, datos de crecimiento, redirecciones, proveedores y subsidiarias; buscar, consultar, relacionar y descubrir contactos en empresas objetivo; y ejecutar investigación DiscoGen sobre conjuntos de dominios con búsqueda web habilitada. La autenticación admite tres métodos: registro (abre una cuenta desde un correo y nombre sin navegador, con confirmación del propietario por correo), inicio de sesión OAuth (flujo de código de autorización PKCE basado en navegador con redirección de bucle local, o modo sin interfaz que imprime la URL) y clave API (mediante la variable de entorno DISCOLIKE_API_KEY, archivo de configuración CLI o parámetro explícito). Las credenciales OAuth se renuevan proactivamente dentro de 60 segundos antes de la expiración y una vez más después de un 401. El cliente también admite traer su propio httpx2.Client o httpx2.AsyncClient. Todos los modelos de solicitud se generan a partir de la especificación OpenAPI de la plataforma y se validan localmente con Pydantic antes de enviar cualquier solicitud, por lo que valores de enumeración incorrectos o números fuera de rango nunca cuestan un viaje de ida y vuelta. Todas las respuestas son modelos Pydantic tipados. Los errores heredan de DiscolikeError con subclases específicas para autenticación, acceso al plan, no encontrado, servidor, límite de velocidad, validación y fallos de conexión API. Los fallos transitorios se reintentan automáticamente (3 intentos por defecto). Las operaciones masivas de larga duración (match.bulk, segment, validate_icp, contacts.bulk_match) devuelven un identificador de trabajo (Job) en lugar de bloquear. Job.wait() bloquea hasta la finalización, Job.status() consulta sin bloquear y Job.cancel() aborta. En trabajos de la familia DiscoGen, el JobStatus devuelto incluye advertencias, estimated_cost y cost_metadata con uso por modelo y entradas del proveedor de búsqueda. JobTimeoutError es solo un límite de espera del lado del cliente: la tarea sigue ejecutándose en el servidor, por lo que se puede llamar a wait() nuevamente para reanudar. El CLI refleja las capacidades del SDK con comandos para discover, count, match, extract, validate-icp, append, segment, signup, además de grupos de comandos para auth, company, contacts, discogen, queries, account, search-providers y llm-providers. Los resultados se imprimen como JSON en stdout por defecto, con --format table para salida legible cuando stdout es un TTY. Los endpoints asíncronos aceptan --wait para bloquear hasta que el trabajo termine, o devuelven un task_id para consultar. Los códigos de salida están estandarizados: 0 éxito, 1 error de servidor, 2 error de validación, 3 error de autenticación/plan, 4 límite de velocidad, 5 error de red, 6 no encontrado. El repositorio está estructurado como un espacio de trabajo uv con dos miembros: packages/discolike (el SDK) y packages/discolike-cli (el CLI). El desarrollo usa pytest para pruebas, ruff para linting y un script de generación de código (scripts/gen_requests.py) para regenerar modelos de solicitud desde la especificación OpenAPI. La carpeta examples/ contiene scripts ejecutables para flujos de trabajo comunes, incluida la coincidencia de exportaciones de contactos CRM con IDs de persona de DiscoLike con checkpointing y reanudación, búsqueda masiva de correos electrónicos de trabajo desde un CSV y descubrimiento de empresas por ICP y luego enriquecimiento con DiscoGen. El proyecto está licenciado bajo MIT.