-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathscryfall.py
77 lines (60 loc) · 2.35 KB
/
scryfall.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# -*- coding: utf-8 -*-
"""Scryfall to python-mtga Card"""
import requests
import argparse
import json
SCRYFALL_CARDS_API = "https://api.scryfall.com/cards"
SCRYFALL_SETS_API = "https://api.scryfall.com/sets"
SCRYFALL_SET_CONVERSION = {
'G18' : 'M19'
}
def normalize_set(set_id):
return SCRYFALL_SET_CONVERSION.get(set_id, set_id)
class ScryfallError(ValueError):
pass
def get_mtga_card(arena_id):
scryfall_card = get_arena_card_json(arena_id)
return scryfall_to_mtga(scryfall_card)
def get_arena_card_json(arena_id):
"""Get card from Scryfall by arena id"""
response = requests.get(SCRYFALL_CARDS_API+'/arena/'+str(arena_id))
if response.status_code != requests.codes.ok:
raise ScryfallError('Unknown card id %s. Status code: %s' % (arena_id, response.status_code))
return response.json()
def scryfall_to_mtga(scryfall_card):
from mtga.models.card import Card
name = scryfall_card['name'].lower().replace(' ', '_')
pretty_name = scryfall_card['name']
cost = list(scryfall_card['mana_cost'].replace('}', '').replace('{', ''))
color_identity = scryfall_card['color_identity']
types = scryfall_card['type_line'].split(u' — ')
card_type = types[0]
try:
sub_types = types[1]
except IndexError:
sub_types = ""
set_id = normalize_set(scryfall_card['set'].upper())
rarity = scryfall_card['rarity']
set_number = scryfall_card['collector_number']
mtga_id = scryfall_card['arena_id']
collectible = scryfall_card['collector_number'] != ""
abilities = {}
mtga_card = Card(
name, pretty_name, cost, color_identity,
card_type, sub_types, abilities, set_id, rarity, collectible, set_number, mtga_id
)
return mtga_card
def get_set_info(set_name):
"""gets info on requested set"""
response = requests.get(SCRYFALL_SETS_API+'/'+str(set_name))
if response.status_code == requests.codes.not_found:
print('Unknown set: %s. Reason: %s %s' % (set_name, response.status_code, response.reason))
return {}
if response.status_code != requests.codes.ok:
raise ScryfallError('Unknown set: %s. Status code: %s' % (set, response.status_code))
return response.json()
if __name__ == "__main__":
x = get_arena_card_json(68369)
print(scryfall_to_mtga(x))
y = get_arena_card_json(67542)
print(scryfall_to_mtga(y))