admin1234?type=places 처럼 type 파라미터 추가| 컬럼명 | 예시 | 설명 |
|---|---|---|
| id | 1 | 고유번호 |
| name | 해운대 해수욕장 | 장소명 |
| category | beach | beach/market/cafe/park/culture/nature/food |
| district | 해운대구 | 구·군명 |
| rating | 4.9 | 별점 (0~5) |
| reviews | 2847 | 리뷰 수 |
| distance | 0.3 | 거리(km) |
| tags | 해수욕,일몰,산책 | 쉼표로 구분 |
| popular | true | 인기여부 true/false |
| description | 부산 대표 해수욕장... | 장소 설명 |
| 컬럼명 | 예시 | 설명 |
|---|---|---|
| id | 1 | 고유번호 |
| author | 부산여행러 | 작성자 |
| avatar | 🧳 | 이모지 아바타 |
| category | restaurant | restaurant/attraction/event/accommodation |
| title | 광안리 해물파전 추천 | 제목 |
| content | 바다뷰 보면서... | 본문 |
| location | 광안리해수욕장 | 위치 |
| district | 수영구 | 구·군명 |
| rating | 4.8 | 별점 |
| tags | 해물파전,광안리 | 쉼표로 구분 |
| likes | 124 | 좋아요 수 |
| time | 2시간 전 | 표시 시간 |
| 컬럼명 | 예시 | 설명 |
|---|---|---|
| id | 1 | 고유번호 |
| name | 모리나 | 레스토랑명 |
| grade | 1star | 1star / bib / selected |
| gradeLabel | ★ 1 스타 | 등급 표시명 |
| cuisine | 이탤리언 | 음식 종류 |
| price | ₩₩₩ | ₩ / ₩₩ / ₩₩₩ |
| district | 해운대구 | 구·군명 |
| desc | 부산 최초 미슐랭... | 설명 |
| 컬럼명 | 예시 | 설명 |
|---|---|---|
| id | 1 | 고유번호 |
| name | 아쿠아플라넷 | 장소명 |
| category | aquarium | aquarium/kidspark/park/kidscafe/museum/outdoor/theme/eco |
| emoji | 🐠 | 이모지 |
| district | 해운대구 | 구·군명 |
| rating | 4.8 | 별점 |
| reviews | 3241 | 리뷰 수 |
| price | 성인 3.5만 | 가격 정보 |
| ageRange | 전 연령 | 권장 연령 |
| tags | 아쿠아리움,체험 | 쉼표로 구분 |
| desc | 국내 최대 규모... | 설명 |
| hours | 10:00~20:00 | 운영시간 |
| parking | true | 주차 가능 true/false |
| 컬럼명 | 예시 | 설명 |
|---|---|---|
| id | 1 | 고유번호 |
| author | 여행기획자 | 작성자 |
| title | 부산 2박 3일 완벽 코스 | 제목 |
| duration | 2박 3일 | 여행 기간 |
| district | 전 지역 | 지역 |
| day1 | 자갈치시장,감천문화마을 | 1일차 (쉼표 구분) |
| day2 | 해운대,더베이101 | 2일차 (선택) |
| day3 | 오륙도,용두산공원 | 3일차 (선택) |
| budget | 1인 15만원대 | 예산 |
| theme | 가족여행,사진투어 | 테마 (쉼표 구분) |
| likes | 534 | 좋아요 수 |
?type=places 를 붙여서 각 데이터별로 설정하세요.
function doGet(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var type = (e.parameter && e.parameter.type) || 'places';
var ws = ss.getSheetByName(type);
if (!ws) {
return output({ data: [], error: 'Sheet not found: ' + type });
}
var rows = ws.getDataRange().getValues();
if (rows.length < 2) return output({ data: [] });
var headers = rows[0];
var data = [];
for (var i = 1; i < rows.length; i++) {
if (rows[i][0] === '' || rows[i][0] === null) continue;
var obj = {};
for (var j = 0; j < headers.length; j++) {
if (headers[j] !== '') {
obj[String(headers[j])] = rows[i][j];
}
}
data.push(obj);
}
return output({ data: data, total: data.length, sheet: type });
}
function output(obj) {
return ContentService
.createTextOutput(JSON.stringify(obj))
.setMimeType(ContentService.MimeType.JSON);
}
admin1234?type=places 처럼 type 파라미터를 추가하세요| 컬럼명 | 예시 | 설명 |
|---|---|---|
| id | 1 | 고유번호 |
| name | 해운대 해수욕장 | 장소명 |
| category | beach | beach/market/cafe/park/culture/nature/food |
| district | 해운대구 | 구·군명 |
| rating | 4.9 | 별점 (0~5) |
| reviews | 2847 | 리뷰 수 |
| distance | 0.3 | 거리(km) |
| tags | 해수욕,일몰,산책 | 쉼표로 구분 |
| popular | true | 인기여부 true/false |
| description | 부산 대표 해수욕장... | 장소 설명 |
| 컬럼명 | 예시 | 설명 |
|---|---|---|
| id | 1 | 고유번호 |
| author | 부산여행러 | 작성자 |
| avatar | 🧳 | 이모지 아바타 |
| category | restaurant | restaurant/attraction/event/accommodation |
| title | 광안리 해물파전 추천 | 제목 |
| content | 바다뷰 보면서... | 본문 |
| location | 광안리해수욕장 | 위치 |
| district | 수영구 | 구·군명 |
| rating | 4.8 | 별점 |
| tags | 해물파전,광안리 | 쉼표로 구분 |
| likes | 124 | 좋아요 수 |
| time | 2시간 전 | 표시 시간 |
| 컬럼명 | 예시 | 설명 |
|---|---|---|
| id | 1 | 고유번호 |
| name | 모리나 | 레스토랑명 |
| grade | 1star | 1star / bib / selected |
| gradeLabel | ★ 1 스타 | 등급 표시명 |
| cuisine | 이탤리언 | 음식 종류 |
| price | ₩₩₩ | ₩ / ₩₩ / ₩₩₩ |
| district | 해운대구 | 구·군명 |
| desc | 부산 최초 미슐랭... | 설명 |
| 컬럼명 | 예시 | 설명 |
|---|---|---|
| id | 1 | 고유번호 |
| name | 아쿠아플라넷 | 장소명 |
| category | aquarium | aquarium/kidspark/park/kidscafe/museum/outdoor/theme/eco |
| emoji | 🐠 | 이모지 |
| district | 해운대구 | 구·군명 |
| rating | 4.8 | 별점 |
| reviews | 3241 | 리뷰 수 |
| price | 성인 3.5만 | 가격 정보 |
| ageRange | 전 연령 | 권장 연령 |
| tags | 아쿠아리움,체험 | 쉼표로 구분 |
| desc | 국내 최대 규모... | 설명 |
| hours | 10:00~20:00 | 운영시간 |
| parking | true | 주차 가능 true/false |
| 컬럼명 | 예시 | 설명 |
|---|---|---|
| id | 1 | 고유번호 |
| author | 여행기획자 | 작성자 |
| title | 부산 2박 3일 완벽 코스 | 제목 |
| duration | 2박 3일 | 여행 기간 |
| district | 전 지역 | 지역 |
| day1 | 자갈치시장,감천문화마을 | 1일차 (쉼표 구분) |
| day2 | 해운대,더베이101 | 2일차 (선택) |
| day3 | 오륙도,용두산공원 | 3일차 (선택) |
| budget | 1인 15만원대 | 예산 |
| theme | 가족여행,사진투어 | 테마 (쉼표 구분) |
| likes | 534 | 좋아요 수 |
?type=places 를 붙여서 각 데이터별로 설정하세요. 하나의 스크립트로 모든 시트를 처리합니다.
function doGet(e) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var type = (e.parameter && e.parameter.type) || 'places';
var ws = ss.getSheetByName(type);
if (!ws) {
return output({ data: [], error: 'Sheet not found: ' + type });
}
var rows = ws.getDataRange().getValues();
if (rows.length < 2) return output({ data: [] });
var headers = rows[0];
var data = [];
for (var i = 1; i < rows.length; i++) {
// 첫 번째 컬럼이 비어있으면 빈 행으로 간주해 스킵
if (rows[i][0] === '' || rows[i][0] === null) continue;
var obj = {};
for (var j = 0; j < headers.length; j++) {
if (headers[j] !== '') {
obj[String(headers[j])] = rows[i][j];
}
}
data.push(obj);
}
return output({ data: data, total: data.length, sheet: type });
}
function output(obj) {
return ContentService
.createTextOutput(JSON.stringify(obj))
.setMimeType(ContentService.MimeType.JSON);
}