갑자기 환율을 체크할 일이 많아지다 보니 일일이 웹을 켜서 확인하는 것이 너무 귀찮았다.
그래프도 뭣도 필요없고 딱 금액만 나오면 되기 때문에 봇에 간단히 기능을 추가했다.
1. 환율 API
먼저 환율 데이터를 가져올 API가 필요했다.
개발자 등록하고 API 키 발급받고 하기 너무 귀찮았다. 그러던 중 아래의 환율 API를 발견했다.
GitHub - fawazahmed0/currency-api: Free Currency Exchange Rates API with 150+ Currencies & No Rate Limits
Free Currency Exchange Rates API with 150+ Currencies & No Rate Limits - GitHub - fawazahmed0/currency-api: Free Currency Exchange Rates API with 150+ Currencies & No Rate Limits
github.com
위 API는 키를 발급할 필요도 없고 URL 구조만 잘 맞춰서 GET 요청을 보내기만 하면 끝이었다.
그럼 바로 봇에 쓰기 위해, 이를 이용한 클래스를 작성했다.
2. 클래스 작성
import requests
class Exchange():
# 타이완 달러 > 한국 원만 계산
def NTtoKRW(twd):
request = requests.get("https://cdn.jsdelivr.net/gh/fawazahmed0/currency-api@1/latest/currencies/twd/krw.min.json")
result = request.json()
total = result['krw'] * twd
return total
# 화폐 코드 입력하여 API가 지원하는 모든 화폐단위에 대한 환율 제공
def exchCur(src, amount, dst):
request = requests.get(f"https://cdn.jsdelivr.net/gh/fawazahmed0/currency-api@1/latest/currencies/{src}/{dst}.min.json")
result = request.json()
total = result[f'{dst}'] * amount
return total
난 타이완 달러를 자주 확인해야 하기 때문에 저것만 바로 빼놨다.
아래는 KRW, USD, GBP 등 3자리 국가 코드를 입력해 결과를 받을 수 있게 했다.
클래스를 다 작성 했으니 이제 봇으로 넘어간다.
3. 봇 명령어 작성 및 결과
@client.tree.command()
@app_commands.describe(twd='신 타이완 달러')
async def t2k(interaction: discord.Interaction, twd: float):
"""신 타이완 달러를 원화로 표시"""
result = ex.NTtoKRW(twd)
await interaction.response.send_message(f"NT$ {twd}는 원화로 {result}원", ephemeral=True)
@client.tree.command()
@app_commands.describe(src='변환할 화폐', amount='돈의 양', dst='변환 목적 화폐')
async def exchange(interaction: discord.Interaction, src: str, amount: float, dst: str):
"""환율 계산"""
result = ex.exchCur(src, amount, dst)
src = src.upper()
dst = dst.upper()
await interaction.response.send_message(f"{src} {amount} to {dst} \n {result}", ephemeral=True)
위와 같이 명령어를 만들었다.
지금 보니 NTtoKRW()은 네이밍 컨벤션도 개판이고 그냥 exchCur(twd, amount, krw)로 해결할 수 있다. 바로 개선.
F-String을 사용해 결과를 단순 텍스트 메세지로 출력하고 ephemeral을 활성화해 자신만 볼 수 있게 했다.
이걸 실제로 실행한 결과는 아래와 같다.
일단 결과는 잘 뱉어준다.
난 여기서 만족하지만 나만 쓰려고 만든 봇은 아니기 때문에 긴 소수점 부분을 정리하고 콤마를 삽입할 것이다.
\n 양쪽에 공백이 있어서 생기는 미묘한 불편함도 있다.
Exchange() 클래스를 아래와 같이 수정했다.
import requests
class Exchange():
# 화폐 코드 입력하여 API가 지원하는 모든 화폐단위에 대한 환율 제공
def exchCur(src, amount, dst):
request = requests.get(f"https://cdn.jsdelivr.net/gh/fawazahmed0/currency-api@1/latest/currencies/{src}/{dst}.min.json")
result = request.json()
total = result[f'{dst}'] * amount
total = round(total, 2)
total = format(total, ',')
return total
NTtoKRW()는 삭제했다.
소수점은 두번째 자리에서 끊게 했고, 보기 좋게 하기 위해 콤마를 추가했다.
하는 김에 입력값을 결과에 표현하는 부분도 정리했다.
아래는 개선 후 실행한 결과이다.
입력값을 출력하는 부분에선 소수점을 정리하지 않았다.
환율 계산 결과를 출력하는 부분도 정상적으로 3자리마다 콤마를 찍어주고, 소수점도 정리되었다.
필요한 조치는 다 취한 느낌이다.
4. 마무리
임베드로 좀 꾸며볼까 했는데, 만족스러운 디자인 구성이 떠오르지 않는다.
왠지 그래프도 넣어야 할 것 같고 내가 만족하려면 환율 웹사이트처럼 많은 정보를 담아야 할 것 같다...
이건 나중에 내키면 건드려 볼 예정.
'Study > Python' 카테고리의 다른 글
[Python, AWS] csv에서 DynamoDB에로의 교체 (0) | 2023.05.10 |
---|---|
[Python] 로깅 클래스 추가 (0) | 2023.04.03 |
[Python] 봇에 Epoch Converter 추가 (0) | 2023.03.29 |
[Python] 봇의 명령어 실행 결과를 csv 형식으로 저장하기 (0) | 2023.01.22 |
[Python] CLOUDTYPE으로 디스코드 봇 배포 (0) | 2023.01.17 |