55 lines
2.2 KiB
Python
55 lines
2.2 KiB
Python
|
|
import requests
|
||
|
|
from app import app
|
||
|
|
from extensions import db
|
||
|
|
from models import SystemDict
|
||
|
|
from config import Config
|
||
|
|
|
||
|
|
def fetch_and_init():
|
||
|
|
with app.app_context():
|
||
|
|
# 定义需要抓取的字典代码及对应的本地类型
|
||
|
|
target_mappings = {
|
||
|
|
"nano_model": "ai_model",
|
||
|
|
"aspect_ratio": "aspect_ratio",
|
||
|
|
"ai_prompt": "prompt_tpl",
|
||
|
|
"ai_image_size": "ai_image_size"
|
||
|
|
}
|
||
|
|
|
||
|
|
print("🚀 开始从远程接口获取字典数据...")
|
||
|
|
|
||
|
|
for remote_code, local_type in target_mappings.items():
|
||
|
|
try:
|
||
|
|
url = f"{Config.DICT_URL}?platform={Config.PLATFORM}&code={remote_code}"
|
||
|
|
response = requests.get(url, verify=False, timeout=15)
|
||
|
|
|
||
|
|
if response.status_code == 200:
|
||
|
|
data = response.json().get("data", [])
|
||
|
|
print(f"📦 抓取到 {remote_code} ({len(data)} 条数据)")
|
||
|
|
|
||
|
|
for item in data:
|
||
|
|
label = item.get("label")
|
||
|
|
value = item.get("value")
|
||
|
|
|
||
|
|
# 检查本地是否已存在
|
||
|
|
exists = SystemDict.query.filter_by(dict_type=local_type, value=value).first()
|
||
|
|
if not exists:
|
||
|
|
new_dict = SystemDict(
|
||
|
|
dict_type=local_type,
|
||
|
|
label=label,
|
||
|
|
value=value,
|
||
|
|
cost=1 if local_type == 'ai_model' else 0, # 模型默认 1 积分,其余 0
|
||
|
|
is_active=True
|
||
|
|
)
|
||
|
|
db.session.add(new_dict)
|
||
|
|
else:
|
||
|
|
print(f"❌ 抓取 {remote_code} 失败: HTTP {response.status_code}")
|
||
|
|
|
||
|
|
except Exception as e:
|
||
|
|
print(f"⚠️ 抓取 {remote_code} 发生异常: {e}")
|
||
|
|
|
||
|
|
db.session.commit()
|
||
|
|
print("\n✅ 字典数据本地化初始化成功!")
|
||
|
|
print("💡 您现在可以直接在数据库 system_dicts 表中修改模型的 cost (积分消耗) 字段。")
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
fetch_and_init()
|