• 구글 스프레드시트 데이터(DB) 연동 및 수집









「 구글 스프레드시트 데이터(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



끝까지 읽어주셔서 감사합니다.

설정 위치 : 디비카트 > 랜딩기본정보 > 디비전송(NOTI)
관련 외부 링크 : 구글스프레드시트
  • 편리한 디비카트 노티 설정 기능으로 수집된 데이터를 스프레드시트로 데이터를 받아보세요.
  • 노티설정하기
  • (주) 상상의눈
    대구시 중구 달구벌대로 1932 4층 | 대표 이현구
    사업자등록번호 504-86-00831| 통신판매신고 제 2019-대구중구-0317 호
    대표번호 1600-2079(유료)| 고객센터 070-7813-8861
    업무시간 오전 10시 ~ 오후 7시(점심시간 오후 12시30분 ~ 오후 1시30분까지) | E-mail help@dbcart.net