[스팀몬스터] 파이썬으로 카드 매도 주문하기(2/2)

Words
237
Reading
2 min
Listen
Play
8y

1편에 이어서 2편 정리합니다.
1편에서는 보유하고 있는 스몬 카드를 가져오는 방법에 대하여 정리되어 있습니다.
[스팀몬스터] 파이썬으로 카드 매도 주문하기(1/2)


1편에서 만든 팔 카드 리스트를 가져오는 함수를 이용합니다.

get_card_list_need_to_sell(1, 1, 0)  #  id, edition, gold

이 함수는 아래와 같이 Goblin Shaman 카드 중 팔 수 있는 카드의 리스트를 가져옵니다. 가장 밑에 있는 카드가 팔 수 있는 상태입니다.

image.png

target cnt : 1
C1-1-60MYKGY7WG 0

카드가 복수개일 수 있으므로, 팔 카드 수만큼 한 장씩 판매를 하는 함수는 아래와 같습니다. 카드 주문을 내고 나면 주문을 내었음을 card[1]에 표시합니다.

def sell_one_card(cardid,price):
    s = '[{"cards":["'+cardid+'"],"currency":"USD","price":"'+str(price)+'","fee_pct":500}]'
    json = s
    ops = [
        operations.CustomJson(**{
            "from": user,
            "id": "sm_sell_cards",
            "json": json,
            "required_auths": [],
            "required_posting_auths": [user],
        }),
    ]
    tb = TransactionBuilder()
    tb.appendOps(ops)
    tb.appendSigner(user, "posting")
    tb.sign()
    tb.broadcast()

for card in sell_list :
     sell_one_card(card[0], 10.00)  # card[0] : 판매할 카드 ID,  팔 가격 : $10.00
     card[1] = 1  # order 하였음.

이렇게 주문을 낸 결과는 아래와 같습니다. 주문이 잘 들어갔군요.

image.png

image.png


동일한 카드를 한 번에 한 개씩만 주문하면 시간도 많이 걸리고 RC도 많이 듭니다. 그래서 여러 카드를 동시에 주문해야 효율적일 것 같습니다.

그러면 여러 카드를 동시에 주문하는 방법에 대하여 알아보겠습니다.

여러 카드를 팔기 위한 새로운 함수를 만들어 봅니다. 매도를 위한 json 코드를 팔 카드 수량만큼 만들어서 한꺼번에 매도 주문을 합니다.

# card_list에 있는 카드 중 팔 수 있는 카드를 count 수 만큼 price에 한꺼번에 매도 주문
def sell_multiple_card(card_list, count, price):
    found = 0
    json = [] 
    for card in card_list :
        if ( found < count ) :
            if ( card[1] == 0 ) : # 아직 팔지 않은 card
                one = {"cards":[card[0]],"currency":"USD","price":str(price),"fee_pct":500}
                json.append(one)
                found += 1
        else :
            break;

    ops = [
        operations.CustomJson(**{
            "from": user,
            "id": "sm_sell_cards",
            "json": json,
            "required_auths": [],
            "required_posting_auths": [user],
        }),
    ]
    tb = TransactionBuilder()
    tb.appendOps(ops)
    tb.appendSigner(user, "posting")
    tb.sign()
    tb.broadcast()

이 함수를 부르는 쪽에는 아래와 같이 작성해 주면 됩니다.

# 복수개 팔 때 (sell_list 중 3개를 $10에 팔자)
sell_multiple_card(sell_list, 3, 10.00) 

sell_multiple_card()에서 생성한 custom_json 문장과 주문결과입니다.
image.png

image.png

파이썬 코드 덕분에 좀 더 편하게 주문을 할 수 있는 토대는 마련하였습니다. 카드 종류도 많고, 가격도 틀리기 때문에 이러한 부분을 반영하는 개발을 더 해야할 듯 합니다.

[스팀몬스터] 파이썬으로 카드 매도 주문하기(2/2) | Ecency