docs: 添加项目说明 README.md
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
# GX-GP-Notify
|
||||
|
||||
广西政府采购公告监控系统,自动爬取广西政府采购网和大化县政府网的公告,通过企业微信推送关键词匹配的公告。
|
||||
|
||||
## 功能
|
||||
|
||||
- **定时爬取**:按 cron 规则自动爬取,工作日 8:00-21:00 每小时执行
|
||||
- **关键词过滤**:广西政采网公告按关键词过滤(默认:`大化`),大化县政府网全量爬取
|
||||
- **企微推送**:新公告实时推送到企业微信应用
|
||||
- **去重**:基于内容 hash 去重,避免重复入库和推送
|
||||
- **节假日感知**:非工作日自动跳过爬取
|
||||
|
||||
## 数据来源
|
||||
|
||||
| 来源 | 说明 | 过滤 |
|
||||
|------|------|------|
|
||||
| 广西政府采购网 | 采购公告、结果公告、合同公告等 13 个分类 | 关键词过滤 |
|
||||
| 大化县政府网 | 大化县门户网站采购公告 | 全量爬取 |
|
||||
|
||||
## 企微菜单功能
|
||||
|
||||
| 菜单 | 说明 |
|
||||
|------|------|
|
||||
| 最新公告 | 触发一次爬取,推送两个来源合并后最新 6 条(时间升序) |
|
||||
| 手动爬取 | 立即触发全量爬取并推送新公告 |
|
||||
| 今日统计 | 查看今日新增和累计公告数 |
|
||||
| 系统状态 | 查看待推送数量、定时任务状态 |
|
||||
| 监控配置 | 查看关键词、爬取页数、定时规则 |
|
||||
| 工作日状态 | 查看今天是否为工作日 |
|
||||
| 同步节假日 | 同步当年节假日数据 |
|
||||
| 暂停/恢复任务 | 控制定时爬取任务 |
|
||||
|
||||
## 快速部署
|
||||
|
||||
### 1. 配置环境变量
|
||||
|
||||
复制 `.env.example` 为 `.env` 并填写:
|
||||
|
||||
```env
|
||||
# 数据库
|
||||
DATABASE_URL=postgresql+asyncpg://user:password@host:5432/gx-gp-notify
|
||||
|
||||
# 企业微信
|
||||
WECHAT_CORP_ID=your_corp_id
|
||||
WECHAT_AGENT_ID=your_agent_id
|
||||
WECHAT_SECRET=your_secret
|
||||
WECHAT_TOKEN=your_token
|
||||
WECHAT_ENCODING_AES_KEY=your_aes_key
|
||||
|
||||
# 爬虫
|
||||
CRAWLER_KEYWORDS=["大化"]
|
||||
CRAWLER_MAX_PAGES=10
|
||||
SCHEDULER_CRON=0 8-21 * * 1-5
|
||||
```
|
||||
|
||||
### 2. 启动服务
|
||||
|
||||
```bash
|
||||
docker compose -f docker/docker-compose.yml up -d
|
||||
```
|
||||
|
||||
### 3. 数据库迁移
|
||||
|
||||
```bash
|
||||
docker compose -f docker/docker-compose.yml exec app alembic upgrade head
|
||||
```
|
||||
|
||||
### 4. 配置企微回调
|
||||
|
||||
在企业微信后台将回调 URL 设置为:
|
||||
|
||||
```
|
||||
http://your-server:18001/wechat/callback
|
||||
```
|
||||
|
||||
## 开发
|
||||
|
||||
```bash
|
||||
# 安装依赖
|
||||
pip install -e ".[dev]"
|
||||
|
||||
# 运行测试
|
||||
pytest
|
||||
|
||||
# 代码检查
|
||||
ruff check .
|
||||
```
|
||||
|
||||
## 技术栈
|
||||
|
||||
- **框架**:FastAPI + uvicorn
|
||||
- **数据库**:PostgreSQL + SQLAlchemy (async) + Alembic
|
||||
- **爬虫**:httpx + BeautifulSoup4
|
||||
- **定时任务**:APScheduler
|
||||
- **推送**:企业微信应用消息 API
|
||||
- **部署**:Docker
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
app/
|
||||
├── api/ # HTTP 接口(公告查询、手动触发爬取等)
|
||||
├── crawler/ # 爬虫(广西政采网、大化县政府网)
|
||||
├── models/ # 数据库模型
|
||||
├── scheduler/ # 定时任务
|
||||
├── services/ # 业务逻辑(pipeline、过滤、通知)
|
||||
└── wechat/ # 企业微信(消息处理、推送客户端)
|
||||
```
|
||||
Reference in New Issue
Block a user