이브위키:연습장/대문: 두 판 사이의 차이

편집 요약 없음
(문서를 비움)
태그: 비우기
1번째 줄: 1번째 줄:


<div class="everest-rss">
<h6 class="nav">최근바뀜</h6>
<div class="Rssfeed-list" id="rssFeedList"></div>
[[특수:최근바뀜|<span class="text-xs label label-info bg-evewiki-main">더 보기</span>]]
</div>
<html>
<script>
    // 현재 시간을 기준으로 작성 시간을 계산하는 함수
    function calculateTimeDifference(pubDate) {
        var currentDate = new Date();
        var postDate = new Date(pubDate);
        var timeDifference = Math.floor((currentDate - postDate) / (60 * 1000)); // 차이를 분 단위로 계산
        if (timeDifference < 60) {
            return timeDifference + '분 전';
        } else if (timeDifference < 1440) {
            return Math.floor(timeDifference / 60) + '시간 전';
        } else {
            return Math.floor(timeDifference / 1440) + '일 전';
        }
    }
    // RSS 피드를 가져와서 표시하는 함수
    function fetchAndDisplayRss() {
        // RSS 피드 URL
        var rss_url = 'https://evewiki.kr/w/api.php?action=feedrecentchanges&format=json&namespace=6&invert=1&formatversion=2';
        // fetch API를 사용하여 RSS 피드를 가져오기
        fetch(rss_url)
            .then(response => response.text())
            .then(data => {
                // XML 데이터 파싱
                var parser = new DOMParser();
                var xmlDoc = parser.parseFromString(data, "text/xml");
                // 표시할 최대 게시물 수
                var max_posts = 10;
                // 중복 제목을 확인하기 위한 객체 생성
                var titleSet = new Set();
                // 리스트 아이템을 추가할 ul 엘리먼트 가져오기
                var rssList = document.getElementById('rssFeedList');
                // 표시된 게시글 수
                var displayedPosts = 0;
                // 두 번째 항목부터 시작하여 다음 10개를 표시
                for (var i = 1; i < xmlDoc.getElementsByTagName('title').length; i++) {
                    var max_title_length = 20;
                    var title = xmlDoc.getElementsByTagName('title')[i].innerHTML;
                    var link = xmlDoc.getElementsByTagName('link')[i].innerHTML;
                    var pubDate = xmlDoc.getElementsByTagName('pubDate')[i].innerHTML; // 작성 시간 가져오기
                    // 중복된 제목인지 확인
                    if (!titleSet.has(title)) {
                        titleSet.add(title);
                        // 작성 시간을 계산
                        var timeDifference = calculateTimeDifference(pubDate);
                        // 리스트 아이템과 앵커 엘리먼트 생성
                        var listItem = document.createElement('div');
                        var anchor = document.createElement('a');
                        listItem.setAttribute('class', 'w-full');
                        anchor.setAttribute('class', '');
                        anchor.setAttribute('href', link);
                        anchor.innerHTML = title;
                        // 작성 시간을 표시하는 엘리먼트 생성
                        var timeElement = document.createElement('div');
                        timeElement.setAttribute('class', 'inline-block w-16 opacity-50 text-xs');
                        timeElement.innerHTML = timeDifference;
                        // 앵커를 리스트 아이템에 추가하고 리스트 아이템을 ul 엘리먼트에 추가
                        listItem.appendChild(timeElement);
                        listItem.appendChild(anchor);
                        rssList.appendChild(listItem);
                        // 표시된 게시글 수 증가
                        displayedPosts++;
                        // 표시된 게시글이 최대 표시할 게시글 수에 도달하면 종료
                        if (displayedPosts === max_posts) {
                            break;
                        }
                    }
                }
            })
            .catch(error => console.error('RSS 피드 가져오기 오류:', error));
    }
    // RSS 피드를 가져와서 표시하는 함수 호출
    fetchAndDisplayRss();
</script>
</html>

2023년 12월 30일 (토) 23:32 판