mirror of
https://github.com/stardrophere/InsightRadar.git
synced 2026-06-05 23:07:51 +08:00
修改成在启动的时候可以自动初始化数据
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
"""
|
||||
信息源 CRUD:对 InfoSource 的增删改查,供 API 与爬虫使用
|
||||
"""
|
||||
from sqlite3 import IntegrityError
|
||||
|
||||
from sqlalchemy.orm import Session
|
||||
from typing import List, Optional
|
||||
|
||||
@@ -22,10 +24,16 @@ def get_multi(db: Session, skip: int = 0, limit: int = 100) -> List[InfoSource]:
|
||||
def create(db: Session, obj_in: InfoSourceCreate) -> InfoSource:
|
||||
"""创建新的信息源"""
|
||||
db_obj = InfoSource(**obj_in.model_dump())
|
||||
db.add(db_obj)
|
||||
db.commit()
|
||||
db.refresh(db_obj)
|
||||
return db_obj
|
||||
try:
|
||||
db.add(db_obj)
|
||||
db.commit()
|
||||
db.refresh(db_obj)
|
||||
return db_obj
|
||||
except IntegrityError:
|
||||
db.rollback()
|
||||
finally:
|
||||
db.close()
|
||||
return db_obj
|
||||
|
||||
|
||||
def update(db: Session, db_obj: InfoSource, obj_in: InfoSourceUpdate) -> InfoSource:
|
||||
|
||||
+35
-39
@@ -1,46 +1,42 @@
|
||||
import requests
|
||||
import json
|
||||
|
||||
# 请将此处的 URL 替换为您实际的 API 基础域名
|
||||
api_url = "http://10.252.130.135:8000/api/v1/sources/"
|
||||
from app.database import SessionLocal
|
||||
from app.crud.crud_source import create
|
||||
from app.models.models import SourceType
|
||||
from app.schemas.source_schema import InfoSourceCreate
|
||||
|
||||
# 请求头
|
||||
headers = {
|
||||
"Content-Type": "application/json",
|
||||
# "Authorization": "Bearer YOUR_TOKEN" # 如果接口需要鉴权,请取消注释并填入 Token
|
||||
}
|
||||
|
||||
# 解析后的数据源列表
|
||||
sources_data = [
|
||||
{"name": "今日头条", "url": "toutiao"},
|
||||
{"name": "百度热搜", "url": "baidu"},
|
||||
{"name": "华尔街见闻", "url": "wallstreetcn-hot"},
|
||||
{"name": "澎湃新闻", "url": "thepaper"},
|
||||
{"name": "bilibili 热搜", "url": "bilibili-hot-search"},
|
||||
{"name": "财联社热门", "url": "cls-hot"},
|
||||
{"name": "凤凰网", "url": "ifeng"},
|
||||
{"name": "贴吧", "url": "tieba"},
|
||||
{"name": "微博", "url": "weibo"},
|
||||
{"name": "抖音", "url": "douyin"},
|
||||
{"name": "知乎", "url": "zhihu"}
|
||||
]
|
||||
def init():
|
||||
|
||||
# 遍历数据并发送 POST 请求
|
||||
for item in sources_data:
|
||||
payload = {
|
||||
"source_name": item["name"],
|
||||
"source_type": "HOT_TREND",
|
||||
"home_url": item["url"],
|
||||
"is_enabled": True
|
||||
}
|
||||
# 解析后的数据源列表
|
||||
sources_data = [
|
||||
{"name": "今日头条", "url": "toutiao"},
|
||||
{"name": "百度热搜", "url": "baidu"},
|
||||
{"name": "华尔街见闻", "url": "wallstreetcn-hot"},
|
||||
{"name": "澎湃新闻", "url": "thepaper"},
|
||||
{"name": "bilibili 热搜", "url": "bilibili-hot-search"},
|
||||
{"name": "财联社热门", "url": "cls-hot"},
|
||||
{"name": "凤凰网", "url": "ifeng"},
|
||||
{"name": "贴吧", "url": "tieba"},
|
||||
{"name": "微博", "url": "weibo"},
|
||||
{"name": "抖音", "url": "douyin"},
|
||||
{"name": "知乎", "url": "zhihu"}
|
||||
]
|
||||
|
||||
try:
|
||||
response = requests.post(api_url, headers=headers, data=json.dumps(payload))
|
||||
if response.status_code in (200, 201):
|
||||
print(f"✅ 成功创建: {item['name']}")
|
||||
else:
|
||||
print(f"❌ 创建失败: {item['name']} - 状态码: {response.status_code} - 详情: {response.text}")
|
||||
except Exception as e:
|
||||
print(f"⚠️ 请求异常: {item['name']} - 错误: {e}")
|
||||
# 遍历数据并发送 POST 请求
|
||||
for item in sources_data:
|
||||
|
||||
try:
|
||||
|
||||
with SessionLocal() as db:
|
||||
|
||||
print("执行完毕!")
|
||||
create(db, InfoSourceCreate(
|
||||
source_name=item["name"],
|
||||
source_type=SourceType.HOT_TREND,
|
||||
home_url=item["url"],
|
||||
is_enabled=True
|
||||
))
|
||||
print(f"创建订阅源{item['name']}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"⚠️ 请求异常: {item['name']} - 错误: {e}")
|
||||
|
||||
+7
-2
@@ -1,6 +1,7 @@
|
||||
# app/main.py
|
||||
import logging
|
||||
import os
|
||||
import httpx
|
||||
from contextlib import asynccontextmanager
|
||||
from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
@@ -21,6 +22,7 @@ from app.services.summary_service import generate_unified_summaries
|
||||
from app.services.delivery_service import check_and_deliver
|
||||
from app.database import engine
|
||||
from app.models.models import Base
|
||||
from app.initialize import init
|
||||
|
||||
# 路由总线
|
||||
from app.api.router import api_router
|
||||
@@ -41,7 +43,11 @@ async def lifespan(app: FastAPI):
|
||||
logging.info("正在初始化数据库表...")
|
||||
Base.metadata.create_all(bind=engine)
|
||||
logging.info("数据库表初始化完成!")
|
||||
|
||||
|
||||
logging.info("初始化订阅源")
|
||||
init()
|
||||
logging.info("订阅源初始化完毕")
|
||||
|
||||
# 2. 配置并启动定时任务
|
||||
scheduler.add_job(
|
||||
fetch_and_save_trending_data,
|
||||
@@ -106,7 +112,6 @@ app.add_middleware(
|
||||
# 版本控制
|
||||
app.include_router(api_router, prefix="/api/v1")
|
||||
|
||||
|
||||
# 健康检查
|
||||
@app.get("/", tags=["健康检查"])
|
||||
async def root():
|
||||
|
||||
@@ -93,6 +93,10 @@ class InfoSource(Base):
|
||||
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=utcnow)
|
||||
updated_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=utcnow, onupdate=utcnow)
|
||||
|
||||
__table_args__ = (
|
||||
UniqueConstraint("source_name", name="uix_source_name"),
|
||||
)
|
||||
|
||||
|
||||
# ==========================================
|
||||
|
||||
Reference in New Issue
Block a user