Language/JAVA

4주차 과제 : live-study dash board 만들기

과제 1. live-study 대시 보드를 만드는 코드를 작성하세요.

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

 

github api 가져오기

maven dependency로 가져왔습니다.

 

깃허브 메이븐 디펜던시

 

Github 자바 라이브러리에서 GitHub객체를 가져옵니다

1. 아이디와 패스워드를 입력하는 방식 (not recommended)

2. 개인 토큰을 이용해 연결하는 방식

 

 

토큰을 이용해서 가져와 봅시다.

우선 토큰을 할당 받기위해선 깃허브에서 세팅을 들어갑니다.


토큰 할당

 

 

 

 

해당 토큰은 보여주기용이므로 삭제했습니다.


우선 테스팅용으로 제 Repository에 이슈를 생성하고 테스트 해봅시다. 

 

 

comments.get(j).getUser().getName()으로해서 null값 나왔던 건 안 비밀

 


이제 이슈별로 코멘트 중복처리 하고 출석률을 구해봅시다.

 

comments.get().getUser()로 받아오는 객체인 GHPerson에 내장된 getLogin값은 잘 나오는데 getName값이 Null이 나와서 그 이유를 찾고자 Github APi에서 GHPerson 클래스를 보니 

protected synchronized void populate() throws IOException {
        if (super.getCreatedAt() != null) {
            return; // already populated
        }
        if (root == null || root.isOffline()) {
            return; // cannot populate, will have to live with what we have
        }
        URL url = getUrl();
        if (url != null) {
            root.createRequest().setRawUrlPath(url.toString()).fetchInto(this);
        }
    }
    
    ...
    
    public String getName() throws IOException {
        populate();
        return name;
    }
    
    ...
    
    public String getLogin() {
        return login;
    }

 

이 부분을 설정하지 않아서 null이 나왔던 것이다.

이와 같이 설정하지 않은 사람도 있을 수 있기 때문에 getLogin 메서드로 출석률을 구하는 것이 맞다고 생각한다.

 

 

package com.studyolle;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.kohsuke.github.GHIssue;
import org.kohsuke.github.GHIssueComment;
import org.kohsuke.github.GHIssueState;
import org.kohsuke.github.GHRepository;
import org.kohsuke.github.GitHub;
import org.kohsuke.github.GitHubBuilder;

public class Main {

	//personal token need to secret
	private static final String MY_PERSONAL_TOKEN = "tokenValue";

	public static void main(String[] args) throws IOException {
		GitHub github = new GitHubBuilder().withOAuthToken(MY_PERSONAL_TOKEN).build();

		//Repository 연결
		GHRepository ghRepository = github.getRepository("whiteship/live-study");

		// 리스트로 이슈 객체 전부 받아오기
		List<GHIssue> issues = ghRepository.getIssues(GHIssueState.ALL);
		Map<String, Integer> Attendance = new HashMap<>();

		//1-18개 이슈

		// 이슈에서 참가자 
		for (GHIssue issue : issues) {
			Set<String> attendOnce = new HashSet<>();
			//댓글 한개 이상 단 경우 유저이름 중복 제거
			for (GHIssueComment comment : issue.getComments()) {
				attendOnce.add(comment.getUser().getLogin());                
			}

			//카운트 증가해주기
			for (String loginId : attendOnce) {
				if(Attendance.containsKey(loginId)){
					Attendance.replace(loginId ,Attendance.get(loginId)+1);
					continue;
				}
				Attendance.put(loginId, 1);
			}
		}
		BufferedWriter bufferdWriter = new BufferedWriter(new OutputStreamWriter(System.out));

		//참여율 출력
		for(String loginId : Attendance.keySet()){
			double rate = (double)(Attendance.get(loginId) * 100) / issues.size();
			bufferdWriter.write("loginId : " + loginId);
			bufferdWriter.write(", 출석률 : " + String.format("%.2f",rate)+"%");
			bufferdWriter.newLine();
		}
		bufferdWriter.close();
	}
}

 

출석현황

 

이 분의 코드를 가져다 사용했습니다.

 

www.notion.so/Live-Study-4-ca77be1de7674a73b473bf92abc4226a

 

[백기선님과 함께하는 Live-Study] 4주차 - 제어문/반복문

목표

www.notion.so

 

 

 

참조

github-api.kohsuke.org/

 

GitHub API for Java –

What is this? This library defines an object oriented representation of the GitHub API. By "object oriented" we mean there are classes that correspond to the domain model of GitHub (such as GHUser and GHRepository), operations that act on them as defined a

github-api.kohsuke.org

 

docs.github.com/en/github/authenticating-to-github/creating-a-personal-access-token

 

Creating a personal access token - GitHub Docs

Creating a personal access token You should create a personal access token to use in place of a password with the command line or with the API. Personal access tokens (PATs) are an alternative to using passwords for authentication to GitHub when using the

docs.github.com

www.notion.so/Live-Study-4-ca77be1de7674a73b473bf92abc4226a

 

[백기선님과 함께하는 Live-Study] 4주차 - 제어문/반복문

목표

www.notion.so

github.com/kjw217/whiteship-live-study/blob/master/4th-week/%EC%A0%9C%EC%96%B4%EB%AC%B8.md

 

kjw217/whiteship-live-study

Contribute to kjw217/whiteship-live-study development by creating an account on GitHub.

github.com

blog.naver.com/hsm622/222159930944

 

4주차 과제: 제어문

# 목표 :: 자바가 제공하는 제어문을 학습하세요. # 학습할 것 : 선택문 : 반복문 ** 정리에 사용된 모든 ...

blog.naver.com