0. 서론
첫 번째 프로젝트는 깊이 있는 주제였지만 개선할 점도 많았습니다. 반면, 이번 프로젝트는 간단하면서도 실용적인 아이디어로 빠르게 떠올라 먼저 진행하기로 결정했습니다. 특히, API를 활용하고 Django를 연습할 만한 프로젝트를 고민하던 중, 제가 잘 알고 있는 로스트아크라는 게임을 활용해보자는 아이디어가 떠올랐습니다. 로스트아크는 유명한 게임이기도 하고, 제가 직접 플레이한 경험이 있어 프로젝트 구상과 진행이 비교적 수월할 것이라 판단했습니다.
1. 준비
일단 저는 생활 관련된 api를 가져와서 효율을 분석해보는 간단한 웹사이트를 만들려고합니다. 일단 게임회사에서 제공해주는 api 사이트 에 들어가보면 간단히 로그인하고 회원가입도 간단합니다. 들어가서 api 키를 간단하게 발급받으면됩니다.
1-1) AUTHORIZE
키를 발급받으면 여기는 포스트맨을 사용해봤던 저로써는 익숙한데요 바로 Bearer jwt_key를 넣으면 됩니다.

밑에 벨류에 본인의 발급받은 키를 넣으시면 끝!
1-2) 웹사이트에서 작동 예시
간단하게 공지사항의 정보를 알고 싶으면 해당 링크에 들어가서

Try it out 버튼을 누르면 searchText 박스가 활성화 됩니다. 거기서 본인이 공지사항에서 검색하고싶은 단어를 입력하고 Execute 버튼을 누르면 22와 관련된 공지가 나오게 됩니다.


이렇게 관련된 내용을 보여줍니다.
1-3) 코드
curl -X 'GET' \
'https://developer-lostark.game.onstove.com/news/notices?searchText=22' \
-H 'accept: application/json' \
-H 'authorization: bearer 개인코드'
이런식으로 Curl 문으로 주어지는데 처음보는 언어지만 검색해보니 변환해주는 사이트가 있어서 이를 참조했습니다.
이런식으로 vscode를 이용해서 python으로 해도 똑같이 작동합니다.
2. 시작
이제 본격적으로 생활 효율에 관한 정보를 얻어야 합니다. 그러기 위해서는 각 원하는 아이템의 id값을 알아야하는데요. 로아의 경우 아이템의 정보를 auctions와 markets로 구분해서 관리하고 있습니다. 로아 유저라면 어느 아이템이 어디에있는지 금방 아실 수 있을겁니다. 저는 생활 재료인 고대 유물과 같은 것들은 모조리 markets에서 구매가 가능하므로 market으로 진행하였습니다.
2-1) markets/options
이 get요청을 통하면


이런식으로 code명을 주게됩니다. 저는 일단 필요한것이 고고학과 융화 재료이므로 90700이라는 코드명과 50010이라는 코드명을 기억하고 있으면 됩니다.
2-2) 검색

이렇게 post요청을 클릭해서 해당코드와 알아보고싶은 재료명을 일부만이라도 적어서 excute를 누르면 됩니다. 실제 사이트에서 예시로 보여준 value값에 name과 code만 바꿔서 넣으면 에러가 발생하니까 몇개 딕셔너리를 지워야 합니다. 이런거 하나하나 알아야 하는게 좀 불편한 점이 있네요.
2-3) 결과값
{
"PageNo": 1,
"PageSize": 10,
"TotalCount": 5,
"Items": [
{
"Id": 6882701,
"Name": "고대 유물",
"Grade": "일반",
"Icon": "https://cdn-lostark.game.onstove.com/efui_iconatlas/use/use_9_3.png",
"BundleCount": 100,
"TradeRemainCount": null,
"YDayAvgPrice": 55.6,
"RecentPrice": 57,
"CurrentMinPrice": 56
},
]
}
그럼 이렇게 코드명이 90700이면서 유물이라는 이름을 가지는 아이템들의 정보를 보여주게 됩니다. 여기선 하나만 보여줬지만 몇개 더 나왔습니다.
2-4) 코드
curl문으로 주어지기때문에 python형식으로 바꾼뒤에 맞춰서 수정해주었습니다.
import requests
import json
import os
from dotenv import load_dotenv
# .env 파일에서 환경 변수 로드
load_dotenv()
# 환경 변수에서 토큰 가져오기
Token = os.getenv('토큰값')
headers = {
'accept': 'application/json',
'authorization': f'Bearer {Token}',
'Content-Type': 'application/json',
}
json_data = {
'Sort': 'GRADE',
'CategoryCode': 50010,
'ItemName': '융화',
'PageNo': 0,
'SortCondition': 'ASC',
}
# {
# "Sort": "GRADE",
# "CategoryCode": 90700,
# "ItemName": "유물",
# "PageNo": 0,
# "SortCondition": "ASC"
# }
response = requests.post('https://developer-lostark.game.onstove.com/markets/items', headers=headers, json=json_data)
# 응답 상태 코드 확인
print(f"Response Status Code: {response.status_code}")
if response.status_code == 200:
# JSON 응답 데이터를 보기 좋게 출력
data = response.json()
print(json.dumps(data, indent=4, ensure_ascii=False)) # 전체 응답 출력
# 개별 아이템 정보 출력
print("\n--- 검색된 아이템 목록 ---")
items = data.get("Items", [])
for item in items:
print(f"아이템 이름: {item['Name']}")
print(f"아이템 등급: {item['Grade']}")
print(f"아이콘 URL: {item['Icon']}")
print(f"번들 개수: {item['BundleCount']}")
print(f"어제 평균 가격: {item['YDayAvgPrice']} 골드")
print(f"최근 거래 가격: {item['RecentPrice']} 골드")
print(f"현재 최저 가격: {item['CurrentMinPrice']} 골드")
print("-" * 40)
else:
print("API 요청 실패")
print(response.text)
마찬가지로 실행시키면 원하는 값을 출력할 수 있습니다. 물론 env파일을 이용해서 token을 가리는게 좋겠죠?
3. 후기
이제 정보를 가져오는 api를 이용했으니 이 정보를 바탕으로 효율식을 구하는 과정을 가지게 될 것입니다. 그리고 나서 직접 배포를 해보는 시간을 가지게 될 거 같습니다.
'Django 개인프로젝트 > 두번째 프로젝트' 카테고리의 다른 글
| 2. API를 이용한 Django 미니 프로젝트 (4) | 2024.12.09 |
|---|