48 lines
No EOL
1.8 KiB
Python
48 lines
No EOL
1.8 KiB
Python
import csv
|
|
import json
|
|
import requests
|
|
|
|
from word_count import EXPECTED_HEADER, COLUMNS, TEMP_JSON, is_actual_mtg_card
|
|
|
|
|
|
def request_cube_csv(cube_name, cube_id):
|
|
url = f'https://cubecobra.com/cube/download/csv/{cube_id}'
|
|
url += '?primary=Color%20Category&secondary=Types-Multicolor&tertiary=CMC2'
|
|
response = requests.get(url)
|
|
|
|
|
|
def load_cube_from_csv(filename, tag_filter=None):
|
|
cards = []
|
|
with open(filename) as f:
|
|
reader = csv.reader(f)
|
|
header_line = next(reader)
|
|
assert header_line == EXPECTED_HEADER
|
|
for line in reader:
|
|
card = line[COLUMNS['Name']]
|
|
# Export CSV is broken on CubeCobra because Image Back URL is always just one double quotes character.
|
|
tags = [t.strip() for t in line[COLUMNS['Tags']].split(', ')]
|
|
if tag_filter is None or any(t in tag_filter for t in tags):
|
|
cards.append(card)
|
|
return cards
|
|
|
|
|
|
def create_cube_json(cards, output_filename=TEMP_JSON):
|
|
# Call this once to create a smaller JSON file from the full card list
|
|
# Visit https://scryfall.com/docs/api/bulk-data and look for "Oracle Cards" file;
|
|
# Download and rename it to 'oracle_cards.json'
|
|
with open('oracle_cards.json', encoding='utf8') as f_oracle_cards:
|
|
d = json.load(f_oracle_cards)
|
|
f_cube_json = open(output_filename, 'w+', encoding='utf8')
|
|
cube_data = []
|
|
for card in d:
|
|
if card['name'] in cards:
|
|
for i in range(cards.count(card['name'])):
|
|
cube_data += [card]
|
|
elif 'card_faces' in card.keys() and is_actual_mtg_card(card):
|
|
for face in card['card_faces']:
|
|
if face['name'] in cards:
|
|
cube_data += [card]
|
|
string_data = json.dumps(cube_data)
|
|
f_cube_json.write(string_data)
|
|
f_cube_json.close()
|
|
return output_filename |