solved ac api 비공식 문서를 사용하였습니다.
https://solvedac.github.io/unofficial-documentation/#/operations/verifyAccountCredentials
위 사이트를 참조 하였습니다.
요구사항으로는
위 두가지를 teamrule 과 비교하여 미션 성공 실패 유무를 체크하고
미션을 실패할경우 line notify 를 통해 실패 메시지 전달하는 것 입니다.
데이터는 아래 사진과 같이 json 형태로 나옵니다.
2023.04.06 - 게시글 첫 작성(계획 수립/api 호출 성공)
SolvedApiManager class
private final String BASE_URL = "https://solved.ac/api/v3/user";
private final String api_user = "/show";
private final String api_problem = "/problem_stats";
private final String api_handle = "?handle=";
private User user;
private String getUserInformation() throws UnsupportedEncodingException {
return BASE_URL +
api_user +
api_handle + "wy9295";
}
private String getProblemStats() throws UnsupportedEncodingException{
RestTemplate restTemplate = new RestTemplate();
return BASE_URL +
api_problem +
api_handle + "wy9295";
}
//==문제풀이 로직==//
public Integer getSolvedCount() throws IOException, ParseException {
RestTemplate restTemplate = new RestTemplate();
String jsonString = restTemplate.getForObject(getUserInformation(), String.class);
JSONParser jsonParser = new JSONParser();
Object jsonObject = jsonParser.parse(jsonString);
JSONObject jsonBody = (JSONObject) jsonObject;
return (Integer) jsonBody.get("solvedCount");
}
public JSONArray getProblemCount() throws IOException, ParseException {
RestTemplate restTemplate = new RestTemplate();
String jsonString = restTemplate.getForObject(getProblemStats(), String.class);
JSONParser jsonParser = new JSONParser();
Object jsonObject = jsonParser.parse(jsonString);
JSONArray jsonArray = (JSONArray) jsonObject;
return jsonArray;
}
요구사항인 문제풀이 개수와, 문제 level 별 문제 풀이 개수 파싱 작업
controller 에 선택한 레벨에 맞는 문제풀이 수 출력 로직 작성(임시)
@Autowired
private UserService userService;
@Autowired
private SolvedApiManager solvedApiManager;
@GetMapping("/test")
public JSONArray fetch2() throws IOException, ParseException, UnsupportedEncodingException{
JSONArray test = this.solvedApiManager.getProblemCount();
if (test.size() > 0) {
for (int i = 0; i < test.size(); i++) {
JSONObject jsonObj = (JSONObject) test.get(i);
if (jsonObj.get("level").equals(1L)) {
System.out.println(jsonObj.get("solved"));
}
}
}
return test;
}
성공, 실패유무 체크
public enum SolvedStatus {
COMPLETE, FAIL
}
TeamRule 에 따른 미션 수행유무 확인을 위해 SolvedStatus 생성
현 상황에서 추가 작업 필요하다고 느끼는 것
2023.04.09 - json 파싱