solorpower_crawler/config.py

209 lines
7.1 KiB
Python

# ==========================================
# config.py - 다중 업체(Multi-Tenant) 설정 관리
# ==========================================
# ---------------------------------------------------------
# [시스템 상수] 각 크롤러 시스템의 URL 및 엔드포인트
# ---------------------------------------------------------
SYSTEM_CONSTANTS = {
'nrems': {
'api_url': 'http://www.nrems.co.kr/v2/local/proc/index_proc.php',
'detail_url': 'http://www.nrems.co.kr/v2/local/comp/cp_inv.php',
'inv_proc_url': 'http://www.nrems.co.kr/v2/local/proc/cp_inv_proc.php'
},
'kremc': {
'login_url': 'https://kremc.kr/api/v2.2/login',
'api_base': 'https://kremc.kr/api/v2.2',
'enso_type': '15001'
},
'sun_wms': {
'base_url': 'http://tb6.sun-wms.com',
'login_url': 'http://tb6.sun-wms.com/public/main/login_chk.php',
'data_url': 'http://tb6.sun-wms.com/public/main/realdata.php',
'statics_url': 'http://tb6.sun-wms.com/public/statics/statics.php'
},
'hyundai': {
'base_url': 'https://hs3.hyundai-es.co.kr',
'login_path': '/hismart/login',
'data_path': '/hismart/site/getSolraUnitedWork'
},
'cmsolar': {
'base_url': 'http://www.cmsolar2.kr',
'api_url': 'http://www.cmsolar2.kr',
'login_url': 'http://www.cmsolar2.kr/login_ok.php',
'data_url': 'http://www.cmsolar2.kr/plant/sub/report_ok.php'
}
}
# ---------------------------------------------------------
# [업체 목록] 업체 > 발전소 계층 구조
# ---------------------------------------------------------
COMPANIES = [
{
'company_id': 'sunwind',
'company_name': '태양과바람',
'plants': [
# NREMS 계열 - 1, 2호기 (분리 처리)
# id는 크롤러 내부에서 'nrems-01', 'nrems-02'로 분리 할당
{
'name': '1호기, 2호기',
'display_name': 'SPLIT_1_2',
'type': 'nrems',
'auth': {
'pscode': 'duce2023072288'
},
'options': {
'is_split': True
},
'start_date': '2014-03-31',
'capacity_kw': 100.0 # 1호기 50kW + 2호기 50kW
# id는 크롤러에서 동적 할당 (nrems-01, nrems-02)
},
# NREMS 계열 - 3호기
{
'id': 'nrems-03',
'name': '3호기',
'type': 'nrems',
'auth': {
'pscode': 'dc2023121086'
},
'options': {
'is_split': False
},
'start_date': '2015-12-22',
'capacity_kw': 99.82
},
# NREMS 계열 - 4호기
{
'id': 'nrems-04',
'name': '4호기',
'type': 'nrems',
'auth': {
'pscode': 'dc2023121085'
},
'options': {
'is_split': False
},
'start_date': '2017-01-11',
'capacity_kw': 88.2
},
# NREMS 계열 - 9호기
{
'id': 'nrems-09',
'name': '9호기',
'type': 'nrems',
'auth': {
'pscode': 'a2020061008'
},
'options': {
'is_split': False
},
'start_date': '2020-10-28',
'capacity_kw': 99.12
},
# KREMC - 5호기
{
'id': 'kremc-05',
'name': '5호기',
'type': 'kremc',
'auth': {
'user_id': '서대문도서관',
'password': 'sunhope5!'
},
'options': {
'cid': '10013000376',
'cityProvCode': '11',
'rgnCode': '11410',
'dongCode': '1141011700'
},
'start_date': '2018-06-28',
'capacity_kw': 42.7
},
# Sun-WMS - 6호기
{
'id': 'sunwms-06',
'name': '6호기',
'type': 'sun_wms',
'auth': {
'payload_id': 'kc0fXUW0LUm2wZa+2NQI0Q==',
'payload_pw': 'PGXjU6ib2mKYwtrh2i3fIQ=='
},
'options': {},
'start_date': '2019-12-30',
'capacity_kw': 49.9
},
# 현대 - 8호기
{
'id': 'hyundai-08',
'name': '8호기',
'type': 'hyundai',
'auth': {
'user_id': 'epecoop',
'password': 'sunhope0419',
'site_id': 'M0494'
},
'options': {},
'start_date': '2020-02-06',
'capacity_kw': 99.9
},
# CMSolar - 10호기
{
'id': 'cmsolar-10',
'name': '10호기',
'type': 'cmsolar',
'auth': {
'login_id': 'sy7144',
'login_pw': 'sy7144',
'site_no': '834'
},
'options': {},
'start_date': '2020-08-31',
'capacity_kw': 31.5
}
]
}
]
# ---------------------------------------------------------
# [헬퍼 함수] 평탄화된 발전소 리스트 반환
# ---------------------------------------------------------
def get_all_plants():
"""
모든 업체의 발전소 정보를 평탄화하여 반환
"""
all_plants = []
for company in COMPANIES:
company_id = company.get('company_id', '')
company_name = company.get('company_name', '')
for plant in company.get('plants', []):
plant_type = plant.get('type', '')
system_config = SYSTEM_CONSTANTS.get(plant_type, {})
plant_info = {
'company_id': company_id,
'company_name': company_name,
'id': plant.get('id', ''), # DB용 고유 ID
'name': plant.get('name', ''),
'display_name': plant.get('display_name', plant.get('name', '')),
'type': plant_type,
'auth': plant.get('auth', {}),
'options': plant.get('options', {}),
'start_date': plant.get('start_date', ''),
'capacity_kw': plant.get('capacity_kw', 0.0),
'system': system_config
}
all_plants.append(plant_info)
return all_plants
def get_plants_by_company(company_id):
"""특정 업체의 발전소만 반환"""
return [p for p in get_all_plants() if p['company_id'] == company_id]
def get_plants_by_type(plant_type):
"""특정 타입의 발전소만 반환"""
return [p for p in get_all_plants() if p['type'] == plant_type]