Files
bizmax_downloader/README-bizmax.md
2026-04-13 11:25:40 +09:00

201 lines
4.5 KiB
Markdown

# 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
```