Tordor LiQiuYu
  • Joined on 2025-07-25

ylhp-boss-hr (1.51)

Published 2026-03-31 15:17:40 +08:00 by LiQiuYu

Installation

pip install --index-url  --extra-index-url https://pypi.org/simple ylhp-boss-hr

About this package

BOSS直聘招聘端 SDK - 支持简历获取、解密和智能沟通

ylhp-boss-hr

一个面向 BOSS 直聘招聘端的 Python SDK,用于获取职位列表、候选人推荐列表、简历详情,并解密返回的加密简历内容。

当前仓库以源码方式提供,适合在内部工具、自动化脚本或数据处理流程中集成使用。

Features

  • 基于 wt2 Cookie 访问 BOSS 直聘招聘端接口
  • 获取已沟通过职位列表
  • 拉取指定职位下的候选人推荐列表
  • 获取候选人简历详情
  • 通过内置 Node.js 脚本解密简历正文
  • 提供 pydantic 数据模型,便于类型化处理接口响应
  • 请求代理工具:内置限流、重试、日志等中间件,支持灵活扩展

Install

Requirements

  • Python 3.12+
  • Node.js 18+(用于解密简历内容)

Using uv

uv sync

Using pip

由于项目采用 src 布局,建议在虚拟环境中以可编辑模式安装:

pip install -e .

如果需要运行简历解密逻辑,还需要安装 Node 侧依赖:

cd src/boss/encrypty
npm install

Quick Start

from boss import Boss

wt_token = "your_wt2_cookie"

client = Boss(wt=wt_token)

# 1. 获取职位列表
jobs = client.job_id()
first_job = jobs[0]

# 2. 获取该职位下的推荐候选人
geeks = client.geek_info(jobid=first_job.encryptJobId, page=1)
first_geek = geeks[0]

# 3. 获取候选人详情
detail = client.get_detail(first_geek)

# 4. 解密简历正文
resume_text = client.get_detail_text(detail)
print(resume_text)

# 5. 发起招呼
client.chat_start(first_geek)

Authentication

SDK 当前通过 wt2 Cookie 进行身份认证:

from boss import Boss

client = Boss(wt="your_wt2_cookie")

请自行确保该 Cookie 来源合法、有效,并且具备对应招聘端页面的访问权限。

API

Boss(wt: str, **kwargs)

创建 SDK 客户端。

参数:

  • wt: BOSS 直聘登录态中的 wt2 Cookie 值
  • enable_proxy: 是否启用请求代理(默认 True
  • rate_limit: 限流配置,如 {"max_requests": 10, "per_seconds": 60}
  • retry: 重试配置,如 {"max_retries": 3, "backoff_factor": 0.5}
  • middleware_factory: 自定义中间件工厂函数

job_id() -> list[JobInfoModel]

获取当前账号已沟通过的职位列表。

返回字段示例:

  • encryptJobId
  • description
  • jobId
  • jobName
  • salaryDesc
  • address

geek_info(jobid, page) -> list[GeekModel]

获取指定职位的候选人推荐列表。

参数:

  • jobid: 职位加密 ID,通常来自 JobInfoModel.encryptJobId
  • page: 页码,从 1 开始

get_detail(geek_info) -> DetailModel

获取候选人简历详情对象。

参数:

  • geek_info: geek_info() 返回的单个 GeekModel

get_detail_text(detail) -> str

DetailModel.encryptGeekDetailInfo 交给内置 Node.js 脚本进行解密,返回简历纯文本内容。

参数:

  • detail: get_detail() 返回的 DetailModel

注意:

  • 该方法依赖本地 node 可执行程序
  • 需要先安装 src/boss/encrypty/package.json 中声明的依赖

chat_start(geek_info) -> None

向候选人发起沟通。

参数:

  • geek_info: GeekModel

说明:

  • 当前实现主要通过打印输出表示结果
  • 如果触发平台当日主动沟通上限,会直接返回

Data Models

项目使用 pydantic 定义了主要响应模型,位于:

  • src/boss/schema/job.py

核心模型包括:

  • JobInfoModel
  • GeekModel
  • GeekCardModel
  • DetailModel

这使得你可以直接通过属性访问接口字段,而不是处理原始字典。

Project Structure

.
├── src/
│   └── boss/
│       ├── __init__.py
│       ├── base.py              # 账号基础功能(集成请求代理)
│       ├── boss.py              # SDK 主入口
│       ├── resume.py            # 简历/候选人功能
│       ├── schema/              # Pydantic 数据模型
│       │   ├── job.py
│       │   └── boss.py
│       ├── http_proxy/          # 请求代理工具
│       │   ├── __init__.py
│       │   ├── middleware.py    # 中间件基类
│       │   ├── proxy.py         # RequestProxy 主类
│       │   └── middlewares/     # 内置中间件
│       │       ├── rate_limit.py
│       │       ├── retry.py
│       │       └── logging.py
│       └── encrypty/
│           ├── encrypt_detail.js
│           ├── package.json
│           └── *.wasm
├── tests/
│   └── boss/
│       └── test_resume.py
├── pyproject.toml
└── README.md

HTTP Proxy(请求代理工具)

SDK 内置了可扩展的请求代理工具,支持限流、重试、日志等中间件。

基础用法

默认启用限流和重试:

from boss import Boss

client = Boss(wt="your_wt2_cookie")
# 自动启用:每秒最多 10 请求,失败自动重试 3 次

自定义配置

# 自定义限流和重试参数
client = Boss(
    wt="your_wt2_cookie",
    rate_limit={"max_requests": 5, "per_seconds": 1},  # 每秒 5 请求
    retry={"max_retries": 5, "backoff_factor": 1.0},   # 重试 5 次
)

自定义中间件

from boss import Boss
from boss.http_proxy import RateLimitMiddleware, LoggingMiddleware

def my_middlewares():
    return [
        RateLimitMiddleware(max_requests=20, per_seconds=60),
        LoggingMiddleware(log_headers=True),
    ]

client = Boss(wt="your_wt2_cookie", middleware_factory=my_middlewares)

禁用代理

client = Boss(wt="your_wt2_cookie", enable_proxy=False)

支持的中间件

中间件 功能
RateLimitMiddleware 限流(固定窗口/令牌桶算法)
SlidingWindowRateLimitMiddleware 滑动窗口限流
AdaptiveRateLimitMiddleware 自适应限流(根据响应自动调整)
RetryMiddleware 重试(支持多种退避策略)
CircuitBreakerMiddleware 熔断器
LoggingMiddleware 请求/响应日志
TimingMiddleware 性能计时
MetricsMiddleware 指标收集

扩展自定义中间件

from boss.http_proxy.middleware import BaseMiddleware, RequestContext, ResponseContext

class MyMiddleware(BaseMiddleware):
    def process_request(self, context: RequestContext) -> RequestContext:
        # 请求前处理
        context.kwargs["headers"]["X-Custom"] = "value"
        return context

    def process_response(self, context: ResponseContext) -> ResponseContext:
        # 响应后处理
        return context

Development

Run tests

当前测试更接近真实接口联调测试,而不是纯离线单元测试。测试依赖:

  • 有效的 wt2 Cookie
  • 可访问 BOSS 直聘接口的网络环境
  • 已安装 Node.js 依赖

运行方式:

pytest

Limitations

  • 该项目当前聚焦招聘端简历获取与沟通流程,不是完整的 BOSS 直聘 API 封装
  • 请求头和接口参数中包含明显的平台耦合字段,接口变更后可能失效
  • get_detail_text() 依赖本地 Node.js 运行环境
  • chat_start() 当前返回值不稳定,主要通过打印结果反馈状态
  • 仓库中的测试用例目前写法依赖真实凭证,不适合作为公共 CI 测试直接运行
  • 请求代理工具目前为同步实现,异步支持待后续添加

Disclaimer

本项目仅用于学习和研究 SDK 封装方式。

使用者应自行确认:

  • 已获得目标平台的合法访问权限
  • 使用行为符合目标平台服务条款、适用法律法规和组织内部规范
  • 不将本项目用于未授权的数据采集、批量骚扰或其他违规用途

License

仓库当前未声明开源许可证。

如果你计划公开分发或对外协作,建议补充明确的 LICENSE 文件。

Requirements

Requires Python: >=3.12
Details
PyPI
2026-03-31 15:17:40 +08:00
8
MIT
122 KiB
Assets (2)
Versions (40) View all
1.51 2026-03-31
1.50 2026-03-31
1.49 2026-03-31
1.48 2026-03-30