这个项目能做什么

discolike-python 是 DiscoLike API 的官方 Python SDK 和 CLI,DiscoLike API 是一个商业网络搜索引擎,索引了全球 50 种语言的超过 8000 万个商业网站。该仓库包含两个包:discolike(SDK 库)和 discolike-cli(终端命令行界面,依赖于 SDK)。两者均要求 Python 3.10 或更高版本。 SDK 提供了一个类型化客户端(Discolike)及其异步对应版本(AsyncDiscolike),用于与 DiscoLike 的 API 交互。核心功能包括:通过 ICP 文本、短语、技术栈、地理位置以及 40 多个其他过滤器发现相似公司;在拉取之前对细分进行计数;将混乱的公司名称(可选电话、城市、州)与域名匹配,支持单个或批量 CSV 模式;使用 DiscoLike 数据集丰富 CSV 域名列表;自动细分域名列表;根据 ICP 定义验证域名列表;检索完整的公司资料,包括公司概况、评分、增长数据、重定向、供应商和子公司;在目标公司搜索、查找、匹配和发现联系人;以及通过启用网络搜索对域名集运行 DiscoGen 研究。 认证支持三种方法:注册(通过电子邮件和姓名在无浏览器的情况下创建账户,所有者通过电子邮件确认)、OAuth 登录(基于浏览器的 PKCE 授权码流程,使用环回重定向,或打印 URL 的无头模式)以及 API 密钥(通过环境变量 DISCOLIKE_API_KEY、CLI 配置文件或显式参数)。OAuth 凭据会在过期前 60 秒主动刷新,并在收到 401 后再次刷新。客户端还支持自带 httpx2.Client 或 httpx2.AsyncClient。 所有请求模型均根据平台的 OpenAPI 规范生成,并在发送任何请求之前使用 Pydantic 在本地进行验证,因此错误的枚举值或超出范围的数字永远不会浪费一次往返。所有响应都是类型化的 Pydantic 模型。错误继承自 DiscolikeError,并具有针对认证、计划访问、未找到、服务器、速率限制、验证和 API 连接失败的具体子类。瞬时故障会自动重试(默认 3 次尝试)。 长时间运行的批量操作(match.bulk、segment、validate_icp、contacts.bulk_match)返回一个 Job 句柄而不是阻塞。Job.wait() 会阻塞直到完成,Job.status() 非阻塞地轮询,Job.cancel() 中止。对于 DiscoGen 系列作业,返回的 JobStatus 带有警告、estimated_cost 和 cost_metadata,包括按模型的使用情况和搜索提供商条目。JobTimeoutError 仅是客户端等待限制——任务在服务器端继续运行,因此可以再次调用 wait() 以恢复。 CLI 镜像了 SDK 的功能,提供 discover、count、match、extract、validate-icp、append、segment、signup 等命令,以及 auth、company、contacts、discogen、queries、account、search-providers 和 llm-providers 命令组。结果默认以 JSON 格式打印到标准输出,当标准输出是 TTY 时,使用 --format table 输出人类可读的格式。异步端点接受 --wait 以阻塞直到作业完成,或返回 task_id 以供轮询。退出代码标准化:0 成功,1 服务器错误,2 验证错误,3 认证/计划错误,4 速率受限,5 网络错误,6 未找到。 该仓库结构为 uv 工作区,包含两个成员:packages/discolike(SDK)和 packages/discolike-cli(CLI)。开发使用 pytest 进行测试,ruff 进行代码检查,以及一个代码生成脚本(scripts/gen_requests.py)从 OpenAPI 规范重新生成请求模型。examples/ 文件夹包含常见工作流的可运行脚本,包括将 CRM 联系人导出与 DiscoLike 人物角色 ID 匹配(支持检查点和恢复)、从 CSV 批量查找工作电子邮件,以及按 ICP 发现公司然后使用 DiscoGen 丰富它们。该项目采用 MIT 许可证。