티스토리 뷰

[live-study 대시 보드 참고사항]

  • 깃헙 이슈 1번부터 18번까지 댓글을 순회하며 댓글을 남긴 사용자를 체크할 것
  • 참여율을 계산할 것 (총 18회 중 몇 %를 참여했는지 소숫점 두자리까지 보여줄 것)
  • Github 자바 라이브러리를 사용
  • 깃헙 API를 익명으로 호출하는데 제한이 있기 때문에 본인의 Github 프로젝트에 이슈를 만들면 더 자주 테스트 가능

Github 자바 라이브러리를 사용하여 Gihub와 연결하기 위해서는 인증 과정을 거쳐야 합니다. 

여러가지 인증 방식이 존재하지만 라이브러리 상에서 Personal access token을 활용하는 방법으로 진행하였습니다.

 

라이브러리를 Maven 프로젝트에서 사용하기 위해 Download 탭으로 가게 되면 라이브러리를 버전별로 확인하고 다운로드할 수 있습니다. 저는 가장 최신 버전인 1.117으로 다운로드를 진행하였습니다. Maven으로 의존성을 추가하기 위해 해당 코드를 복사한 후 Maven 프로젝트의 pom.xml 파일 내 <dependencies></dependencies> 태그 내에 붙여 넣은 후 Reload 하면 Github API 관련 라이브러리가 External Libraries 내에 추가된 것을 확인할 수 있습니다.

의존성이 추가되면 이제 Github API를 사용하여 Github Repository에 있는 이슈들과 이슈 내에 달린 Comment를 확인할 수 있으며, 1번부터 18번까지의 이슈를 확인하는 것이므로 먼저 이슈가 있는지를 확인하고 18번까지만 순회하도록 코드를 작성하였습니다. 하나의 회차에 동일한 아이디로 쓴 Comment가 여러 개 있는 경우도 중복 체크 방지를 위해 확인해줘야 합니다.

import org.kohsuke.github.*;

import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

public class GitIssueChecker {
    private static int max_issue_count;

    public static void main(String[] args) throws IOException {
        GitHub github = new GitHubBuilder().withOAuthToken("my_personal_token").build();
        GHRepository ghRepository = github.getRepository("whiteship/live-study");
        HashMap<String, Integer> userDashBoard = new HashMap<>();
        HashSet<String> userNameList = new HashSet<>();

        max_issue_count = ghRepository.hasIssues() ? (Math.min(ghRepository.getOpenIssueCount(), 18)) : 0;
        for (int issueNum = 1; issueNum < max_issue_count; issueNum++) {
            GHIssue ghIssue = ghRepository.getIssue(issueNum);
            List<GHIssueComment> ghIssueCommentList = ghIssue.getComments();

            for (GHIssueComment ghIssueComment : ghIssueCommentList) {
                userNameList.add(ghIssueComment.getUser().getName());
            }

            for(String str : userNameList) {
                if (userDashBoard.containsKey(str)) {
                   Integer count = userDashBoard.get(str);
                   userDashBoard.put(str, count+1);
                } else {
                   userDashBoard.put(str, 1);
                }
            }
        }

        userDashBoard.forEach((key, value) -> {
            double percent = (double) (value / max_issue_count) * 100;
            System.out.println(key + " : " + String.format("%.2f", percent) + "%");
        });
    }
}

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함