본문 바로가기

메이커 자료/ESP32 : Easy Connector

Google Spread Sheet 웹앱 만들기

 

데이터 수집

데이터수집.ezb
0.02MB

 

 

 

구글 스프레드 시트를 활용한 API서버를 만드는 코드입니다

/**
 *  GET 예시
 *  https://script.google.com/macros/s/AK.../exec?mode=write&a=10&b=20
 */
function doGet(e) {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

  /* ---------- 1) 쓰기(write) ---------- */
  if (e.parameter.mode === 'write') {
    const now     = new Date();
    const params  = { ...e.parameter };       // 얕은 복사
    delete params.mode;                       // mode 제거

    /* 1-A. 헤더 준비 ─ 이미 있으면 그대로, 없으면 새로 만듦 */
    let headers;
    if (sheet.getLastRow() === 0) {
      headers = ['timestamp', ...Object.keys(params)];
      sheet.appendRow(headers);
    } else {
      headers = sheet.getRange(1, 1, 1, sheet.getLastColumn())
                     .getValues()[0];         // 1행 헤더 가져오기
      /* 새 파라미터가 있다면 헤더에 열 추가 */
      Object.keys(params).forEach(key => {
        if (!headers.includes(key)) {
          headers.push(key);
          sheet.getRange(1, headers.length, 1, 1).setValue(key);
        }
      });
    }

    /* 1-B. 헤더 순서에 맞춰 값 배열 생성 */
    const row = headers.map(h => {
      if (h === 'timestamp') return now;
      return (h in params) ? params[h] : '';  // 없는 값은 빈칸
    });

    sheet.appendRow(row);

    return ContentService
      .createTextOutput(JSON.stringify({ status: 'success', received: params }))
      .setMimeType(ContentService.MimeType.JSON);
  }

  /* ---------- 2) 읽기(read) ---------- */
  if (e.parameter.mode === 'read') {
    const data    = sheet.getDataRange().getValues();
    const headers = data.shift();
    const result  = data.map(row => {
      const obj = {};
      headers.forEach((h, i) => obj[h] = row[i]);
      return obj;
    });

    return ContentService
      .createTextOutput(JSON.stringify(result))
      .setMimeType(ContentService.MimeType.JSON);
  }

  /* ---------- 3) 그 외 ---------- */
  return ContentService
    .createTextOutput(JSON.stringify({ status: 'no_mode', message: 'mode=write | mode=read' }))
    .setMimeType(ContentService.MimeType.JSON);
}

 

사업자 정보 표시
메이크잇나우 | 김건욱 | (우 : 13487) 경기도 성남시 분당구 대왕판교로645번길 12 (경기창조경제혁신센터) 9층 | 사업자 등록번호 : 646-35-00394 | TEL : 070-8887-0703 | Mail : kgu0724@makeitnow.kr | 통신판매신고번호 : 2018-성남분당-0517호 | 사이버몰의 이용약관 바로가기