googlesheet
This commit is contained in:
77
README.md
Normal file
77
README.md
Normal file
@@ -0,0 +1,77 @@
|
||||
# googlesheet
|
||||
|
||||
`bun`만으로 Google Sheets를 OAuth 인증 후 읽고, 다른 시트에 새 헤더 구조로 append 하는 예제입니다.
|
||||
|
||||
## 준비
|
||||
|
||||
1. Google Cloud Console에서 `Google Sheets API`를 활성화합니다.
|
||||
2. `OAuth client ID`를 생성합니다.
|
||||
3. 애플리케이션 유형은 `Web application`으로 만들고 아래 Redirect URI를 추가합니다.
|
||||
|
||||
```text
|
||||
http://127.0.0.1:3487/oauth2callback
|
||||
```
|
||||
|
||||
4. `.env.example`를 참고해서 `.env` 파일을 만듭니다.
|
||||
|
||||
## 실행
|
||||
|
||||
```bash
|
||||
bun run index.ts
|
||||
```
|
||||
|
||||
특정 날짜만 추출하려면 `--date` 옵션을 사용합니다.
|
||||
|
||||
```bash
|
||||
bun run google/index.ts --date 2026-04-27
|
||||
```
|
||||
|
||||
환경변수로도 줄 수 있습니다.
|
||||
|
||||
```bash
|
||||
GOOGLE_FILTER_DATE=2026-04-27 bun run google/index.ts
|
||||
```
|
||||
|
||||
특정 범위만 가져오려면 날짜 뒤에 A1 range를 넘기면 됩니다.
|
||||
|
||||
```bash
|
||||
bun run google/index.ts --date 2026-04-27 "A1:C20"
|
||||
```
|
||||
|
||||
대상 시트 URL까지 직접 넘기려면 그 다음 인자를 사용하면 됩니다.
|
||||
|
||||
```bash
|
||||
bun run google/index.ts --date 2026-04-27 "A1:Z999" "대상시트URL"
|
||||
```
|
||||
|
||||
## 동작 방식
|
||||
|
||||
- 시트 URL에서 `spreadsheetId`와 `gid`를 자동 파싱합니다.
|
||||
- 첫 실행 시 브라우저에서 Google OAuth 인증을 받습니다.
|
||||
- 발급된 refresh token은 `.tokens/google-oauth-token.json`에 저장됩니다.
|
||||
- 이후 실행부터는 저장된 refresh token으로 access token을 갱신합니다.
|
||||
- 첫 번째 행을 원본 헤더로 해석한 뒤 객체 행으로 변환합니다.
|
||||
- `created_time`이 실행 시 받은 날짜(`YYYY-MM-DD`, KST 기준)와 일치하는 행만 추출합니다.
|
||||
- 대상 시트에는 아래 헤더를 1행에 보장한 뒤 데이터를 append 합니다.
|
||||
|
||||
```text
|
||||
id
|
||||
created_time
|
||||
campaign_name
|
||||
form_name
|
||||
platform
|
||||
full_name
|
||||
phone_number
|
||||
site
|
||||
created_at
|
||||
activation_channel
|
||||
customer_group
|
||||
sales_point
|
||||
contact_number
|
||||
primary_product
|
||||
status
|
||||
key
|
||||
```
|
||||
|
||||
- 원본 헤더와 대상 헤더 이름이 같으면 해당 값을 복사합니다.
|
||||
- 없는 컬럼은 빈 문자열로 들어갑니다.
|
||||
Reference in New Issue
Block a user