You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

update_cards.py 2.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. from urllib.request import Request, urlopen
  2. import json
  3. def save(name, data):
  4. with open(name, 'w', encoding = 'utf8') as file:
  5. json.dump(data, file, ensure_ascii = False, indent = 4, sort_keys = True)
  6. def download():
  7. cards = list()
  8. page = 1
  9. nonEmpty = True
  10. while nonEmpty:
  11. request_url = 'https://api.magicthegathering.io/v1/cards?page={}'.format(page)
  12. print('Loading page {}...'.format(page))
  13. try:
  14. req = Request(request_url, headers={'User-Agent': 'Mozilla/5.0'})
  15. response = json.loads(urlopen(req).read().decode("utf-8"))
  16. cardsPage = response['cards']
  17. nonEmpty = bool(cardsPage)
  18. if nonEmpty:
  19. cards.extend(cardsPage)
  20. page += 1
  21. except HTTPError:
  22. print ('Failed at page {}'.format(page))
  23. return cards
  24. # Can load or download and save card info
  25. # Load
  26. #with open('data/cards.json') as file:
  27. # cards = json.load(file)
  28. # Download and save for the future
  29. cards = download()
  30. save('data/cards.json', cards)
  31. languages = ['Russian']
  32. ignore = [
  33. {'language': 'Russian', 'name': 'Plunder'},
  34. {'language': 'Russian', 'name': 'Goblin Spelunkers'},
  35. {'language': 'Russian', 'name': 'Raise Dead'},
  36. ]
  37. copy = ['name', 'flavor', 'power', 'toughness', 'colors', 'printings', 'legality', 'manaCost', 'subtypes', 'text', 'layout', 'colorIdentity', 'type', 'types', 'cmc', 'loyalty', 'rulings']
  38. names = {}
  39. oracle = {}
  40. for card in cards:
  41. if card['name'] in names:
  42. if not card['name'] in names[card['name']]:
  43. names[card['name']].append(card['name'])
  44. else:
  45. names[card['name']] = [card['name']]
  46. if 'foreignNames' in card:
  47. for translation in card['foreignNames']:
  48. if translation['name'] and translation['language'] in languages and not {'language': translation['language'], 'name': card['name']} in ignore:
  49. if translation['name'] in names:
  50. if not card['name'] in names[translation['name']]:
  51. print('{} version of "{}": "{}" is named as another card "{}"'.format(translation['language'], card['name'], translation['name'], names[translation['name']]))
  52. names[translation['name']].append(card['name'])
  53. else:
  54. names[translation['name']] = [card['name']]
  55. if not card['name'] in oracle:
  56. oracle[card['name']] = {k: card[k] for k in card if k in copy}
  57. save('data/names.json', names)
  58. save('data/oracle.json', oracle)