미디어위키:Common.js: 두 판 사이의 차이

편집 요약 없음
편집 요약 없음
11번째 줄: 11번째 줄:
     var formattedToday = kstTime.toISOString().split('T')[0].replace(/-/g, '');
     var formattedToday = kstTime.toISOString().split('T')[0].replace(/-/g, '');


     // 급식 정보 API 호출
     // 캐싱을 위한 함수
     $.getJSON(mealApiUrl, {
     function getCachedData(key) {
         KEY: apiKey,
         var cached = localStorage.getItem(key);
        ATPT_OFCDC_SC_CODE: "P10",  // 교육청 코드
         if (cached) {
        SD_SCHUL_CODE: "8321079",  // 학교 코드
             return JSON.parse(cached);
        MLSV_YMD: formattedToday,
        }
        Type: "json"
        return null;
    }, function(data) {
    }
         if (data.mealServiceDietInfo && data.mealServiceDietInfo[1] && data.mealServiceDietInfo[1].row) {
             var meals = data.mealServiceDietInfo[1].row;
            var mealContent = '';


            // 급식 정보 HTML 생성
    function setCachedData(key, data) {
            for (var i = 0; i < meals.length; i++) {
        localStorage.setItem(key, JSON.stringify(data));
                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>';
            }


            // 대문 페이지의 특정 요소에 급식 정보 삽입
    // 급식 정보 API 호출 함수
            $('#meal-info').html(mealContent);
    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>');
                }
            });
         }
         }
     });
     }


     // 학사일정 정보 API 호출
     // 급식 정보 렌더링 함수
     $.getJSON(scheduleApiUrl, {
     function renderMealInfo(meals) {
         KEY: apiKey,
         var mealContent = '';
         ATPT_OFCDC_SC_CODE: "P10",  // 교육청 코드
         for (var i = 0; i < meals.length; i++) {
        SD_SCHUL_CODE: "8321079",  // 학교 코드
            mealContent += '<h3>' + meals[i].MMEAL_SC_NM + '</h3>';
        AA_YMD: formattedToday,
            mealContent += '<p>' + meals[i].DDISH_NM.split('<br/>').join('<br/>') + '</p>';
        Type: "json"
             mealContent += '<p>칼로리: ' + meals[i].CAL_INFO + '</p>';
    }, function(data) {
        }
        if (data.SchoolSchedule && data.SchoolSchedule[1] && data.SchoolSchedule[1].row) {
        $('#meal-info').html(mealContent);
             var schedules = data.SchoolSchedule[1].row;
    }
            var scheduleContent = '';


            // 학사일정 정보 HTML 생성
    // 학사일정 정보 API 호출 함수
            for (var i = 0; i < schedules.length; i++) {
    function fetchScheduleInfo() {
                scheduleContent += '<h3>' + schedules[i].EVENT_NM + '</h3>';
        var cacheKey = 'scheduleInfo_' + formattedToday;
                scheduleContent += '<p>' + schedules[i].EVENT_CNTNT + '</p>';
        var cachedData = getCachedData(cacheKey);
            }


            // 대문 페이지의 특정 요소에 학사일정 정보 삽입
        if (cachedData) {
             $('#schedule-info').html(scheduleContent);
             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();
});