편집 요약 없음 |
편집 요약 없음 |
||
11번째 줄: | 11번째 줄: | ||
var formattedToday = kstTime.toISOString().split('T')[0].replace(/-/g, ''); | var formattedToday = kstTime.toISOString().split('T')[0].replace(/-/g, ''); | ||
// | // 캐싱을 위한 함수 | ||
function getCachedData(key) { | |||
var cached = localStorage.getItem(key); | |||
if (cached) { | |||
return JSON.parse(cached); | |||
} | |||
return null; | |||
} | |||
if ( | |||
function setCachedData(key, data) { | |||
localStorage.setItem(key, JSON.stringify(data)); | |||
} | |||
// 급식 정보 API 호출 함수 | |||
function fetchMealInfo() { | |||
var cacheKey = 'mealInfo_' + formattedToday; | |||
var cachedData = getCachedData(cacheKey); | |||
if (cachedData) { | |||
renderMealInfo(cachedData); | |||
} else { | } else { | ||
$('#meal-info').html('<p>오늘의 급식 정보가 없습니다.</p>'); | $.getJSON(mealApiUrl, { | ||
KEY: apiKey, | |||
ATPT_OFCDC_SC_CODE: "P10", // 교육청 코드 | |||
SD_SCHUL_CODE: "8321079", // 학교 코드 | |||
MLSV_YMD: formattedToday, | |||
Type: "json" | |||
}, function(data) { | |||
if (data.mealServiceDietInfo && data.mealServiceDietInfo[1] && data.mealServiceDietInfo[1].row) { | |||
var meals = data.mealServiceDietInfo[1].row; | |||
setCachedData(cacheKey, meals); | |||
renderMealInfo(meals); | |||
} else { | |||
$('#meal-info').html('<p>오늘의 급식 정보가 없습니다.</p>'); | |||
} | |||
}); | |||
} | } | ||
} | } | ||
// | // 급식 정보 렌더링 함수 | ||
function renderMealInfo(meals) { | |||
var mealContent = ''; | |||
for (var i = 0; i < meals.length; i++) { | |||
mealContent += '<h3>' + meals[i].MMEAL_SC_NM + '</h3>'; | |||
mealContent += '<p>' + meals[i].DDISH_NM.split('<br/>').join('<br/>') + '</p>'; | |||
mealContent += '<p>칼로리: ' + meals[i].CAL_INFO + '</p>'; | |||
} | |||
$('#meal-info').html(mealContent); | |||
} | |||
// 학사일정 정보 API 호출 함수 | |||
function fetchScheduleInfo() { | |||
var cacheKey = 'scheduleInfo_' + formattedToday; | |||
var cachedData = getCachedData(cacheKey); | |||
if (cachedData) { | |||
renderScheduleInfo(cachedData); | |||
} else { | } else { | ||
$('#schedule-info').html('<p>오늘의 학사일정 정보가 없습니다.</p>'); | $.getJSON(scheduleApiUrl, { | ||
KEY: apiKey, | |||
ATPT_OFCDC_SC_CODE: "P10", // 교육청 코드 | |||
SD_SCHUL_CODE: "8321079", // 학교 코드 | |||
AA_YMD: formattedToday, | |||
Type: "json" | |||
}, function(data) { | |||
if (data.SchoolSchedule && data.SchoolSchedule[1] && data.SchoolSchedule[1].row) { | |||
var schedules = data.SchoolSchedule[1].row; | |||
setCachedData(cacheKey, schedules); | |||
renderScheduleInfo(schedules); | |||
} else { | |||
$('#schedule-info').html('<p>오늘의 학사일정 정보가 없습니다.</p>'); | |||
} | |||
}); | |||
} | |||
} | |||
// 학사일정 정보 렌더링 함수 | |||
function renderScheduleInfo(schedules) { | |||
var scheduleContent = ''; | |||
for (var i = 0; i < schedules.length; i++) { | |||
scheduleContent += '<h3>' + schedules[i].EVENT_NM + '</h3>'; | |||
scheduleContent += '<p>' + schedules[i].EVENT_CNTNT + '</p>'; | |||
} | |||
$('#schedule-info').html(scheduleContent); | |||
} | |||
// 특정 섹션이 보일 때 API 호출 트리거 | |||
$(window).on('scroll', function() { | |||
var mealInfoTop = $('#meal-info').offset().top; | |||
var scheduleInfoTop = $('#schedule-info').offset().top; | |||
var windowBottom = $(this).scrollTop() + $(this).height(); | |||
if (windowBottom >= mealInfoTop && !$('#meal-info').data('loaded')) { | |||
$('#meal-info').data('loaded', true); | |||
fetchMealInfo(); | |||
} | |||
if (windowBottom >= scheduleInfoTop && !$('#schedule-info').data('loaded')) { | |||
$('#schedule-info').data('loaded', true); | |||
fetchScheduleInfo(); | |||
} | } | ||
}); | }); | ||
// 초기 호출 (스크롤 이벤트가 발생하지 않아도 로드하도록) | |||
fetchMealInfo(); | |||
fetchScheduleInfo(); | |||
}); | }); |
2024년 8월 3일 (토) 19:31 판
$(document).ready(function() {
// 나이스 API URL 설정
var mealApiUrl = "https://open.neis.go.kr/hub/mealServiceDietInfo";
var scheduleApiUrl = "https://open.neis.go.kr/hub/SchoolSchedule";
var apiKey = "23d1d00bc564408bab2a481410550ea7"; // 나이스 API 키
// 한국 시간(KST) 기준으로 오늘 날짜 계산
var today = new Date();
var kstOffset = 9 * 60; // KST는 UTC+9
var kstTime = new Date(today.getTime() + (kstOffset * 60 * 1000));
var formattedToday = kstTime.toISOString().split('T')[0].replace(/-/g, '');
// 캐싱을 위한 함수
function getCachedData(key) {
var cached = localStorage.getItem(key);
if (cached) {
return JSON.parse(cached);
}
return null;
}
function setCachedData(key, data) {
localStorage.setItem(key, JSON.stringify(data));
}
// 급식 정보 API 호출 함수
function fetchMealInfo() {
var cacheKey = 'mealInfo_' + formattedToday;
var cachedData = getCachedData(cacheKey);
if (cachedData) {
renderMealInfo(cachedData);
} else {
$.getJSON(mealApiUrl, {
KEY: apiKey,
ATPT_OFCDC_SC_CODE: "P10", // 교육청 코드
SD_SCHUL_CODE: "8321079", // 학교 코드
MLSV_YMD: formattedToday,
Type: "json"
}, function(data) {
if (data.mealServiceDietInfo && data.mealServiceDietInfo[1] && data.mealServiceDietInfo[1].row) {
var meals = data.mealServiceDietInfo[1].row;
setCachedData(cacheKey, meals);
renderMealInfo(meals);
} else {
$('#meal-info').html('<p>오늘의 급식 정보가 없습니다.</p>');
}
});
}
}
// 급식 정보 렌더링 함수
function renderMealInfo(meals) {
var mealContent = '';
for (var i = 0; i < meals.length; i++) {
mealContent += '<h3>' + meals[i].MMEAL_SC_NM + '</h3>';
mealContent += '<p>' + meals[i].DDISH_NM.split('<br/>').join('<br/>') + '</p>';
mealContent += '<p>칼로리: ' + meals[i].CAL_INFO + '</p>';
}
$('#meal-info').html(mealContent);
}
// 학사일정 정보 API 호출 함수
function fetchScheduleInfo() {
var cacheKey = 'scheduleInfo_' + formattedToday;
var cachedData = getCachedData(cacheKey);
if (cachedData) {
renderScheduleInfo(cachedData);
} else {
$.getJSON(scheduleApiUrl, {
KEY: apiKey,
ATPT_OFCDC_SC_CODE: "P10", // 교육청 코드
SD_SCHUL_CODE: "8321079", // 학교 코드
AA_YMD: formattedToday,
Type: "json"
}, function(data) {
if (data.SchoolSchedule && data.SchoolSchedule[1] && data.SchoolSchedule[1].row) {
var schedules = data.SchoolSchedule[1].row;
setCachedData(cacheKey, schedules);
renderScheduleInfo(schedules);
} else {
$('#schedule-info').html('<p>오늘의 학사일정 정보가 없습니다.</p>');
}
});
}
}
// 학사일정 정보 렌더링 함수
function renderScheduleInfo(schedules) {
var scheduleContent = '';
for (var i = 0; i < schedules.length; i++) {
scheduleContent += '<h3>' + schedules[i].EVENT_NM + '</h3>';
scheduleContent += '<p>' + schedules[i].EVENT_CNTNT + '</p>';
}
$('#schedule-info').html(scheduleContent);
}
// 특정 섹션이 보일 때 API 호출 트리거
$(window).on('scroll', function() {
var mealInfoTop = $('#meal-info').offset().top;
var scheduleInfoTop = $('#schedule-info').offset().top;
var windowBottom = $(this).scrollTop() + $(this).height();
if (windowBottom >= mealInfoTop && !$('#meal-info').data('loaded')) {
$('#meal-info').data('loaded', true);
fetchMealInfo();
}
if (windowBottom >= scheduleInfoTop && !$('#schedule-info').data('loaded')) {
$('#schedule-info').data('loaded', true);
fetchScheduleInfo();
}
});
// 초기 호출 (스크롤 이벤트가 발생하지 않아도 로드하도록)
fetchMealInfo();
fetchScheduleInfo();
});