[AD]Travala 암호화폐로 유명호텔 싸게 예약하자

굳헬로의 스팀 프로그램 일기!! 예순세번째 #63 파이썬 스팀몬스터 API를 이용하여 사용자가 보유하고 있는 모든 카드의 값을 계산해보자!!

in sct •  5 months ago  (Edited)

목요일 잘 보내고 계신가요??

가을 하늘이 너무 멋진 하루인것 같습니다.

모든걸 내려두고 여행이 떠나고 싶어지지만...

그래도 오늘의 프로그램 일기 남겨보겠습니다.


어제는 스팀코인판 조합의 자동 보팅 프로그램을 업그레이드 했었는데, 별탈없이 잘 돌아가고 있는것 같아 안심이 되네요.

그리고 스팀몬스터 마켓의 정보를 가져오는 API들을 살펴 보았는데요.

get_for_sale()을 이용하여 마켓에 등록된 카드의 정보를 가지고 올 수 있었으며, get_market_for_sale_by_card()는 특정 카드의 마켓 정보를 가지고 올 수 있었습니다.

get_market_for_sale_grouped()를 이용하면 모든 카드의 최저가와 최고가를 알 수 있으며, get_market_status()를 이용하여 해당 카드의 정보를 가지고 옵니다.

이러한 기능들을 이용하여 오늘은 제가 가진 카드의 시세를 계산해주는 프로그램을 한번 만들어 보겠습니다.

먼저 스팀몬스터 마켓의 정보와 제가 가진 카드의 정보를 가져와서

steem_id = "goodhello"
my_cards = api.get_collection(steem_id)
all_cards = api.get_card_details()
sale_grouped = api.get_market_for_sale_grouped()

이 정보들을 이용해 제가 가진 카드들의 시세를 최저가로 계산을 해보도록 하겠습니다.

for mycard in my_cards['cards'] :
    for allcard in all_cards :                
        if (mycard['card_detail_id'] == allcard['id']) ) :
            if duplicate_id is not mycard['card_detail_id'] :
                card_name = allcard['name']
                card_color = allcard['color']
                card_level = mycard['level']
                rarity = allcard['rarity']
                xp = mycard['xp']

                if rarity == 1 :
                    rarity = "커먼"
                elif rarity ==21 :
                    rarity = "레어"
                elif rarity == 3 :
                    rarity = "에픽"
                elif rarity == 4 :
                    rarity = "전설"
                card_uid = mycard['uid']

                if mycard['gold'] :
                    gold = "골드"
                else :
                    gold = "일반"

                if edition == 0 :
                    edition = "알파"
                elif edition == 1 :
                    edition = "베타"
                elif edition == 2 :
                    edition = "프로모션"
                elif edition == 3 :
                    edition = "리워드"

                print("card_detail_id : ", allcard['id'], " " + edition + " " + gold + " " + rarity + " " + card_name + " " + card_color + " " + str(card_level) + "레벨 xp : ", xp, " " + card_uid + " 가격 : ", end='')

               for sale in sale_grouped :                
                    if (mycard['card_detail_id'] == sale['card_detail_id']) and (mycard['edition'] == sale['edition']) and (mycard['gold'] == sale['gold']) :                        
                        print(sale['low_price'])
                        sum = sum + sale['low_price']

우선 이전에 만들었던 제가 가진 카드 한장 한장의 정보를 출력하는 프로그램에 get_market_for_sale_grouped() 이용하여 최저가를 찾아주는 코드를 추가하였습니다.

...
card_detail_id :  5  베타 일반 레어 Malric Inferno Red 8레벨 xp :  8525  C1-5-8BBDCNS6W0 가격 : 0.693
card_detail_id :  5  베타 골드 레어 Malric Inferno Red 3레벨 xp :  400  G1-5-9U5QEAXVUO 가격 : 7.209
card_detail_id :  5  베타 일반 레어 Malric Inferno Red 2레벨 xp :  150  C1-5-PMJ47I8Z3K 가격 : 0.693
card_detail_id :  5  베타 일반 레어 Malric Inferno Red 2레벨 xp :  150  C1-5-NHULB0RMC0 가격 : 0.693
card_detail_id :  5  베타 일반 레어 Malric Inferno Red 2레벨 xp :  150  C1-5-AAXFH51LV4 가격 : 0.693
card_detail_id :  5  베타 일반 레어 Malric Inferno Red 2레벨 xp :  150  C1-5-0JRGL649YO 가격 : 0.693
card_detail_id :  5  베타 일반 레어 Malric Inferno Red 2레벨 xp :  150  C1-5-7ZU8QY8RKW 가격 : 0.693
card_detail_id :  5  알파 일반 레어 Malric Inferno Red 1레벨 xp :  0  C0-5-PPLNPPPTVK 가격 : 0.9
card_detail_id :  5  베타 일반 레어 Malric Inferno Red 1레벨 xp :  0  C1-5-JXHIBIH9EO 가격 : 0.693
...

하지만 이 최저가는 1장의 가격이고, 여러장이 합쳐져서 레벨이 올라간 카드들은 몇장이 합쳐졌는지 알아내어 계산을 다시 해야 합니다.

그러기 위해서 카드의 에디션과 등급, 경험치 정보가 추가로 필요하더군요.

이 정보를 이용해 각 카드가 몇장으로 이루어 졌는지 계산을 해보겠습니다.

원래 스팀몬스터 API에는 alpha_xp라는 정보가 들어 있던데, 아마도 각 카드의 장당 경험치 정보를 넣었던 것 같은데 베타카드, 리워드 카드, 프로모션 카드에는 추가가 되지 않았네요.

각 카드의 경험치 정보가 들어있었다면 손쉽게 해결이 되는데, 개발측에서 신경을 안 쓴건지... 제가 못 찾는건지... 아쉽네요.

그래서 경험치로 몇장의 카드가 합쳐진건지 계산을 직접 해보겠습니다.

우선 알파카드와 베타카드의 일반카드와 골드카드의 레벨별 수량은 다음과 같습니다.

그리고 리워드 카드는 베타카드와 동일하기 때문에 계산이 쉬운데, 프로모션 카드 중 일부는 알파카드와 동일하고, 일부는 베타카드와 동일하기 때문에 이부분을 신경 써야 할 것 같구요.

알파 일반 커먼 카드 1장 경험치 20
알파 일반 레어 카드 1장 경험치 100
알파 일반 에픽 카드 1장 경험치 250
알파 일반 전설 카드 1장 경험치 1000

알파 골드 커먼 카드 1장 경험치 250
알파 골드 레어 카드 1장 경험치 500
알파 골드 에픽 카드 1장 경험치 1000
알파 골드 전설 카드 1장 경험치 2500

일부 프로모션 카드는 위와 동일합니다.

베타(리워드) 일반 커먼 카드 1장 경험치 15
베타(리워드) 일반 레어 카드 1장 경험치 75
베타(리워드) 일반 에픽 카드 1장 경험치 175
베타(리워드) 일반 전설 카드 1장 경험치 750

베타(리워드) 골드 커먼 카드 1장 경험치 200
베타(리워드) 골드 레어 카드 1장 경험치 400
베타(리워드) 골드 에픽 카드 1장 경험치 800
베타(리워드) 골드 전설 카드 1장 경험치 2000

일부 프로모션 카드는 위와 동일합니다.

알파카드와 동일한 경험치를 가지는 프로모션 카드는 모두 4장이며

card_detail_id가 75번부터 78번인

이 4장의 일반 골드 카드들은 알파카드와 동일한 경험치를 가지고 있습니다.

그리고 또 하나 고려해야 할게 card_detail_id 130번인 아리우스는

처음부터 4레벨로 주어지기 때문에 이 카드는 4레벨이지만 1장으로 계산해야 합니다.

이제 이 것을 코드로 만들어 보겠습니다.

if edition == "프로모션" :
    if mycard['card_detail_id'] > 74 and mycard['card_detail_id'] < 79 :
        edition = "알파"
    elif mycard['card_detail_id'] == 130 :
                                edition = "아리우스"
    else :
        edition = "베타"

if edition == "알파" and gold == "일반" and rarity == "커먼":
    card_num = (xp / 20) + 1
elif edition == "알파" and gold == "일반" and rarity == "레어":
    card_num = (xp / 100) + 1
elif edition == "알파" and gold == "일반" and rarity == "에픽":
    card_num = (xp / 250) + 1
elif edition == "알파" and gold == "일반" and rarity == "전설":
    card_num = (xp / 1000) + 1
elif edition == "알파" and gold == "골드" and rarity == "커먼":
    card_num = xp / 250
elif edition == "알파" and gold == "골드" and rarity == "레어":
    card_num = xp / 500
elif edition == "알파" and gold == "골드" and rarity == "에픽":
    card_num = xp / 1000
elif edition == "알파" and gold == "골드" and rarity == "전설":
    card_num = xp / 2500
elif (edition == "베타" or edition == "리워드") and gold == "일반" and rarity == "커먼":
    card_num = (xp / 15) + 1
elif (edition == "베타" or edition == "리워드") and gold == "일반" and rarity == "레어":
    card_num = (xp / 75) + 1
elif (edition == "베타" or edition == "리워드") and gold == "일반" and rarity == "에픽":
    card_num = (xp / 175) + 1
elif (edition == "베타" or edition == "리워드") and gold == "일반" and rarity == "전설":
    card_num = (xp / 750) + 1
elif (edition == "베타" or edition == "리워드") and gold == "골드" and rarity == "커먼":
    card_num = xp / 200
elif (edition == "베타" or edition == "리워드") and gold == "골드" and rarity == "레어":
    card_num = xp / 400
elif (edition == "베타" or edition == "리워드") and gold == "골드" and rarity == "에픽":
    card_num = xp / 800
elif (edition == "베타" or edition == "리워드") and gold == "골드" and rarity == "전설":
    card_num = xp / 2000

그리고 결과를 출력해보니...

card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 10레벨 xp :  7565  C1-1-7J75R5OTA8 506 장 가격 :  25.3
card_detail_id :  1  베타 골드 커먼 Goblin Shaman Red 4레벨 xp :  200  G1-1-EAAHX3GFHC 1 장 가격 :  0.87
card_detail_id :  1  베타 골드 커먼 Goblin Shaman Red 4레벨 xp :  200  G1-1-7UGPIGW51C 1 장 가격 :  0.87
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-PVAASK7TU8 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-I2BU7DDWI8 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-SL0C1IZLCW 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-TBU0XNODJ4 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-AJSAPGIKLS 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-KR2PJ3PX2O 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-E0R6GEZ4HS 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-69XUKTC6GG 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-9E0ZSH3XSW 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-QOQNTAT25C 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-UL9ZRLMRXS 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-A727D0QERK 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-CBGGJPSOB4 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-XLFQW2OUWG 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-BPQ2CNZ9U8 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-G31CDLC4E8 1 장 가격 :  0.05
card_detail_id :  1  알파 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C-VN25JGOLM8 1 장 가격 :  0.404
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-PE8PFP7F28 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-Y9PJHPQAE8 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-LY3THNQ02O 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-VWP2SM5JB4 1 장 가격 :  0.05
card_detail_id :  1  베타 일반 커먼 Goblin Shaman Red 1레벨 xp :  0  C1-1-AZNJ755CFK 1 장 가격 :  0.05

...


총합 : 5271.099

현재 최저가로 판다고 팔리는건 아니겠지만... 일단 5000달러 이상이 나오는...

여기에서 한 10% 20% 싸게 판다고 쳐도 최소 4000달러 이상은 나올 것 같네요.

어쨌거나 파이썬스팀몬스터 API를 이용해 제가 가진 카드의 값들을 계산해보니 재미있었습니다.

그럼 다음 시간에는 또 다른 재미난 걸 준비해 보도록 하겠습니다.

오늘 하루도 행복하시고~ 맛있는 저녁식사 하시기를 바랍니다.


굳헬로의 스팀 프로그램 일기!! 시리즈

#1 Python 프로그램 설치 && steemengine 파이썬 api 설치 && 간단한 steemengine 예제

#2 비주얼 스튜디오 코드 프로그램 설치 && 비주얼 스튜디오 코드를 사용하여 파이썬 다루기 && 간단한 steemengine 예제

#3 스팀엔진 토큰의 정보를 가져오는 findOne() && 누군가의 토큰 사용 내역을 가져오는 get_history() && JSON 데이터 출력

#4 steemengine Token 클래스 && Token.get_holder() && Token.get_market_info() && Token.get_buy_book() && Token.get_sell_book()

#5 스팀엔진 블록을 뒤져서 원하는 정보를 찾아보자!! 스팀엔진 마켓 거래 내역을 뽑아내는 예제

#6 파이썬으로 스팀엔진 토큰들을 클레임 해보자.

#7 드디어 첫 실전!! 무한 반복 작업 수행하기!! 이제 직접 클레임 하는 손맛은 잊자. 무한 반복 자동 클레임!!

#8 텔레그램 봇을 이용해 알림을 받아보자!! && 무한 반복 자동 클레임의 정보를 텔레그램으로 받아보기!!

#9 무한 반복 자동 클레임 업그레이드!! && 토큰 잔고 확인 && 토큰 전송과 토큰 전송 내역을 텔레그램으로 받아보기!!

#10 토큰 전송내역을 검사하고, 토큰을 전송 받으면 텔레그램으로 알림을 받아보기!!

#11 스팀엔진 토큰 임대내역 추적. 쉽지 않았던 머나먼 여정 (1/2)

#12 스팀엔진 토큰 임대내역 추적. 쉽지 않았던 머나먼 여정 (2/2) 스팀엔진 토큰 임대내역 추적 완료!!

#13 웹 프로그래밍의 시작!! 파이썬을 이용하여 정보를 MySQL 데이터 베이스에 저장해보기!!

#14 파이썬을 이용하여 데이터베이스로부터 정보를 가져오기 && 스팀코인판 3대풀 임대내역 데이터베이스 작업 완료!!

#15 웹 프로그래밍을 이용하여 스팀코인판 3대조합의 임대 내역을 웹으로 확인해보자 !!

#16 스팀엔진 최신 블록을 검사하여 필요한 정보를 데이터베이스에 저장하기!! 3대 조합의 임대내역을 최신으로 저장하기!!

#17 조합들이 필요한 기능 드디어 완성!! 자동 클레임과 자동 분배 기능!!

#18 스팀코인판 3대 조합의 임대내역과 실시간 예상 분배 금액을 웹으로 확인해보자!!

#19 어제 만든 프로그램 업그레이드!! 개별 상세내역보기 기능 추가!!

#20 시행착오... 그리고 시련... 하지만 원사마님 덕분으로 엄청난 레벨업!! 감사합니다. 더욱 발전하겠습니다.

#21 레벨업을 했지만 또 다시 찾아온 시련!! 프로그램 결과와 블록체인에 기록된 결과가 다르다!! 어떻게 해야 할까...

#22 오늘부터 새로운 도전!! 자동 보팅 만들기!! 그 첫번째 스팀코인판의 소각글에 자동보팅을 해보자!! 첫번째 시간 (1/N)

#23 스팀코인판의 소각글의 정보를 가지고 와서 자동보팅을 해보자!! 그 두번째 시간 (2/N)

#24 스팀코인판 3대조합의 임대내역을 웹으로 확인해보자!! 업그레이드!!

#25 스팀코인판 3대조합의 임대내역을 웹으로 확인해보자!! 업그레이드 2!! 그리고 개발 예정 사항 공개!!

#26 드디어 첫 실전 가동 준비중... 스팀코인판 유니온 조합의 수익 자동분배 작업 완료중...

#27 스팀코인판 유니온 조합 첫 자동 분배 결과!! 그리고 보완!!

#28 스팀코인판 유니온 조합 자동 분배 프로그램의 결과를 웹으로 확인해 보자!!

#29 스팀코인판 유니온 조합 자동 분배 상황을 텔레그램으로 확인!! 임내 확인 페이지 정렬 기능 추가!!

#30 스팀코인판 조합의 임대량 페이지 정렬 기능 업그레이드!! 그리고 임대량 파이 차트 완성!!

#31 스팀코인판 조합의 하루하루 임대량 변화를 차트로 확인해보자!!

#32 트리플A를 이용하면서 그동안 번거로웠던 클레임 스테이킹 전송 작업 이젠 안녕!! 자동으로 AAA를 전송하고 클레임하고 스테이킹을 해보자!!

#33 굳헬로가 만든 스팀코인판 조합 자동 클레임과 자동 분배 프로그램 원피스 조합에도 사용 개시!!

#34 스팀코인판 조합 원피스 자동 클레임과 자동 분배 프로그램 업그레이드!! 텔레그램 봇으로 그룹 메시지를 받아보자!!

#35 스팀에서 새글 정보를 텔레그램으로 받아보자!! 함께 정보를 받아보는 텔레그램 그룹방 개설!!

#36 스팀엔진 블록 검사 놓치는 블록이 없도록 해보자!! 파일 입출력 기능 활용!!

#37 스팀엔진 블록을 검사하여 본인글의 댓글을 텔레그램 알람으로 받아보자!!

#38 드디어 완성!! 보팅 알람봇!! 스팀엔진 블록을 검사하여 본인글에 보팅이 찍히면 텔레그램 알람으로 받아보자!!

#39 파이썬과 텔레그램을 이용한 챗봇 프로그래밍의 시작!! 그 첫번째!! 챗봇과 대화를 해보고,특정 메시지에 반응을 해보자!!

#40 파이썬과 텔레그램을 이용한 챗봇 프로그래밍!! 파이썬에 CommandHandler를 사용하여 특정 명령어를 내려보자!!

#41 굳헬로의 텔레그램 보팅알람 서비스 일단은 완성!! 앞으로 다양한 기능 추가 예정!! 사용해보고 후기 남겨주세요!!

#42 업비트의 원화 마켓 코인들의 시세를 텔레그램으로 받아보자!! /get 비트코인, /get 스팀, /get 코인이름 명령어 등록!!

#43 업비트의 원화 마켓 코인들의 시세를 텔레그램으로 받아보자2!! 알려줘 비트코인, 알려줘 스팀 노노!! 이제 바로 비트코인 스팀 명령어 등록!!

#44 매일 매일 새로운 기능이 추가되고 있는 굳스팀 챗봇!! 챗봇을 이용하여 스팀엔진 토큰의 시세 정보를 받아보자!!

#45 텔레그램 챗봇을 이용하여 최신 코인 주요 뉴스를 받아보자!! 굳스팀 챗봇 소개!!

#46 굳스팀 텔레그램 챗봇 새 기능 추가!! 굳스팀 챗봇을 이용하여 최신 헤드라인 뉴스 정보를 받아보자!!

#47 뉴스를 구독해보자!! 명령어 입력없이 특정 시간 챗 봇이 뉴스를 자동으로 보내 드립니다.

#48 본격적으로 스팀코인판 조합의 자동 보팅시스템 제작 돌입!! 기본 설계 및 보팅 설정 페이지 작업 완료!!

#49 스팀코인판 조합의 자동 보팅시스템 제작 2번째 시간!! 보팅 설정에 따라 각 조합원 별로 보팅룰을 적용해 보자!!

#50 스팀코인판 조합의 자동 보팅시스템 제작 3번째 시간!! 설 정된 보팅룰을 파이썬 자동 보팅 프로그램에 가져오기!!

#51 스팀코인판 조합의 자동 보팅시스템 제작 4번째 시간!! 블록을 검사하여 설정된 보팅룰로 보팅하기!!

#52 스팀코인판 조합의 자동 보팅시스템 제작 5번째 시간!! 자동 보팅시스템 테스트 현황!! 굳!! 따봉~~

#53 스팀코인판 조합의 자동 보팅시스템 제작 6번째 시간!! 보팅룰 검사 프로그램과 자동 보팅 프로그램의 분리!!

#54 스팀코인판 조합의 자동 보팅시스템 제작 마지막 시간!! 드디어 실전 가동!! 오류 수정 및 보팅 현황 확인 웹 페이지 제작 완료!!

#55 이번에는 유니온 조합의 자동보팅 시스템을 만들어 보자!! 유니온 조합의 보팅설정 프로그램과 보팅 설정 결과 확인 기능 완료!!

#56 스팀 블록을 검사하여 유니온 조합의 조합원 글에 보팅 룰셋 적용 및 자동 보팅 수행!!

#57 유니온 조합 우량 임대자 우대 조치!! 특별 규칙에 따른 보팅 설정 적용!!

#58 유니온 조합 자동 보팅 프로그램 테스트 결과 성공!! 보팅 현황을 확인할 수 있는 웹 페이지 추가 완료!!

#59 새로운 프로그램 공부를 시작!! 스팀몬스터 자동화를 위해 스팀몬스터 API를 분석해보자!! 그 첫시간!!

#60 스팀몬스터 사용자 정보를 출력해보고, 사용자가 가진 카드 정보를 출력해보자.

#61 조합의 자동분배 프로그램 수정 및 유니온 자동보팅 프로그램 가동 시작!! 오늘도 파이썬으로 스팀몬스터 API를 공부해 보자!!

#62 조합의 자동보팅 프로그램 업그레이드!! 오늘은 스팀몬스터 마켓의 정보를 가져오는 API를 공부해 보자!!

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

jcar토큰 9월 구독 보팅입니다.
좋은 하루 보내세요. ^^

Hi @goodhello!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 4.012 which ranks you at #3993 across all Steem accounts.
Your rank has not changed in the last three days.

In our last Algorithmic Curation Round, consisting of 103 contributions, your post is ranked at #30.

Evaluation of your UA score:
  • Some people are already following you, keep going!
  • The readers like your work!
  • Try to work on user engagement: the more people that interact with you via the comments, the higher your UA score!

Feel free to join our @steem-ua Discord server