70 lines
1.9 KiB
Python
70 lines
1.9 KiB
Python
import os
|
|
import sys
|
|
|
|
# 한글 환경 및 Tesseract 경로 강제 설정
|
|
os.environ["PYTHONIOENCODING"] = "utf-8"
|
|
os.environ["TESSDATA_PREFIX"] = r"C:\Users\User\AppData\Local\Programs\Tesseract-OCR\tessdata"
|
|
|
|
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from fastapi.responses import StreamingResponse, FileResponse
|
|
from fastapi.staticfiles import StaticFiles
|
|
from analyze import analyze_file_content
|
|
from crawler_service import run_crawler_service
|
|
|
|
app = FastAPI(title="Project Master Overseas API")
|
|
|
|
# 정적 파일 및 미들웨어 설정
|
|
app.mount("/style", StaticFiles(directory="style"), name="style")
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"],
|
|
allow_credentials=False,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
# --- HTML 라우팅 ---
|
|
@app.get("/")
|
|
async def root():
|
|
return FileResponse("index.html")
|
|
|
|
@app.get("/dashboard")
|
|
async def get_dashboard():
|
|
return FileResponse("dashboard.html")
|
|
|
|
@app.get("/mailTest")
|
|
@app.get("/mailTest.html")
|
|
async def get_mail_test():
|
|
return FileResponse("mailTest.html")
|
|
|
|
# --- 데이터 API ---
|
|
@app.get("/attachments")
|
|
async def get_attachments():
|
|
sample_path = "sample"
|
|
if not os.path.exists(sample_path):
|
|
os.makedirs(sample_path)
|
|
files = []
|
|
for f in os.listdir(sample_path):
|
|
f_path = os.path.join(sample_path, f)
|
|
if os.path.isfile(f_path):
|
|
files.append({
|
|
"name": f,
|
|
"size": f"{os.path.getsize(f_path) / 1024:.1f} KB"
|
|
})
|
|
return files
|
|
|
|
@app.get("/analyze-file")
|
|
async def analyze_file(filename: str):
|
|
"""
|
|
분석 서비스(analyze.py) 호출
|
|
"""
|
|
return analyze_file_content(filename)
|
|
|
|
@app.get("/sync")
|
|
async def sync_data():
|
|
"""
|
|
크롤링 서비스(crawler_service.py) 호출
|
|
"""
|
|
return StreamingResponse(run_crawler_service(), media_type="text_event-stream")
|