불필요 main api 정리
parent
3d1f8683a4
commit
cb5dd5f25f
|
|
@ -1,5 +1,4 @@
|
||||||
import os
|
import os
|
||||||
from typing import Optional
|
|
||||||
from fastapi import FastAPI, HTTPException
|
from fastapi import FastAPI, HTTPException
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
from fastapi.staticfiles import StaticFiles
|
from fastapi.staticfiles import StaticFiles
|
||||||
|
|
@ -7,7 +6,7 @@ from fastapi.responses import FileResponse
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
import uvicorn
|
import uvicorn
|
||||||
|
|
||||||
from models import RealEstateQuery, ParsedRealEstate
|
from models import RealEstateQuery
|
||||||
from openai_parser import OpenAIParser
|
from openai_parser import OpenAIParser
|
||||||
from public_data_api import PublicDataAPIClient
|
from public_data_api import PublicDataAPIClient
|
||||||
|
|
||||||
|
|
@ -39,40 +38,6 @@ async def serve_index():
|
||||||
"""메인 페이지 제공"""
|
"""메인 페이지 제공"""
|
||||||
return FileResponse("../frontend/index.html")
|
return FileResponse("../frontend/index.html")
|
||||||
|
|
||||||
@app.post("/api/parse", response_model=ParsedRealEstate)
|
|
||||||
async def parse_real_estate(query: RealEstateQuery):
|
|
||||||
"""자연어 입력을 파싱하여 부동산 정보 추출"""
|
|
||||||
if not parser:
|
|
||||||
raise HTTPException(
|
|
||||||
status_code=500,
|
|
||||||
detail="OpenAI API key not configured. Please set OPENAI_API_KEY in .env file"
|
|
||||||
)
|
|
||||||
|
|
||||||
try:
|
|
||||||
result = await parser.parse_real_estate_query(query.text)
|
|
||||||
return result
|
|
||||||
except Exception as e:
|
|
||||||
raise HTTPException(status_code=500, detail=str(e))
|
|
||||||
|
|
||||||
@app.get("/api/real-estate-data")
|
|
||||||
async def get_real_estate_listings(
|
|
||||||
property_type: str = "아파트",
|
|
||||||
transaction_type: str = "매매",
|
|
||||||
region_code: str = "11680",
|
|
||||||
deal_ymd: Optional[str] = None
|
|
||||||
):
|
|
||||||
"""공공데이터 API를 통한 실거래가 조회"""
|
|
||||||
try:
|
|
||||||
data = public_data_client.get_real_estate_data(
|
|
||||||
property_type=property_type,
|
|
||||||
transaction_type=transaction_type,
|
|
||||||
region_code=region_code,
|
|
||||||
deal_ymd=deal_ymd
|
|
||||||
)
|
|
||||||
return {"data": data, "count": len(data)}
|
|
||||||
except Exception as e:
|
|
||||||
raise HTTPException(status_code=500, detail=str(e))
|
|
||||||
|
|
||||||
@app.post("/api/search")
|
@app.post("/api/search")
|
||||||
async def search_real_estate(query: RealEstateQuery):
|
async def search_real_estate(query: RealEstateQuery):
|
||||||
"""자연어 검색 후 실거래가 데이터 조회"""
|
"""자연어 검색 후 실거래가 데이터 조회"""
|
||||||
|
|
@ -94,7 +59,6 @@ async def search_real_estate(query: RealEstateQuery):
|
||||||
transaction_type=parsed.transaction_type,
|
transaction_type=parsed.transaction_type,
|
||||||
region_code=parsed.region_code
|
region_code=parsed.region_code
|
||||||
)
|
)
|
||||||
print(listings)
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"parsed": parsed,
|
"parsed": parsed,
|
||||||
|
|
|
||||||
|
|
@ -1,71 +0,0 @@
|
||||||
{
|
|
||||||
"종로구": "11110",
|
|
||||||
"중구": "11140",
|
|
||||||
"용산구": "11170",
|
|
||||||
"성동구": "11200",
|
|
||||||
"광진구": "11215",
|
|
||||||
"동대문구": "11230",
|
|
||||||
"중랑구": "11260",
|
|
||||||
"성북구": "11290",
|
|
||||||
"강북구": "11305",
|
|
||||||
"도봉구": "11320",
|
|
||||||
"노원구": "11350",
|
|
||||||
"은평구": "11380",
|
|
||||||
"서대문구": "11410",
|
|
||||||
"마포구": "11440",
|
|
||||||
"양천구": "11470",
|
|
||||||
"강서구": "11500",
|
|
||||||
"구로구": "11530",
|
|
||||||
"금천구": "11545",
|
|
||||||
"영등포구": "11560",
|
|
||||||
"동작구": "11590",
|
|
||||||
"관악구": "11620",
|
|
||||||
"서초구": "11650",
|
|
||||||
"강남구": "11680",
|
|
||||||
"송파구": "11710",
|
|
||||||
"강동구": "11740",
|
|
||||||
"수원시": "41110",
|
|
||||||
"성남시": "41130",
|
|
||||||
"의정부시": "41150",
|
|
||||||
"안양시": "41170",
|
|
||||||
"부천시": "41190",
|
|
||||||
"광명시": "41210",
|
|
||||||
"평택시": "41220",
|
|
||||||
"안산시": "41270",
|
|
||||||
"고양시": "41280",
|
|
||||||
"과천시": "41290",
|
|
||||||
"구리시": "41310",
|
|
||||||
"남양주시": "41360",
|
|
||||||
"오산시": "41370",
|
|
||||||
"시흥시": "41390",
|
|
||||||
"군포시": "41410",
|
|
||||||
"의왕시": "41430",
|
|
||||||
"하남시": "41450",
|
|
||||||
"용인시": "41460",
|
|
||||||
"파주시": "41480",
|
|
||||||
"이천시": "41500",
|
|
||||||
"안성시": "41550",
|
|
||||||
"김포시": "41570",
|
|
||||||
"화성시": "41590",
|
|
||||||
"광주시": "41610",
|
|
||||||
"양주시": "41630",
|
|
||||||
"포천시": "41650",
|
|
||||||
"여주시": "41670",
|
|
||||||
"분당구": "41135",
|
|
||||||
"수정구": "41131",
|
|
||||||
"중원구": "41133",
|
|
||||||
"장안구": "41111",
|
|
||||||
"권선구": "41113",
|
|
||||||
"팔달구": "41115",
|
|
||||||
"영통구": "41117",
|
|
||||||
"만안구": "41171",
|
|
||||||
"동안구": "41173",
|
|
||||||
"상록구": "41271",
|
|
||||||
"단원구": "41273",
|
|
||||||
"덕양구": "41281",
|
|
||||||
"일산동구": "41285",
|
|
||||||
"일산서구": "41287",
|
|
||||||
"처인구": "41461",
|
|
||||||
"기흥구": "41463",
|
|
||||||
"수지구": "41465"
|
|
||||||
}
|
|
||||||
|
|
@ -47,6 +47,26 @@
|
||||||
- docs/project_plan.md 업데이트 (API 가이드 문서 추가)
|
- docs/project_plan.md 업데이트 (API 가이드 문서 추가)
|
||||||
- 웹 검색 및 브라우저를 통한 실제 API 정보 수집
|
- 웹 검색 및 브라우저를 통한 실제 API 정보 수집
|
||||||
|
|
||||||
|
[2025-08-19 15:12:44] 사용하지 않는 API 엔드포인트 제거 작업 완료
|
||||||
|
- backend/main.py 정리
|
||||||
|
- /api/parse 엔드포인트 제거 (사용 안함)
|
||||||
|
- /api/real-estate-data 엔드포인트 제거 (사용 안함)
|
||||||
|
- /api/search 엔드포인트만 유지 (메인 API)
|
||||||
|
- 불필요한 import 제거 (Optional, ParsedRealEstate)
|
||||||
|
- 디버그용 print 문 제거
|
||||||
|
- data/region_codes_simple.json 삭제 (사용 안함)
|
||||||
|
- docs/project_plan.md 업데이트
|
||||||
|
- 폴더 구조 현행화
|
||||||
|
- API 엔드포인트 섹션 추가
|
||||||
|
- 작업 단계 업데이트
|
||||||
|
- 최종 API 구조:
|
||||||
|
- GET / : 메인 페이지
|
||||||
|
- POST /api/search : 자연어 검색 + 실거래가 조회
|
||||||
|
- GET /static/* : 정적 파일
|
||||||
|
|
||||||
|
[2025-08-19 15:10:35] 사용하지 않는 API 엔드포인트 제거 작업 시작
|
||||||
|
- 불필요한 엔드포인트 정리
|
||||||
|
|
||||||
[2025-08-19 14:25:44] 프론트엔드 실거래가 표시 기능 변경 완료
|
[2025-08-19 14:25:44] 프론트엔드 실거래가 표시 기능 변경 완료
|
||||||
- frontend/script.js 수정
|
- frontend/script.js 수정
|
||||||
- /api/parse에서 /api/search로 엔드포인트 변경
|
- /api/parse에서 /api/search로 엔드포인트 변경
|
||||||
|
|
|
||||||
|
|
@ -14,18 +14,19 @@
|
||||||
C:\o2o\RealEstateSearch\
|
C:\o2o\RealEstateSearch\
|
||||||
├── docs/
|
├── docs/
|
||||||
│ ├── project_plan.md
|
│ ├── project_plan.md
|
||||||
│ └── project_logs.txt
|
│ ├── project_logs.txt
|
||||||
|
│ └── api_guide.md
|
||||||
├── backend/
|
├── backend/
|
||||||
│ ├── main.py (FastAPI 서버)
|
│ ├── main.py (FastAPI 서버)
|
||||||
│ ├── openai_parser.py (OpenAI 파싱 로직)
|
│ ├── openai_parser.py (OpenAI 파싱 + 지역코드 변환)
|
||||||
│ └── models.py (데이터 모델)
|
│ ├── models.py (데이터 모델)
|
||||||
|
│ └── public_data_api.py (공공데이터 API 클라이언트)
|
||||||
├── frontend/
|
├── frontend/
|
||||||
│ ├── index.html
|
│ ├── index.html
|
||||||
│ ├── style.css
|
│ ├── style.css
|
||||||
│ └── script.js
|
│ └── script.js
|
||||||
├── data/
|
├── data/
|
||||||
│ ├── region_codes.json (전체 시군구 코드)
|
│ └── region_codes.json (시군구 코드)
|
||||||
│ └── region_codes_simple.json (간략 버전)
|
|
||||||
├── requirements.txt
|
├── requirements.txt
|
||||||
├── .env (API 키 저장)
|
├── .env (API 키 저장)
|
||||||
├── .gitignore (Git 제외 파일)
|
├── .gitignore (Git 제외 파일)
|
||||||
|
|
@ -39,3 +40,20 @@ C:\o2o\RealEstateSearch\
|
||||||
- [x] OpenAI 파싱 로직 구현
|
- [x] OpenAI 파싱 로직 구현
|
||||||
- [x] 프론트엔드 개발
|
- [x] 프론트엔드 개발
|
||||||
- [x] README.md 업데이트
|
- [x] README.md 업데이트
|
||||||
|
- [x] 지역 코드 변환 기능
|
||||||
|
- [x] 공공데이터 API 연동
|
||||||
|
- [x] 실거래가 표시 UI
|
||||||
|
- [x] 불필요한 코드 정리
|
||||||
|
|
||||||
|
## API 엔드포인트
|
||||||
|
|
||||||
|
### 1. GET `/`
|
||||||
|
- 메인 페이지 (index.html) 제공
|
||||||
|
|
||||||
|
### 2. POST `/api/search`
|
||||||
|
- 자연어 검색 및 실거래가 조회
|
||||||
|
- 요청: `{"text": "강남 아파트 전세"}`
|
||||||
|
- 응답: 파싱 결과 + 실거래가 목록
|
||||||
|
|
||||||
|
### 3. GET `/static/*`
|
||||||
|
- CSS, JS 등 정적 파일 제공
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue