node.js로 구글 스프레드시트에 접속하여 데이터 가져오기
web/node.js

node.js로 구글 스프레드시트에 접속하여 데이터 가져오기

반응형

자신의 구글 드라이브에 있는 엑셀 (스프레드시트)에 접속하여 데이터를 가져오는 방법을 알아보자.

우선 google-spreadsheet에 접근할 수 있는 Js를 다운로드 받자.

1
npm i google-spreadsheet --save
cs

https://www.npmjs.com/package/google-spreadsheet


구글 스프레드 시트 만들기
구글 드라이브에 스프레드 시트를 만들자. 저 주소 URL에 블록처리되어있는 부분이 바로 키로 사용된다


구글 스프레드 시트 접속권한 사용자 생성

그리고 이 스프레드 시트에 접속할 수 있는 계정을 만들어야한다. https://console.developers.google.com 이곳에 접속하여 사용자를 만들고 키를 생성한다. (단순하게 들어가서 확인해보면 무리없이 만들 수 있다.)


키 만들기 버튼을 이용해서 키를 생성하면 해당 키드는 json 파일로 떨어지는데 이곳에 private_pw와 ID등이 들어있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
// 가짜 데이터
{
  "type""service_account",
  "project_id""ringed-dispatch-157300",
  "private_key_id""0467e31241242428c12412421412449234960ae3c749e1609c5e3ca53b41",
  "private_key""-----BEGIN PRIVATE KEY-----\8iBnuPwiI\n5/ZUYY3yv2n5+UAs+dLVAYo=\n-----END PRIVATE KEY-----\n",
  "client_email""820847001811221412412214124236-compute@developer.gserviceaccount.com",
  "client_id""1060476412312214212323ㄴㅇㅁㄹㄴㅇ5255744659718",
  "auth_uri""https://accounts.google.com/o/oauth2/auth",
  "token_uri""https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url""https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url""https://www.googleapis.com/robot/v1/metadata/x509/820847001836-compute%40developer.gserviceaccount.com"
}
cs

그리고 이 사용자에게 해당 문서의 권한을 공유 해준다.


Node.js로 접근하기

google-spreadsheet 라이브러리를 가져와서 사용자 정보를 입력하고 URL KEY를 이용해서 접속하면 해당 스프레드 시트에 접속할 수 있고 조작 및 정보를 가지고 올 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
 * Created by we on 2018. 9. 5.
 */
'use strict';
 
const GoogleSpreadsheet = require('google-spreadsheet');
const defer = require('../defer');
 
// spreadsheet key is the long id in the sheets URL
const config = require('../../config/config');
 
class WedulData {
 
  constructor() {
    this.doc = new GoogleSpreadsheet(config.google.key);
  }
 
  async _initDoc() {
    await defer(this.doc, this.doc.useServiceAccountAuth)(config.google.credit);
    return await defer(this.doc, this.doc.getInfo)();
  }
 
  async readSheetData() {
    const sheet = (await this._initDoc()).worksheets[0];
    const rows = await defer(sheet, sheet.getRows)({offset: 1, limit: 100});
 
    return rows;
  }
 
}
module.exports = new WedulData();
cs


결과


반응형