「 구글 스프레드시트 데이터(DB) 연동 및 수집 」
안녕하세요.
오늘은 구글 스프레드시트[spread sheet]를 이용하여 데이터 연동 및 수집하는 방법을 포스팅 해보겠습니다.
구글에서 무료로 제공하는 엑셀이며,
구글 드라이브 > 구글 스프레드시트를 사용할 수 있습니다.
구글 스프레드시트는 스크립트를 사용하여 타 사이트(랜딩페이지)와 데이터(DB)를 연동이 가능합니다.
그럼 지금부터 구글 스프레드시트와 타 사이트 연동하여 데이터(DB)를 수집해 보도록 하겠습니다.
구글 스프레드시트 설정하기
1. 구글 드라이브(https://drive.google.com/) 접속하여 스프레드시트를 만들기
(위에서도 말씀드린거 처럼 구글 드라이브 안에 구글 스프레드시트가 존재함으로 구글 드라이브에 접속을 해야 합니다.)
개인용 '무료'이며 비즈니스용은 '유료'로 사용이 가능합니다.
전 개인용으로 진행해보도록 하겠습니다.
2. 구글 드라이브 로그인
(계정이 없는경우 하단에 계정만들기를 통해서 구글 계정을 만드시면 됩니다.)
3. 로그인 후 구글 드리이브 메인화면
4. 구글 빈 스프레드시트 만들기
좌측 상단에 '새로 만들기' 클릭!!
① Google 스프레드시트 우측에 '>' 클릭!!
② '빈 스프레드시트' 클릭!!
5. 스크립트 편집기 이동하기
① 상단에 메뉴 '도구' 클릭
② '<> 스크립트 편집기' 클릭
↓ 스크립트 편집기 초기화면 ↓
6. 스크립트 편집기에 스크립트 추가하기
(원래 기본 들어가 있는 내용은 모두 삭제 후 아래 스크립트를 추가하세요.)
스크립트 내용
--------------------------------------------------------------------------------------
// 1. Enter sheet name where data is to be written below // 2. Run > setup // // 3. Publish > Deploy as web app // - enter Project Version name and click 'Save New Version' // - set security level and enable service (most likely execute as 'me' and access 'anyone, even anonymously) // // 4. Copy the 'Current web app URL' and post this in your form/script action // // 5. Insert column names on your destination sheet matching the parameter names of the data you are passing in (exactly matching case) var XLS_SHEET_NAME = '시트1'; var XLS_SCRIPT_PROP = PropertiesService.getScriptProperties(); // new property service // If you don't want to expose either GET or POST methods you can comment out the appropriate function function doGet(e){ return handleResponse(e); } function doPost(e){ return handleResponse(e); } function handleResponse(e) { // shortly after my original solution Google announced the LockService[1] // this prevents concurrent access overwritting data // [1] http://googleappsdeveloper.blogspot.co.uk/2011/10/concurrency-and-google-apps-script.html // we want a public lock, one that locks for all invocations var lock = LockService.getPublicLock(); lock.waitLock(30000); // wait 30 seconds before conceding defeat. try{ // next set where we write the data - you could write to multiple/alternate destinations var doc = SpreadsheetApp.openById(XLS_SCRIPT_PROP.getProperty('key')); var sheet = doc.getSheetByName(XLS_SHEET_NAME); // we'll assume header is in row 1 but you can override with header_row in GET/POST data var headRow = e.parameter.header_row || 1; var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]; var nextRow = sheet.getLastRow()+1; // get next row var row = []; // loop through the header columns for (i in headers){ if (headers[i] == 'Timestamp'){ // special case if you include a 'Timestamp' column row.push(new Date()); } else { // else use header name to get data row.push(e.parameter[headers[i]]); } } // more efficient to set values as [][] array than individually sheet.getRange(nextRow, 1, 1, row.length).setValues([row]); // return json success results return ContentService .createTextOutput(JSON.stringify({'result':'success', 'row': nextRow})) .setMimeType(ContentService.MimeType.JSON); } catch(e){ // if error return this return ContentService .createTextOutput(JSON.stringify({'result':'error', 'error': e})) .setMimeType(ContentService.MimeType.JSON); } finally { //release lock lock.releaseLock(); } } function setup() { var doc = SpreadsheetApp.getActiveSpreadsheet(); XLS_SCRIPT_PROP.setProperty('key', doc.getId()); } |
--------------------------------------------------------------------------------------
스크립트 저장하기
7. 스크립트 실행하기
상단메뉴 '실행' 클릭!!
① '함수 실행' 클릭!!
② 'setup' 클릭!!
8. 스크립트 권한확인
'권한 검토' 클릭
[스크립트 권한 인증절차]
① 계정 선택
② 확인되지 않는 앱
(말 그대로 구글에서 아직 확인하지 않는 앱입니다.)
'고급' 클릭!!
③ 하단에 '테스트 프로젝트 이동' 클릭
④ 하단 '허용' 클릭
9. 웹 앱으로 배포하기
게시 > 웹 앱으로 배포... 클릭!!
스프레드시트 게시 권한변경
Who has access to the app:
'Anyone, even anonymous' 선택
스프레드시트 게시 웹앱URL :
① 웹앱 URL 복사하기
(추후에 데이터 연결시 해당 URL 사용)
② '확인' 클릭!!
[참고] 해당 URL를 새창에 붙여넣기 하는경우
2가지 현상이 존재합니다.
1번째 : {'result':'error','error':{'name':'Exception'}}
2번째 : {'result':'success','row':4} (4는 입력받는 정보개수에 따라 값이 틀려집니다.)
대부분 세팅을 하셨다면 1번째 에러 값이 나타납니다.
그럼 이 부분을 해결하는 방법은 아래와 같이 필드값을 입력해주시면 됩니다.
※ 전달하는 값에 맞게 필드명을 적어주셔야 합니다.
이 부분이 이해가 안되신다면 아래 디비카트에서 구글 스프레드시트로 보내는 방법을 참조하시면 이해가 더 잘되실껍니다.
구글 스프레드시트 설정이 완료되었습니다.
=======================================================================================================
설정된 스프레드시트를 디비카트(https://dbcart.net/)와 연동하여 데이터(DB)를 직접 받아보도록 하겠습니다.
디비카트 연동방법
1. 디비카트 회원가입(https://dbcart.net/login.html)
2. 랜딩페이지 꾸미기
https://dbcart.net/landing_setup.html
데이터(DB)를 받기위해서 랜딩페이지 기본설정을 하는 페이지입니다.
3. 구글 스프레드시트와 디비카트 연동작업
디비카트 노티설정하기 : https://dbcart.net/landing_info_noti.html
① 구글 스프레드시트와 디비카트를 연동유무 체크하기
② 구글 스프레드시트 '웹앱 URL' 입력 (구글 스프레드시트 마지막에 부여받은 웹앱URL)
③ 기본설정된 노티 값
title => 랜딩타이틀
date => 날짜
data1 => 이름
data2 => 연락처
구글 스프레드시트에 적용방법
title => 랜딩타이틀
date => 날짜
data1 => 이름
data2 => 연락처
구글 스프레드시트와 디비카트의 연동이 끝이 났습니다.
=======================================================================================================
테스트 진행
1. 테스트용 디비카트 랜딩페이지
(디비카트에서 임시로 만든 랜딩페이지에 데이터값을 넣어봤습니다.)
title => 대출상담
date => 2019.12.26
data1 => 홍길동
data2 => 010-1234-1234
아래에 구글 스프레드시트에 실시간 데이터(DB)가 추가되는걸 보실 수 있습니다.
정상적으로 테스트가 완료되었습니다.
=======================================================================================================
이상으로
구글 스프레드시트 데이터(DB) 연동하기
구글 스프레드시트와 디비카트 연동하여 데이터(DB) 수집하기
였습니다.
최신 업데이트된 연결방법보기 : https://dbcart.net/posting_googlespreadsheet_n.html
끝까지 읽어주셔서 감사합니다.