Skip to content

gaon-park/viper-backend

Repository files navigation

viper-backed

  • 메이플스토리 SOAP API를 사용한 대표캐릭터의 레벨업 예측기
  • 고객센터 문의 결과 상업적 목적의 사용이 허가되지 않은 api였기 때문에 상용화 금지!

목차

  1. 기술 스택
  2. 블로그 기록
  3. REST API
    1. 유저 신규 등록 API
    2. 로그인 API
    3. 캐릭터 정보 요청 API
    4. 배치 수동 실행
    5. 경험치 분석 API
    6. 데이터 이력 API

기술 스택

분류 기술
Language Kotlin
Framework SpringBoot
DB MySQL

블로그 기록

  1. 메이플스토리 API를 이용하여 대표캐릭터 정보를 불러오는 API
  2. Jsoup를 이용한 캐릭터 정보 탐색
  3. Json PropertyNamingStrategy

REST API

유저 신규 등록 API

  • post: /regist
  • 유저의 경험치 정보를 “스케줄링 된 배치 프로그램”을 이용하여 정기적으로 수집하려는 목적
request
{
    "accountId": "넥슨 홈페이지에서 알 수 있는 계정 ID", // 확인 방법은 블로그 기록 참고
    "email": "dol@gmail.com", // 이메일 ID 
    "password": "qwer", // 비밀번호
    "confirmPassword": "qwer", // 비밀번호 확인
    "terms": true // 정보 수집 동의
}
response
{
    "jwt_token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkb2xAZ21haWwuY29tIiwicm9sZXMiOlsiUk9MRV9VU0VSIl0sImlhdCI6MTY5NDg2NzM4NSwiZXhwIjoxNjk0ODY5MTg1fQ.D1Qj12Vqc1jeOoXb2YJ5A8sjd_AHzqCBQREg2NOtRw8"
}

로그인 API

  • post: /login
  • 유효한 토큰을 발급
request
{
    "email": "dol@gmail.com", // 이메일 ID
    "password": "qwer" // 비밀번호
}
response
{
    "jwt_token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJkb2xAZ21haWwuY29tIiwicm9sZXMiOlsiUk9MRV9VU0VSIl0sImlhdCI6MTY5NDg2NzM4NSwiZXhwIjoxNjk0ODY5MTg1fQ.D1Qj12Vqc1jeOoXb2YJ5A8sjd_AHzqCBQREg2NOtRw8"
}

캐릭터 정보 요청 API

  • get: /character?userId=1
request
  • parameter: userId (DB 등록된 유저의 pk)
response
{
    "avatar_img_url": "http://avatar.maplestory.nexon.com/Character/BMEALBGIOAHHIICCMOLCFNFKFLBLFMKPNGPBLMCKIGGHEFMKJOJOBHCFBCJNAAIELNHCBHBMFLBGONPBNDBIOEPKGPCABLDLCODBOLBGPHKAPPFCKNGBMBIPCEAFNIEKDKIBOGNIPAALJBBAJHBDELMNHAINLFLLOINKFILNENLPKCBILDIOHFJEMNAOBNFHKMEPPEHKPAMDMJAJPACFPMGGMCBFFLELJLGPDJNMHOFHPFGCBLDCIOECPFICDDKM.png",
	// 아바타 이미지 cdn link
    "world_name": "리부트", // 월드
    "character_name": "뽀돌", // 캐릭터 닉네임
    "lev": 278, // 캐릭터 레벨
    "exp": 3791080069971, // 캐릭터 보유 경험치
    "job": "해적", // 캐릭터 직업군
    "job_detail": "바이퍼", // 캐릭터 세부 직업
    "pop": 56, // 캐릭터 인기도
    "total_rank": 14006, // 캐릭터 전체 월드 랭킹
    "world_rank": 10324 // 캐릭터 월드 랭킹
}

배치 수동 실행

  • put: /batch/data
  • 캐릭터 정보 자동 수집 배치 프로그램 수동 실행 API
  • 실행 날짜로 수집된 데이터를 일괄 삭제하고 재수집
response
ok

경험치 분석 API

  • get: /analyze/exp
  • 지정 기간동안 수집된 데이터를 바탕으로 경험치 상승폭을 분석
  • 지정 기간의 페이스로 사냥을 지속했을 때 목표 레벨에 도달할 수 있는 날짜를 예측
request
{
    "userId": 1, // DB 등록된 유저의 pk
    "startDate": "2023-09-15", // 페이스 분석 시작 일자
    "endDate": "2023-09-16", // 페이스 분석 마지막 일자
    "targetLev": 280 // 달성하고자 하는 레벨
}
response

error 응답

  • 수집된 데이터로 페이스(상승폭)를 분석할 수 없는 경우
{
    "error": true,
    "message": "경험치 데이터가 쌓이지 않아 계산이 불가합니다."
}

정상 응답

{
    "total_duration": 1, // 페이스 분석에 사용된 기간의 길이
    "avg_exp": 14080000000, // 평균 경험치 상승치
    "avg_exp_percent": 0, // 평균 경험치 상승치(%)
    "target_lev": 280, // 목표 레벨
    "remain_exp_for_target_lev": 33869708042158, // 목표 레벨까지 남은 경험치
    "remain_days_for_target_lev": 2406, // 목표 레벨까지 남은 기간의 길이
    "exp_percent_for_target_lev": 79.42785723000222, // 목표 레벨까지 남은 경험치(%)
    "completion_date": "2030-04-18" // 달성 일자 (예측값)
}
{
    "total_duration": 1,
    "avg_exp": 14080000000,
    "avg_exp_percent": 0,
    "target_lev": 290,
    "remain_exp_for_target_lev": 996979461309219,
    "remain_days_for_target_lev": 70808,
    "exp_percent_for_target_lev": 11.59558144026126,
    "completion_date": "2217-07-29"
}
{
    "total_duration": 1,
    "avg_exp": 14080000000,
    "avg_exp_percent": 0,
    "target_lev": 300,
    "remain_exp_for_target_lev": 9970006377507102,
    "remain_days_for_target_lev": 708097,
    "exp_percent_for_target_lev": 1.2946430879619548,
    "completion_date": "3962-05-31"
}

데이터 이력 API

  • get: /character/history
  • 수집된 데이터 이력 요청 API
request
{
    "userId": 1 // DB 등록된 유저의 pk
}
response
{
    "expHistory": [
        {
            "lev": 278,
            "exp": 3804080069971,
            "target_lev": 300,
            "exp_percent_for_next_lev": 21.204578958618477,
            "exp_percent_for_target_lev": 1.2946430879619548,
            "date": "2023-09-16"
        }
    ],
    "worldRankHistory": [
        {
            "rank": 10324,
            "date": "2023-09-16"
        }
    ],
    "totalRankHistory": [
        {
            "rank": 14006,
            "date": "2023-09-16"
        }
    ],
    "popHistory": [
        {
            "pop": 56,
            "date": "2023-09-16"
        }
    ]
}

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published