def get_stored_card_data(database, user, logger, prod_mode): with psycopg2.connect(database=database, user=user) as conn: conn.autocommit = True with conn.cursor() as cursor: for set_name, set_info in si.get_set_data(logger).items(): cards = ssu.json_from_url(set_info['search_uri']) has_cards = True while has_cards: for card_data in cards['data']: parse_and_store(card_data, cursor, logger, prod_mode) # might have multiple pages if cards['has_more']: cards = ssu.json_from_url(set_info['search_uri']) else: has_cards = False
def get_card_printings(set_search_url: str) -> Set[Tuple[str, str]]: """Given the url listing the data for every set an associated card has been printed in, returns a list of each set the card was printed in - with its rarity at that printing. :param set_search_url: url to retrieve card set data from :return: list of sets the card associated with url has been printed in""" json_response = ssu.json_from_url(set_search_url) set_data = json_response['data'] return set([(card['set'], card['rarity']) for card in set_data])
def get_card_data(card_name, logger): """Retrieves the data around a given card from the Scryfall API and returns it as a dictionary. :param card_name: (String) name of card to retrieve data for :return: dictionary of data associated with given card""" logger.info(msg=f'Retrieving data for card {card_name}') formatted_card_name = map(lambda x: x.lower(), card_name.split(' ')) card_request_url = SCRYFALL_ENDPOINT + '?exact=' + '+'.join( formatted_card_name) return ssu.json_from_url(card_request_url)
def get_card_printings(set_search_url): """Given the url listing the data for every set an associated card has been printed in, returns a list of each set the card was printed in. :param set_search_url: url to retrieve card set data from :return: list of sets card associated with url has been printed in """ json_response = ssu.json_from_url(set_search_url) set_data = json_response['data'] return set([card['set'] for card in set_data])
def get_set_data(logger): logger.info('Retrieving all set info from Scryfall') json_data = ssu.json_from_url(SCRYFALL_SET_URL) data = json_data['data'] printing_info = {} for printing in data: set_name = printing['code'] printing_info[set_name] = printing return printing_info
def get_set_data(logger): logger.info('Retrieving all set info from Scryfall') json_data = ssu.json_from_url(SCRYFALL_SET_URL) return {printing['code']: printing for printing in json_data['data']}