[Project] 던파 open API 활용 방법

DeMar_Beom·2023년 5월 15일

Neople API 활용 방법

준비

API 활용 전 필요 데이터 가져오기

  • Neople API를 호출하기 위해서는 사전에 필요한 정보는 서버(Server), 캐릭터명(characterName)을 통해 캐릭터 고유 코드(characterId) 획득 필요
  • 던담 사이트 딜러 랭킹을 크롤링하여 서버와 캐릭터명을 얻는 코드 구현
from bs4 import BeautifulSoup as BS
import csv
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
import time 
import requests


driver = webdriver.Chrome('executable_path=DRIVER_PATH, chrome_options=chrome_options')

name_list = []
server_list = []
damage_list = []
val_list = []

for i in range(1,6) : 
    url = "https://dundam.xyz/damage_ranking?page={}&type=7&job=%E7%9C%9E%20%EC%9B%A8%ED%8E%80%EB%A7%88%EC%8A%A4%ED%84%B0&baseJob=%EA%B7%80%EA%B2%80%EC%82%AC(%EB%82%A8)&weaponType=%EC%A0%84%EC%B2%B4&weaponDetail=%EC%A0%84%EC%B2%B4" #페이지 번호가 바뀌는 get방식의 홈페이지 구조 
    driver.get(url.format(i))
    time.sleep(2)
    name_list += [x.text for x in driver.find_elements(By.CLASS_NAME,'nik')] # 닉네임
    server_list += [k.text for k in driver.find_elements(By.CLASS_NAME,'svname')] # 서버
    damage_list += [j.text for j in driver.find_elements(By.CLASS_NAME,'damegen')] # 데미지
    val_list += [y.text for y in driver.find_elements(By.CLASS_NAME, 'val')] # 명성

    name_list = " ".join(name_list).split()
    server_list = " ".join(server_list).split()
    damage_list = " ".join(damage_list).split()
    val_list = " ".join(val_list).split()

서버명 영어로 변경

b = []
for value in pair.values() :
    if value == '카인' : 
        b.append('cain')
    elif value == '디레지에' :
        b.append('diregie')
    elif value == '시로코' : 
        b.append('siroco')
    elif value == '프레이' : 
        b.append('prey')
    elif value == '카시야스' : 
        b.append('casillas')
    elif value == '힐더' : 
        b.append('hilder')
    elif value == '안톤' : 
        b.append('anton')
    elif value == '바칼' : 
        b.append('bakal')

닉네임과 서버를 딕셔너리 형태로 변환

pair = {key: value for key, value in zip(name_list,b)}
pair

{'문일성': 'cain',
'반요': 'anton',
'팡재': 'anton',
'Last아담': 'cain',
'이불도둑': 'casillas',
'키비치': 'cain',
'누우런새우': 'casillas',
'찰리.': 'hilder',
'검협': 'cain',
'갓참철': 'anton',
'고태경': 'anton',
'마우스': 'cain',
'검슨': 'casillas',
'말고탐': 'cain',
'던접까지n초': 'casillas',
'빨래줄': 'hilder',
'초류황': 'cain',
'딕맨': 'casillas',
'맹룡선풍참': 'cain',
'백나람': 'siroco',
'B.G': 'diregie',
'서정무': 'cain',
'세츠': 'cain',
'장야': 'cain',
'invincib!e': 'cain',
'맹룡선풍챰': 'bakal',
'제이': 'anton',
'폼만이': 'cain',
'태산베기': 'cain',
'무적': 'diregie',
'벨': 'bakal',
'껟': 'hilder',
'검기잇~!!': 'cain',
'윂빙': 'anton',
'천상.': 'bakal',
'로템검신': 'prey',
'밤': 'cain',
'고니로니웨펀': 'anton',
'살찐댕댕이': 'cain',
'새우김치만두': 'bakal',
'안디': 'anton',
'천상계향페브': 'cain',
'Asmus=': 'siroco',
'싸움법': 'cain',
'갈래신': 'casillas',
'차지마스터': 'prey',
'원이웨펀': 'casillas',
'파티': 'siroco',
'멸검신': 'hilder',
'하복어울림': 'anton'}

API연결을 통해 데이터 호출

  • 정확한 데이터 호출을 위해 서버와 닉네임명을 대입하고, 직업 캐릭터 고유코드를 추가
answer = []

APIKEY = '??????????????????????' #개인 고유 api key

with requests.Session() as session:
    for characterId_encoded in a:
        # URL 조합
        url = "https://api.neople.co.kr/df/servers/all/characters?characterName={}&jobId=41f1cdc2ff58bb5fdc287be0db2a8df3&jobGrowId=37495b941da3b1661bc900e68ef3b2c6&apikey={}".format(characterId_encoded, APIKEY)
        req = session.get(url)
        # API 응답의 결과를 확인하여 유효한 캐릭터 ID가 있는 경우에만 answer 리스트에 추가
        answer.append(req.json())

[{'rows': [{'serverId': 'cain',
'characterId': 'd417c0189ebc9fcf3936a99db993872a',
'characterName': '문일성',
'level': 110,
'jobId': '41f1cdc2ff58bb5fdc287be0db2a8df3',
'jobGrowId': '37495b941da3b1661bc900e68ef3b2c6',
'jobName': '귀검사(남)',
'jobGrowName': '眞 웨펀마스터'}]},
{'rows': [{'serverId': 'anton',
'characterId': 'a2020b9a7d048b6b07f6cd86fce5a5c4',
'characterName': '반요',
'level': 110,
'jobId': '41f1cdc2ff58bb5fdc287be0db2a8df3',
'jobGrowId': '37495b941da3b1661bc900e68ef3b2c6',
'jobName': '귀검사(남)',
'jobGrowName': '眞 웨펀마스터'}]},
{'rows': [{'serverId': 'anton',
'characterId': 'c1d4ab6953f79e32b36809ec278b29e5',
'characterName': '팡재',
'level': 110,
'jobId': '41f1cdc2ff58bb5fdc287be0db2a8df3',
'jobGrowId': '37495b941da3b1661bc900e68ef3b2c6',
'jobName': '귀검사(남)',
'jobGrowName': '眞 웨펀마스터'}]},

작업하면서 느낀 점 & 향후 할 작업

  • open API를 통해 실시간 연동하는 방법 확인 필요
  • 일정 유저뿐만이 아니라 전체 유저 닉네임을 확인하여 작업할 수 있는 방법은?
  • 유저 능력치, 장착장비 ERD다이어그램 작성

0개의 댓글