Created script to get all tokens for a deck list
This commit is contained in:
		
							parent
							
								
									6f93d8f985
								
							
						
					
					
						commit
						1484f9f818
					
				| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
import scrython
 | 
			
		||||
import time
 | 
			
		||||
import json
 | 
			
		||||
import os.path
 | 
			
		||||
import re
 | 
			
		||||
 | 
			
		||||
# This file will parse a scryfall exported deck list and create a list of tokens
 | 
			
		||||
# needed for that deck. To run this, make sure that your deck file is in the same folder
 | 
			
		||||
# as this. You can then copy/paste the output file back into Scryfall to list all the
 | 
			
		||||
# tokens.
 | 
			
		||||
 | 
			
		||||
def get_cards():
 | 
			
		||||
  with open('scryfall-deck.txt', 'r') as f:
 | 
			
		||||
    cards_from_file = f.read().splitlines()
 | 
			
		||||
 | 
			
		||||
    list_of_cards = []
 | 
			
		||||
  for name in cards_from_file:
 | 
			
		||||
    true_name = re.findall(r'[^\d\s//].*', name)
 | 
			
		||||
    if true_name == ['Commander'] or len(true_name) == 0:
 | 
			
		||||
      continue
 | 
			
		||||
    else:
 | 
			
		||||
      true_name = true_name[0]
 | 
			
		||||
 | 
			
		||||
    list_of_cards.append(true_name)
 | 
			
		||||
 | 
			
		||||
  data = { 'data': [] }
 | 
			
		||||
 | 
			
		||||
  for i, card in enumerate(list_of_cards, start=1):
 | 
			
		||||
    print('Fetching card: {} | {} of {}'.format(card, i, len(list_of_cards)))
 | 
			
		||||
    card = scrython.cards.Named(fuzzy=card)
 | 
			
		||||
    data['data'].append(card.scryfallJson)
 | 
			
		||||
    time.sleep(0.5)
 | 
			
		||||
 | 
			
		||||
  with open('scryfall_data.json', 'w+') as f:
 | 
			
		||||
    f.write(json.dumps(data, sort_keys=True, indent=4))
 | 
			
		||||
 | 
			
		||||
def create_list():
 | 
			
		||||
  with open('scryfall_data.json', 'r') as f:
 | 
			
		||||
    data = json.load(f)
 | 
			
		||||
 | 
			
		||||
  # Parses through each card in the full json we collected from get_cards
 | 
			
		||||
  # If the card has the all_parts key, check if it's a token.
 | 
			
		||||
  # If it is, fetch that token and record it's name and set code
 | 
			
		||||
  with open('tokens_needed.txt', 'w') as f:
 | 
			
		||||
    for card in data['data']:
 | 
			
		||||
      if 'all_parts' in card:
 | 
			
		||||
        for part in card['all_parts']:
 | 
			
		||||
          if part['component'] == 'token':
 | 
			
		||||
            token = scrython.cards.Id(id=part['id'])
 | 
			
		||||
            time.sleep(0.1)
 | 
			
		||||
            f.write('{} | {}\n'.format(token.name(), token.set_code()))
 | 
			
		||||
 | 
			
		||||
if not os.path.isfile('./scryfall_data.json'):
 | 
			
		||||
  get_cards()
 | 
			
		||||
 | 
			
		||||
create_list()
 | 
			
		||||
		Loading…
	
		Reference in New Issue