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

편집 요약 없음
편집 요약 없음
1번째 줄: 1번째 줄:
<html>
<div class="everest-rss">
    <div class="Rssfeed-header">
        <div class="nav">자유게시판</div>
    </div>
    <div class="Rssfeed-content">
        <ul class="Rssfeed-list" id="rssFeedList"></ul>
    </div>
    <div class="Rssfeed-footer">
        <a href="https://evewiki.kr/everest/free" title="이브레스트 자유게시판"><span class="label label-info">더 보기</span></a>
    </div>
</div>


[[분류:이브위키]]
<script>
<no-comment-streams />
    // 현재 시간을 기준으로 작성 시간을 계산하는 함수
    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';
 
        // 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('li');
                        var anchor = document.createElement('a');
                        anchor.setAttribute('class', 'Rssfeed-item');
                        anchor.setAttribute('href', link);
                        anchor.innerHTML = title;
 
                        // 작성 시간을 표시하는 엘리먼트 생성
                        var timeElement = document.createElement('span');
                        timeElement.setAttribute('class', 'time-difference');
                        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월 25일 (월) 19:02 판