diff --git a/README.md b/README.md index cfaf5bd..4d52bd0 100644 --- a/README.md +++ b/README.md @@ -28,20 +28,14 @@ pip install -r requirements.txt 1. `.env` 파일에 API 키 설정: ``` # OpenAI API 키 -OPENAI_API_KEY=your-actual-api-key +OPENAI_API_KEY=your-openai-api-key # 공공데이터 API 키 (국토교통부) -APT_TRADE_API_KEY=your-key # 아파트 매매 -APT_RENT_API_KEY=your-key # 아파트 전월세 -OFFI_TRADE_API_KEY=your-key # 오피스텔 매매 -OFFI_RENT_API_KEY=your-key # 오피스텔 전월세 -SH_TRADE_API_KEY=your-key # 연립/다세대 매매 -SH_RENT_API_KEY=your-key # 연립/다세대 전월세 -HOUSE_TRADE_API_KEY=your-key # 단독/다가구 매매 -HOUSE_RENT_API_KEY=your-key # 단독/다가구 전월세 +PUBLIC_DATA_API_KEY=your-public-data-api-key ``` -2. 공공데이터포털(data.go.kr)에서 각 API 서비스키 발급 +2. 공공데이터포털(data.go.kr)에서 국토교통부 실거래가 API 서비스키 발급 + - 하나의 키로 모든 부동산 API 사용 가능 ## 실행 diff --git a/backend/public_data_api.py b/backend/public_data_api.py index 6bf7a9c..6fe295f 100644 --- a/backend/public_data_api.py +++ b/backend/public_data_api.py @@ -14,72 +14,30 @@ class PublicDataAPIClient: """API 키 및 기본 설정 초기화""" self.base_url = "http://apis.data.go.kr/1613000" + # 통합 API 키 + self.api_key = os.getenv("PUBLIC_DATA_API_KEY") + # API 엔드포인트 매핑 self.endpoints = { # 아파트 - ("아파트", "매매"): { - "url": f"{self.base_url}/RTMSDataSvcAptTrade/getRTMSDataSvcAptTrade", - "key": os.getenv("APT_TRADE_API_KEY") - }, - ("아파트", "전세"): { - "url": f"{self.base_url}/RTMSDataSvcAptRent/getRTMSDataSvcAptRent", - "key": os.getenv("APT_RENT_API_KEY") - }, - ("아파트", "월세"): { - "url": f"{self.base_url}/RTMSDataSvcAptRent/getRTMSDataSvcAptRent", - "key": os.getenv("APT_RENT_API_KEY") - }, + ("아파트", "매매"): f"{self.base_url}/RTMSDataSvcAptTrade/getRTMSDataSvcAptTrade", + ("아파트", "전세"): f"{self.base_url}/RTMSDataSvcAptRent/getRTMSDataSvcAptRent", + ("아파트", "월세"): f"{self.base_url}/RTMSDataSvcAptRent/getRTMSDataSvcAptRent", # 오피스텔 - ("오피스텔", "매매"): { - "url": f"{self.base_url}/RTMSDataSvcOffiTrade/getRTMSDataSvcOffiTrade", - "key": os.getenv("OFFI_TRADE_API_KEY") - }, - ("오피스텔", "전세"): { - "url": f"{self.base_url}/RTMSDataSvcOffiRent/getRTMSDataSvcOffiRent", - "key": os.getenv("OFFI_RENT_API_KEY") - }, - ("오피스텔", "월세"): { - "url": f"{self.base_url}/RTMSDataSvcOffiRent/getRTMSDataSvcOffiRent", - "key": os.getenv("OFFI_RENT_API_KEY") - }, + ("오피스텔", "매매"): f"{self.base_url}/RTMSDataSvcOffiTrade/getRTMSDataSvcOffiTrade", + ("오피스텔", "전세"): f"{self.base_url}/RTMSDataSvcOffiRent/getRTMSDataSvcOffiRent", + ("오피스텔", "월세"): f"{self.base_url}/RTMSDataSvcOffiRent/getRTMSDataSvcOffiRent", # 빌라/연립 - ("빌라", "매매"): { - "url": f"{self.base_url}/RTMSDataSvcSHTrade/getRTMSDataSvcSHTrade", - "key": os.getenv("SH_TRADE_API_KEY") - }, - ("빌라", "전세"): { - "url": f"{self.base_url}/RTMSDataSvcSHRent/getRTMSDataSvcSHRent", - "key": os.getenv("SH_RENT_API_KEY") - }, - ("빌라", "월세"): { - "url": f"{self.base_url}/RTMSDataSvcSHRent/getRTMSDataSvcSHRent", - "key": os.getenv("SH_RENT_API_KEY") - }, - ("연립주택", "매매"): { - "url": f"{self.base_url}/RTMSDataSvcSHTrade/getRTMSDataSvcSHTrade", - "key": os.getenv("SH_TRADE_API_KEY") - }, - ("연립주택", "전세"): { - "url": f"{self.base_url}/RTMSDataSvcSHRent/getRTMSDataSvcSHRent", - "key": os.getenv("SH_RENT_API_KEY") - }, + ("빌라", "매매"): f"{self.base_url}/RTMSDataSvcSHTrade/getRTMSDataSvcSHTrade", + ("빌라", "전세"): f"{self.base_url}/RTMSDataSvcSHRent/getRTMSDataSvcSHRent", + ("빌라", "월세"): f"{self.base_url}/RTMSDataSvcSHRent/getRTMSDataSvcSHRent", + ("연립주택", "매매"): f"{self.base_url}/RTMSDataSvcSHTrade/getRTMSDataSvcSHTrade", + ("연립주택", "전세"): f"{self.base_url}/RTMSDataSvcSHRent/getRTMSDataSvcSHRent", # 주택 - ("주택", "매매"): { - "url": f"{self.base_url}/RTMSDataSvcSHHouseTrade/getRTMSDataSvcSHHouseTrade", - "key": os.getenv("HOUSE_TRADE_API_KEY") - }, - ("주택", "전세"): { - "url": f"{self.base_url}/RTMSDataSvcSHHouseRent/getRTMSDataSvcSHHouseRent", - "key": os.getenv("HOUSE_RENT_API_KEY") - }, - ("단독주택", "매매"): { - "url": f"{self.base_url}/RTMSDataSvcSHHouseTrade/getRTMSDataSvcSHHouseTrade", - "key": os.getenv("HOUSE_TRADE_API_KEY") - }, - ("다가구주택", "매매"): { - "url": f"{self.base_url}/RTMSDataSvcSHHouseTrade/getRTMSDataSvcSHHouseTrade", - "key": os.getenv("HOUSE_TRADE_API_KEY") - } + ("주택", "매매"): f"{self.base_url}/RTMSDataSvcSHTrade/getRTMSDataSvcSHTrade", + ("주택", "전세"): f"{self.base_url}/RTMSDataSvcSHRent/getRTMSDataSvcSHRent", + ("단독주택", "매매"): f"{self.base_url}/RTMSDataSvcSHTrade/getRTMSDataSvcSHTrade", + ("다가구주택", "매매"): f"{self.base_url}/RTMSDataSvcSHTrade/getRTMSDataSvcSHTrade" } def get_real_estate_data( @@ -109,21 +67,19 @@ class PublicDataAPIClient: # 매물 형태 정규화 property_type = self._normalize_property_type(property_type) transaction_type = self._normalize_transaction_type(transaction_type) - print(property_type) - print(transaction_type) # 엔드포인트 찾기 - endpoint_info = self.endpoints.get((property_type, transaction_type)) - if not endpoint_info: + endpoint_url = self.endpoints.get((property_type, transaction_type)) + if not endpoint_url: return [] - if not endpoint_info["key"] or endpoint_info["key"] == "your-api-key-here": - print(f"Warning: API key not configured for {property_type} {transaction_type}") + if not self.api_key or self.api_key == "your-public-data-api-key-here": + print(f"Warning: PUBLIC_DATA_API_KEY not configured") return [] # API 호출 params = { - "serviceKey": endpoint_info["key"], + "serviceKey": self.api_key, "LAWD_CD": region_code, "DEAL_YMD": deal_ymd, "pageNo": 1, @@ -131,7 +87,7 @@ class PublicDataAPIClient: } try: - response = requests.get(endpoint_info["url"], params=params, timeout=10) + response = requests.get(endpoint_url, params=params, timeout=10) response.raise_for_status() # XML 파싱 diff --git a/docs/project_logs.txt b/docs/project_logs.txt index d4ad0c6..d0ccedb 100644 --- a/docs/project_logs.txt +++ b/docs/project_logs.txt @@ -47,6 +47,21 @@ - docs/project_plan.md 업데이트 (API 가이드 문서 추가) - 웹 검색 및 브라우저를 통한 실제 API 정보 수집 +[2025-08-19 15:51:03] 공공데이터 API 키 통합 작업 완료 +- .env 파일 수정 + - 8개의 개별 API 키를 PUBLIC_DATA_API_KEY 하나로 통합 + - 공공데이터포털 서비스키는 모든 API에서 공통 사용 가능 +- backend/public_data_api.py 수정 + - 통합 API 키 사용하도록 변경 + - endpoints 구조 단순화 (URL만 저장) + - 불필요한 print 문 제거 +- README.md 업데이트 + - API 키 설정 방법 간소화 + - 하나의 키로 모든 부동산 API 사용 가능함을 명시 + +[2025-08-19 15:46:53] 공공데이터 API 키 통합 작업 시작 +- 여러 개의 API 키를 하나로 통일 + [2025-08-19 15:22:10] OpenAI 기반 매물 필터링 기능 추가 완료 - backend/openai_parser.py 수정 - filter_listings 메서드 추가