File size: 4,071 Bytes
319b754
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
# ICP备案查询API

这是一个基于FastAPI的ICP备案信息查询服务,可以通过域名查询相关的ICP备案信息。

## 功能特性

- 🚀 基于FastAPI框架,性能优异
- 🔄 自动重试机制,最多重试5次
- 🛡️ 自动处理验证码识别
- 📋 RESTful API接口
- 📖 自动生成API文档

## 安装依赖

```bash
pip install -r requirements.txt
```

## 启动服务

### 方法1:使用Docker (推荐)

```bash
# 构建并启动
docker-compose up -d --build

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down
```

### 方法2:本地开发
```bash
# 安装依赖
pip install -r requirements.txt

# 启动服务
python -m uvicorn app:app --host 0.0.0.0 --port 8000 --reload
```

## API接口

### 查询域名ICP备案信息

**GET** `/query?domain={domain}`

#### 参数
- `domain` (必需): 要查询的域名,例如 `scgzyun.com`

#### 示例请求
```bash
curl "http://localhost:8000/query?domain=scgzyun.com"
```

#### 示例响应
```json
{
  "code": 200,
  "msg": "操作成功",
  "params": {
    "endRow": 0,
    "firstPage": 1,
    "hasNextPage": false,
    "hasPreviousPage": false,
    "isFirstPage": true,
    "isLastPage": true,
    "lastPage": 1,
    "list": [
      {
        "contentTypeName": "",
        "domain": "scgzyun.com",
        "domainId": 990004509801,
        "leaderName": "",
        "limitAccess": "否",
        "mainId": 110001964865,
        "mainLicence": "蜀ICP备19011193号",
        "natureName": "企业",
        "serviceId": 990005092743,
        "serviceLicence": "蜀ICP备19011193号-6",
        "unitName": "成都七淘网络科技有限公司",
        "updateRecordTime": "2024-03-01 09:25:43"
      }
    ],
    "navigatePages": 8,
    "navigatepageNums": [1],
    "nextPage": 1,
    "pageNum": 1,
    "pageSize": 10,
    "pages": 1,
    "prePage": 1,
    "size": 1,
    "startRow": 0,
    "total": 1
  },
  "success": true
}
```

### 健康检查

**GET** `/health`

#### 示例请求
```bash
curl "http://localhost:8000/health"
```

#### 示例响应
```json
{
  "status": "healthy",
  "timestamp": 1704362400
}
```

## API文档

启动服务后,可以访问以下地址查看自动生成的API文档:

- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc

## 错误处理

- 自动重试机制:当查询失败时,会自动重试最多5次
- 详细错误信息:返回具体的错误原因
- HTTP状态码:标准的HTTP状态码响应

## 测试

### 本地测试
```bash
python test_api.py
```

### Docker测试
```bash
# 在容器中运行测试
docker-compose exec icp-spider-api python test_api.py

# 或者直接测试API接口
curl "http://localhost:8000/health"
curl "http://localhost:8000/query?domain=scgzyun.com"
```

## 注意事项

1. 服务依赖于外部的验证码识别模型文件:`yolov8.onnx``siamese.onnx`
2. 确保这些模型文件在项目根目录中
3. 首次运行可能需要一些时间来加载模型
4. 建议在生产环境中使用更强的错误处理和日志记录

## 项目结构

```
ICP-spider/
├── app.py              # FastAPI应用主文件
├── test_api.py         # 测试脚本
├── main.py             # 原始脚本
├── crack.py            # 验证码识别模块
├── requirements.txt    # 依赖列表
├── Dockerfile          # Docker镜像构建文件
├── docker-compose.yml  # Docker编排文件
├── .dockerignore       # Docker忽略文件
├── yolov8.onnx        # YOLO模型文件
├── siamese.onnx       # Siamese模型文件
└── README_API.md      # 项目说明
```

## Docker部署

### 构建和运行
```bash
# 构建镜像
docker build -t icp-spider-api .

# 运行容器
docker run -d -p 8000:8000 --name icp-spider-api icp-spider-api

# 或使用docker-compose
docker-compose up -d --build
```

### 生产环境部署
```bash
# 使用docker-compose部署
docker-compose -f docker-compose.yml up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down
```