일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 맥세이프충전기
- 다이소 방울토마토
- 방울토마토키우기
- 괌맛집
- 신혼여행
- 핫엔드
- 방울토마토 유기농
- 스투키
- Ender 3 V3 KE
- 괌 신혼여행
- 메이플스토리
- 다이소 방울토마토키트
- 휴대용무선충전기
- 쿠폰나눔
- 겨울나기
- 안드로이드
- 에어팟충전기
- 방울토마토 씨부터 키우기
- 방토 농사
- 괌
- 어플만들기
- 메이플스토리M
- 다크나이트
- 집 방울토마토
- Android
- 보일러절약
- 집에서 방울토마토 키우기
- 안방농사
- 메이플
- 2in1무선충전기
- Today
- Total
괴도군의 블로그
[SERVER] 구글 스프레드시트를 서버로 이용하기 2탄 : 웹설정 본문
안녕하세요 괴도입니다.
구글 스프레드시트의 스크립트를 통해 데이터베이스처럼 이용하는 예제를 시작하겠습니다.
예제는 스팸차단어플입니다. 아래와 같이 스팸목록을 모든 사용자가 추가하고
공유하는 구조입니다.
https://docs.google.com/spreadsheets
먼저 위 주소로 접속하여 사용할 시트를 생성합니다.
더하기 버튼을 누르면 새 시트가 생성됩니다.
시트를 새로 생성하게 되면 제목이 없습니다. 제목부터 설정해주세요.
예제에서 사용할 데이터 키인 number와 reason을 A1과 B1에 입력해주세요
편의에 따라서 임의의 데이터를 입력해주셔도 됩니다.
그리고 스크립트 편집기를 선택해줍니다.
아래 코드를 붙여넣고 저장을 해주세요
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | // 1. Enter sheet name where data is to be written below var SHEET_NAME = "spamsheet"; // 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 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 setResponse(e); } function doPost(e){ return handleResponse(e); } function setResponse(e) { 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(SCRIPT_PROP.getProperty("key")); var sheet = doc.getSheetByName(SHEET_NAME); var line = sheet.getLastRow(); var data = new Array(); for(var j=2;j<=line;j++){ var values = sheet.getRange(j, 1, 1,sheet.getLastColumn()).getValues(); var info = new Object(); info.number = values[0][0]; info.reason = values[0][1]; data.push(info); info = null; } var total = new Object(); total.list = data; } catch(e){ // if error return this return ContentService .createTextOutput(JSON.stringify({"result":"error", "error": e})) .setMimeType(ContentService.MimeType.JSON); } finally { //release lock lock.releaseLock(); } return ContentService .createTextOutput(JSON.stringify(total)) .setMimeType(ContentService.MimeType.JSON); } 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(SCRIPT_PROP.getProperty("key")); var sheet = doc.getSheetByName(SHEET_NAME); var key = null; var keyNumber = null; var keyReason = null; try{ key = e.parameter["modify"]; keyNumber = e.parameter["number"]; keyReason = e.parameter["reason"]; } catch(e){ } if(key != null){//수정일 경우 var line = sheet.getLastRow(); for(var j=2;j<=line;j++){ var values = sheet.getRange(j, 1, 1,sheet.getLastColumn()).getValues()[0]; var number = values[0]; var reason = values[1]; if(number == keyNumber & reason != keyReason){ sheet.getRange(j,2,1).setValue(keyReason); return ContentService .createTextOutput(JSON.stringify({"result":"success"})) .setMimeType(ContentService.MimeType.JSON); } } return ContentService .createTextOutput(JSON.stringify({"result":"false"})) .setMimeType(ContentService.MimeType.JSON); } else {//수정이 아닐경우 // 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 (var i =0;i<2;i++){ 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(); SCRIPT_PROP.setProperty("key", doc.getId()); } | cs |
아래 스크린샷과 같이 시트이름을 바꾸시거나
var SHEET_NAME = "spamsheet";
위 스크립트에서 이부분을 원하는 시트이름으로 바꿔주세요.
그리고 setup함수를 실행시켜줍니다.
아래와 같이 인증을 받게됩니다.
권한검토를 누르시고 계속 진행해주세요
그리고 웹앱으로 배포를 시작합니다.
버전은 마음대로 설정하시고 앱을 실행할 사용자는 "나"
웹에 액세스 할 수 있는 사용자는 누구나(익명 사용자 포함) 으로 설정하고 업데이트를 눌러주세요
배포가 되었으면 웹앱URL을 복사해주세요
아래는 HTTP통신 테스트도구입니다. 구글 플러그인중 하나인 ARC입니다.
보통 유명한 POST MAN을 사용하시는데 저는 그냥 쓰던걸 씁니다..ㅎㅎ
자세한건 다음 포스팅에서 다루겠습니다~
위 플러그인을 통해 간단하게 HTTP통신을 테스트 해볼수있습니다.
[Android] GCM HTTP 테스트하기 / 구현하기 (2016 최신)
예전에 썼던 GCM(구글 클라우드 메시징) HTTP를 통해 테스트하는걸 다루기도 했죠
물론 GCM전용 테스트사이트들도 많이 있기도합니다
아무튼.. 위 스크립트에 구현해논대로
HTTP POST방식으로 Content-type과 charset정도를 넣고 데이터를 key와 value로 넣어주고 보내면!
아래와 같이 시트에 저장되는걸 보실수 있습니다.
(엑셀이라서 숫자를 넣을땐 `기호를 넣어줘야합니다..)
값을 꺼내오는것은 GET으로 구현해놓았습니다.
JSON형식으로 잘나오네요~
예제의 대한 자세한 설명과 앱에서 어떻게 연동하는지에 대해서는 다음 포스팅에서 다루도록 하겠습니다~
'#프로그래밍 > 테스트..' 카테고리의 다른 글
[SERVER] 구글 스프레드시트를 서버로 이용하기 1탄 : 분석 (0) | 2016.11.18 |
---|