Refactor /rotate endpoint to accept city list and update README. Enhance rotate function to handle multiple cities and add new endpoint to retrieve available cities.
This commit is contained in:
parent
9c6d4033bb
commit
102ac41025
@ -48,7 +48,7 @@ app/
|
||||
```bash
|
||||
curl -X POST 'http://localhost:8000/proxy/rotate' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"cityhash": "310000", "num": 20}'
|
||||
-d '{"id": 1}'
|
||||
```
|
||||
|
||||
- 响应示例(变更成功):
|
||||
|
||||
@ -82,7 +82,7 @@ def apply_gateway_route(edge_id: Optional[str], ip: str, geo: str, client_id:str
|
||||
"table": 1, # 路由表ID
|
||||
"enable": True, # 启用规则
|
||||
"edge": [edge_id] if edge_id else [], # 边缘设备列表
|
||||
"network": [client_infos[client_id]], # 网络配置(当前为空)
|
||||
"network": [client_infos[str(client_id)]], # 网络配置(当前为空)
|
||||
"cityhash": geo or "", # 城市哈希值
|
||||
}
|
||||
config = {"id": 1, "rules": [rule]} # 配置ID和规则列表
|
||||
@ -91,7 +91,7 @@ def apply_gateway_route(edge_id: Optional[str], ip: str, geo: str, client_id:str
|
||||
|
||||
|
||||
|
||||
def rotate(client_id) -> Dict[str, Any]:
|
||||
def rotate(client_id,cities) -> Dict[str, Any]:
|
||||
"""
|
||||
执行IP轮换操作
|
||||
|
||||
@ -113,10 +113,10 @@ def rotate(client_id) -> Dict[str, Any]:
|
||||
ValueError: 当cityhash为空时
|
||||
"""
|
||||
# 确定地理位置参数
|
||||
geo = get_random_cityhash()
|
||||
geo = get_random_cityhash(cities)
|
||||
|
||||
# 确定获取设备数量
|
||||
n = 1
|
||||
n = 1000
|
||||
|
||||
# 获取设备列表
|
||||
devices = eip.list_devices(geo=geo, offset=0, num=n)
|
||||
@ -139,6 +139,9 @@ def rotate(client_id) -> Dict[str, Any]:
|
||||
return {"changed": True, "ip": ip, "edge": edge_id, "status": status, "geo": geo}
|
||||
|
||||
|
||||
def citie_list():
|
||||
return {"data":list(city_dict.keys())}
|
||||
|
||||
def status() -> Dict[str, Any]:
|
||||
"""
|
||||
获取当前轮换服务状态
|
||||
@ -168,7 +171,7 @@ def status() -> Dict[str, Any]:
|
||||
return {"current": cur, "used_today": used_count, "gateway": gw}
|
||||
|
||||
|
||||
def get_random_city() -> Dict[str, str]:
|
||||
def get_random_city(city_list) -> Dict[str, str]:
|
||||
"""
|
||||
随机获取一个城市编码
|
||||
|
||||
@ -183,6 +186,7 @@ def get_random_city() -> Dict[str, str]:
|
||||
# 收集所有城市信息
|
||||
all_cities = []
|
||||
for province, cities in city_dict.items():
|
||||
if province in city_list:
|
||||
for city, cityhash in cities.items():
|
||||
all_cities.append({
|
||||
"province": province,
|
||||
@ -198,14 +202,14 @@ def get_random_city() -> Dict[str, str]:
|
||||
return selected_city
|
||||
|
||||
|
||||
def get_random_cityhash() -> str:
|
||||
def get_random_cityhash(cities) -> str:
|
||||
"""
|
||||
随机获取一个城市编码(简化版本)
|
||||
|
||||
Returns:
|
||||
str: 随机城市编码
|
||||
"""
|
||||
city_info = get_random_city()
|
||||
city_info = get_random_city(cities)
|
||||
return city_info["cityhash"]
|
||||
|
||||
|
||||
|
||||
@ -3,15 +3,15 @@ from typing import Optional
|
||||
from fastapi import APIRouter, Body, Query, Form,Request
|
||||
from pydantic import BaseModel
|
||||
|
||||
from ..rotation_service import rotate as rotate_impl, status as status_impl
|
||||
from ..rotation_service import rotate as rotate_impl, status as status_impl ,citie_list as cities_impl
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
class RotateRequest(BaseModel):
|
||||
cityhash: Optional[str] = None
|
||||
num: Optional[int] = None
|
||||
id: Optional[int] = None
|
||||
citys: Optional[str] = None
|
||||
|
||||
|
||||
@router.post("/rotate")
|
||||
@ -20,9 +20,10 @@ def rotate(
|
||||
):
|
||||
# 优先级:Query > Form > JSON
|
||||
client_id = req.id
|
||||
cities = str(req.citys).split(',')
|
||||
# effective_cityhash = req.cityhash
|
||||
# effective_num = req.num
|
||||
result = rotate_impl(client_id=client_id)
|
||||
result = rotate_impl(client_id=client_id,cities =cities)
|
||||
return result
|
||||
|
||||
|
||||
@ -30,4 +31,6 @@ def rotate(
|
||||
def get_status():
|
||||
return status_impl()
|
||||
|
||||
|
||||
@router.get("/cities")
|
||||
def get_cities():
|
||||
return cities_impl()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user