/** * Mingle Studio - Google Calendar Proxy * * Google Apps Script로 배포하여 사용 * 캘린더 일정을 조회하고, "//"가 포함되지 않은 일정이 있는 날을 "마감"으로 반환 * * 설정 방법: * 1. script.google.com 에서 새 프로젝트 생성 * 2. 이 코드 붙여넣기 * 3. CALENDAR_ID를 실제 캘린더 ID로 변경 * 4. 배포 → 웹 앱 → "모든 사용자"가 액세스 가능하도록 설정 * 5. 배포 URL을 js/schedule.js의 APPS_SCRIPT_URL에 입력 */ // ★ 여기에 실제 캘린더 ID 입력 var CALENDAR_ID = 'minglestudio.mocap@gmail.com'; function doGet(e) { var headers = { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET', 'Content-Type': 'application/json' }; try { var params = e.parameter; var year = parseInt(params.year) || new Date().getFullYear(); var month = parseInt(params.month) || (new Date().getMonth() + 1); // 해당 월의 시작/끝 var startDate = new Date(year, month - 1, 1); var endDate = new Date(year, month, 0, 23, 59, 59); var calendar = CalendarApp.getCalendarById(CALENDAR_ID); if (!calendar) { return ContentService.createTextOutput(JSON.stringify({ error: 'Calendar not found' })).setMimeType(ContentService.MimeType.JSON); } var events = calendar.getEvents(startDate, endDate); var bookedDates = {}; for (var i = 0; i < events.length; i++) { var title = events[i].getTitle(); // "//"가 포함된 일정은 무시 (내부 메모) if (title.indexOf('//') !== -1) { continue; } // 실제 예약 일정 → 해당 날짜를 마감 처리 var eventStart = events[i].getStartTime(); var eventEnd = events[i].getEndTime(); // 종일 이벤트는 endTime이 마지막날+1일 00:00이므로 하루 빼기 if (events[i].isAllDayEvent()) { eventEnd = new Date(eventEnd.getTime() - 1); } // 여러 날에 걸친 일정 처리 var current = new Date(eventStart.getFullYear(), eventStart.getMonth(), eventStart.getDate()); var endDay = new Date(eventEnd.getFullYear(), eventEnd.getMonth(), eventEnd.getDate()); while (current <= endDay) { var dateKey = Utilities.formatDate(current, Session.getScriptTimeZone(), 'yyyy-MM-dd'); bookedDates[dateKey] = true; current.setDate(current.getDate() + 1); } } var result = { year: year, month: month, bookedDates: Object.keys(bookedDates).sort() }; return ContentService.createTextOutput(JSON.stringify(result)) .setMimeType(ContentService.MimeType.JSON); } catch (error) { return ContentService.createTextOutput(JSON.stringify({ error: error.message })).setMimeType(ContentService.MimeType.JSON); } }