# Bizmax Excel Downloader 이 디렉터리에는 `hyun.bizmax.net`, `hyun2.bizmax.net` 고객목록 엑셀을 기간별로 다운로드하는 스크립트가 들어 있습니다. ## 파일 - `bizmax-download-excel.ts`: 실제 다운로드 로직 - `convert-xlsx-to-csv.ts`: 다운로드된 `.xlsx` 전체를 하나의 `.csv`로 합침 - `compare-csv-phone.ts`: `a.csv`, `b.csv`를 전화번호 기준으로 비교 - `run-bizmax.sh`: `hyun`, `hyun2`, `all` 선택 실행 - `run-hyun.sh`: `hyun.bizmax.net` 전용 실행 - `run-hyun2.sh`: `hyun2.bizmax.net` 전용 실행 - `run-convert-csv.sh`: 다운로드된 `.xlsx` 전체를 하나의 `.csv`로 합침 - `run-compare-csv.sh`: `a.csv`, `b.csv`를 전화번호 기준으로 비교 - `.env.example`: 환경변수 예시 ## 1. 환경 설정 `.env.example`를 복사해서 `.env` 파일을 만듭니다. ```bash cp .env.example .env ``` `.env` 예시: ```env BIZMAX_ID=JH1204 BIZMAX_PASSWORD=12345 BIZMAX_RANGE_START=2016-01-01 BIZMAX_BATCH_MONTHS=3 BIZMAX_BASE_URLS=https://hyun.bizmax.net,https://hyun2.bizmax.net BIZMAX_OUTPUT_DIR=/home/pure13700/project/download/output ``` ## 2. 의존성 설치 최초 1회: ```bash npm install ``` 현재 `package.json`에는 `axios`, `cheerio`, `xlsx`가 들어 있습니다. ## 3. 실행 방법 두 사이트 모두 실행: ```bash ./run-bizmax.sh all ``` `hyun.bizmax.net`만 실행: ```bash ./run-bizmax.sh hyun ``` 또는: ```bash ./run-hyun.sh ``` `hyun2.bizmax.net`만 실행: ```bash ./run-bizmax.sh hyun2 ``` 또는: ```bash ./run-hyun2.sh ``` 직접 TypeScript 파일 실행: ```bash node --experimental-strip-types ./bizmax-download-excel.ts ``` 이 경우 `.env`는 자동 로드되지 않으므로, 셸에서 환경변수를 먼저 export 하거나 `run-*.sh` 사용을 권장합니다. ## 4. 동작 방식 - 로그인 - 고객목록 진입 - `2016-01-01`부터 현재 날짜까지 3개월 단위로 조회 - 각 기간별 조회 결과가 `0건`이면 건너뜀 - `1건 이상`이면 첫 번째 엑셀 다운로드 - 파일명에 사이트명과 기간을 붙여 저장 예시 출력: ```text [hyun_bizmax_net] SKIP 2016-01-01~2016-03-31 (0건) /home/pure13700/project/download/output/hyun_bizmax_net_현대생활건강_프로그램_고객목록_2016-04-01_2016-06-30.xlsx ``` ## 5. 저장 위치 기본 저장 위치: ```text /home/pure13700/project/download/output ``` 변경하려면 `.env`의 `BIZMAX_OUTPUT_DIR` 값을 수정합니다. CSV 저장 위치 기본값: ```text /home/pure13700/project/download/output/csv ``` 변경하려면 환경변수 `BIZMAX_CSV_DIR`를 사용합니다. ## 6. XLSX -> CSV 변환 다운로드된 전체 `.xlsx`를 하나의 `.csv`로 합치기: ```bash ./run-convert-csv.sh ``` 또는: ```bash node --experimental-strip-types ./convert-xlsx-to-csv.ts ``` 다른 CSV 출력 폴더를 쓰려면: ```bash BIZMAX_CSV_DIR=/home/pure13700/project/download/output/csv node --experimental-strip-types ./convert-xlsx-to-csv.ts ``` 기본 출력 파일: ```text /home/pure13700/project/download/output/csv/bizmax-all.csv ``` 파일명을 바꾸려면: ```bash BIZMAX_CSV_NAME=my-all.csv node --experimental-strip-types ./convert-xlsx-to-csv.ts ``` 동작 방식: - `output/` 아래의 `.xlsx` 파일들을 찾음 - 각 워크시트를 읽음 - 모든 데이터를 하나의 CSV로 합침 - 앞에 `source_file`, `source_sheet` 컬럼을 추가함 참고: - `.xlsx` 파싱은 `xlsx` 패키지로 처리합니다. - 모든 파일의 헤더 구조가 동일하다는 전제를 두는 편이 안전합니다. ## 7. 주의 사항 - 계정이 SMS 추가 인증을 요구하면 `axios`만으로는 완료되지 않습니다. - 사이트 구조가 바뀌면 hidden input 이름이나 다운로드 파라미터도 같이 바뀔 수 있습니다. - 장기간 전체 다운로드라 실행 시간이 꽤 걸릴 수 있습니다. ## 8. CSV 전화번호 비교 기본 실행: ```bash COMPARE_FILE_A=./a.csv COMPARE_FILE_B=./b.csv ./run-compare-csv.sh ``` 또는: ```bash COMPARE_FILE_A=./a.csv COMPARE_FILE_B=./b.csv node --experimental-strip-types ./compare-csv-phone.ts ``` 기본값: - `COMPARE_MODE=intersection`: `a.csv`와 `b.csv`에 모두 있는 전화번호만 출력 - `COMPARE_PHONE_COL_A=phone` - `COMPARE_PHONE_COL_B=phone` `a.csv`에만 있는 전화번호만 뽑으려면: ```bash COMPARE_FILE_A=./a.csv COMPARE_FILE_B=./b.csv COMPARE_MODE=only_a node --experimental-strip-types ./compare-csv-phone.ts ``` 출력 파일 기본값: ```text ./compare-intersection.csv ```