From 7e35da05c2d3f285c07876c14c8b380dd8da2803 Mon Sep 17 00:00:00 2001 From: Nanda Scott Date: Wed, 10 Jan 2018 22:04:03 -0500 Subject: [PATCH] Added a whole bunch of shit. Also added error handling in creation. --- cards/autocomplete.py | 4 + cards/collector.py | 216 ++++++++++++++++++++++++++++++++++++++++++ cards/id.py | 214 +++++++++++++++++++++++++++++++++++++++++ cards/mtgo.py | 214 +++++++++++++++++++++++++++++++++++++++++ cards/multiverse.py | 214 +++++++++++++++++++++++++++++++++++++++++ cards/named.py | 19 +++- cards/randomcard.py | 212 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 1092 insertions(+), 1 deletion(-) create mode 100644 cards/collector.py create mode 100644 cards/id.py create mode 100644 cards/mtgo.py create mode 100644 cards/multiverse.py create mode 100644 cards/randomcard.py diff --git a/cards/autocomplete.py b/cards/autocomplete.py index 18346d1..0e705ec 100644 --- a/cards/autocomplete.py +++ b/cards/autocomplete.py @@ -30,6 +30,10 @@ class Autocomplete(object): url='https://api.scryfall.com/cards/autocomplete?', params={'q':self.query, 'pretty':self.pretty, 'format':self.format})) + if self.scryfallJson['object'] == 'error': + raise Exception(self.scryfallJson['details']) + self.session.close() + self.session.close() def object(self): diff --git a/cards/collector.py b/cards/collector.py new file mode 100644 index 0000000..b51cef3 --- /dev/null +++ b/cards/collector.py @@ -0,0 +1,216 @@ +import asyncio, aiohttp +import json + +class Collector(object): + """ cards/named + + Parameters: + code: int The 3 or 4 letter set code. + collector_number: int The collector number of the card. + format: str The data format to return: json, text, or image. Defaults to json. + face: str If using the image format and this parameter has the value back, + the back face of the card will be returned. + Will return a 404 if this card has no back face. + version: str The image version to return when using the image + format: small, normal, large, png, art_crop, or border_crop. Defaults to large. + pretty: bool If true, the returned JSON will be prettified. Avoid using for production code. + + Attributes: + object: str Returns the type of object it is. (card, error, etc) + id: str The scryfall id of the card. + multiverse_ids: arr The associated multiverse ids of the card. + mtgo_id: int The Magic Online id of the card. + mtgo_foil_id: int The Magic Online foil id of the card. + name: str The full name of the card. Cards with multiple faces are named with '//' as a seperator. + uri: str The Scryfall API uri for the card. + scryfall_uri: str The full Scryfall page of the card. + layout: str The image layout of the card. (normal, transform, etc) + highres_image: bool Returns True if the card has a high res image. + card.image_uris: dict All image uris of the card in various qualities. + cmc: float A float of the converted mana cost of the card. + type_line: str The full type line of the card. + oracle_text: str The official oracle text of a card. + mana_cost: str The full mana cost using shorthanded mana symbols. + colors: arr An array of strings with all colors found in the mana cost. + color_identity: arr An array of strings with all colors found in on the card itself. + legalities: dict A dictionary of all formats and their legality. + reserved: bool Returns True if the card is on the reserved list. + reprint: bool Returns True if the card has been reprinted before. + set: str The 3 letter code for the set of the card. + set_name: str The full name for the set of the card. + set_uri: str The API uri for the full set list of the card. + set_search_uri: str Same output as set_uri. + scryfall_set_uri: str The full link to the set on Scryfall. + rulings_uri: str The API uri for the rulings of the card. + prints_search_uri: str TODO: Figure out what this does. + collector_number: str The collector number of the card. + digital: bool Returns True if the card is the digital version. + rarity: str The rarity of the card. + illustration_id: str The related id of the card art. + artist: str The artist of the card. + frame: str The year of the card frame. + full_art: bool Returns True if the card is considered full art. + border_color: str The color of the card border. + timeshifted: bool Returns True if the card is timeshifted. + colorshifted: bool Returns True if the card is colorshifted. + futureshifted: bool Returns True if the card is futureshifted. + edhrec_rank: int The rank of the card on edhrec.com + tix: int The MTGO price of the card + related_uris: dict A dictionary of related websites for this card. + purchase_uris: dict A dictionary of links to purchase the card. + """ + + def __init__(self, code, collector_number, _format=None, face=None, version=None, pretty=None): + self.code = code + self.collector_number = collector_number + self.format = _format + self.face = face + self.version = version + self.pretty = pretty + loop = asyncio.get_event_loop() + self.session = aiohttp.ClientSession(loop=loop) + + async def getRequest(url, **kwargs): + async with self.session.get(url, **kwargs) as response: + return await response.json() + + self.scryfallJson = loop.run_until_complete(getRequest( + url='https://api.scryfall.com/cards/{}/{}'.format(self.code, self.collector_number), + params={ + 'format':self.format, + 'face':self.face, + 'version':self.version, + 'pretty':self.pretty + })) + + if self.scryfallJson['object'] == 'error': + raise Exception(self.scryfallJson['details']) + self.session.close() + + self.session.close() + + def object(self): + return self.scryfallJson['object'] + + def id(self): + return self.scryfallJson['id'] + + def multiverse_ids(self): + return self.scryfallJson['multiverse_ids'] + + def mtgo_id(self): + return self.scryfallJson['mtgo_id'] + + def mtgo_foil_id(self): + return self.scryfallJson['mtgo_foil_id'] + + def name(self): + return self.scryfallJson['name'] + + def uri(self): + return self.scryfallJson['uri'] + + def scryfall_uri(self): + return self.scryfallJson['scryfall_uri'] + + def layout(self): + return self.scryfallJson['layout'] + + def highres_image(self): + return self.scryfallJson['highres_image'] + + def image_uris(self): + return self.scryfallJson['image_uris'] + + def cmc(self): + return self.scryfallJson['cmc'] + + def type_line(self): + return self.scryfallJson['type_line'] + + def oracle_text(self): + return self.scryfallJson['oracle_text'] + + def mana_cost(self): + return self.scryfallJson['mana_cost'] + + def colors(self): + return self.scryfallJson['colors'] + + def color_identity(self): + return self.scryfallJson['color_identity'] + + def legalities(self): + return self.scryfallJson['legalities'] + + def reserved(self): + return self.scryfallJson['reserved'] + + def reprint(self): + return self.scryfallJson['reprint'] + + def set(self): + return self.scryfallJson['set'] + + def set_name(self): + return self.scryfallJson['set_name'] + + def set_uri(self): + return self.scryfallJson['set_uri'] + + def set_search_uri(self): + return self.scryfallJson['set_search_uri'] + + def scryfall_set_uri(self): + return self.scryfallJson['scryfall_set_uri'] + + def rulings_uri(self): + return self.scryfallJson['rulings_uri'] + + def prints_search_uri(self): + return self.scryfallJson['prints_search_uri'] + + def collector_number(self): + return self.scryfallJson['collector_number'] + + def digital(self): + return self.scryfallJson['digital'] + + def rarity(self): + return self.scryfallJson['rarity'] + + def illustration_id(self): + return self.scryfallJson['illustration_id'] + + def artist(self): + return self.scryfallJson['artist'] + + def frame(self): + return self.scryfallJson['frame'] + + def full_art(self): + return self.scryfallJson['full_art'] + + def border_color(self): + return self.scryfallJson['border_color'] + + def timeshifted(self): + return self.scryfallJson['timeshifted'] + + def colorshifted(self): + return self.scryfallJson['colorshifted'] + + def futureshifted(self): + return self.scryfallJson['futureshifted'] + + def edhrec_rank(self): + return self.scryfallJson['edhrec_rank'] + + def tix(self): + return self.scryfallJson['tix'] + + def related_uris(self): + return self.scryfallJson['related_uris'] + + def purchase_uris(self): + return self.scryfallJson['purchase_uris'] diff --git a/cards/id.py b/cards/id.py new file mode 100644 index 0000000..18b7b69 --- /dev/null +++ b/cards/id.py @@ -0,0 +1,214 @@ +import asyncio, aiohttp +import json + +class Id(object): + """ cards/named + + Parameters: + id: str The Scryfall id of the card. + format: str The data format to return: json, text, or image. Defaults to json. + face: str If using the image format and this parameter has the value back, + the back face of the card will be returned. + Will return a 404 if this card has no back face. + version: str The image version to return when using the image + format: small, normal, large, png, art_crop, or border_crop. Defaults to large. + pretty: bool If true, the returned JSON will be prettified. Avoid using for production code. + + Attributes: + object: str Returns the type of object it is. (card, error, etc) + id: str The scryfall id of the card. + multiverse_ids: arr The associated multiverse ids of the card. + mtgo_id: int The Magic Online id of the card. + mtgo_foil_id: int The Magic Online foil id of the card. + name: str The full name of the card. Cards with multiple faces are named with '//' as a seperator. + uri: str The Scryfall API uri for the card. + scryfall_uri: str The full Scryfall page of the card. + layout: str The image layout of the card. (normal, transform, etc) + highres_image: bool Returns True if the card has a high res image. + card.image_uris: dict All image uris of the card in various qualities. + cmc: float A float of the converted mana cost of the card. + type_line: str The full type line of the card. + oracle_text: str The official oracle text of a card. + mana_cost: str The full mana cost using shorthanded mana symbols. + colors: arr An array of strings with all colors found in the mana cost. + color_identity: arr An array of strings with all colors found in on the card itself. + legalities: dict A dictionary of all formats and their legality. + reserved: bool Returns True if the card is on the reserved list. + reprint: bool Returns True if the card has been reprinted before. + set: str The 3 letter code for the set of the card. + set_name: str The full name for the set of the card. + set_uri: str The API uri for the full set list of the card. + set_search_uri: str Same output as set_uri. + scryfall_set_uri: str The full link to the set on Scryfall. + rulings_uri: str The API uri for the rulings of the card. + prints_search_uri: str TODO: Figure out what this does. + collector_number: str The collector number of the card. + digital: bool Returns True if the card is the digital version. + rarity: str The rarity of the card. + illustration_id: str The related id of the card art. + artist: str The artist of the card. + frame: str The year of the card frame. + full_art: bool Returns True if the card is considered full art. + border_color: str The color of the card border. + timeshifted: bool Returns True if the card is timeshifted. + colorshifted: bool Returns True if the card is colorshifted. + futureshifted: bool Returns True if the card is futureshifted. + edhrec_rank: int The rank of the card on edhrec.com + tix: int The MTGO price of the card + related_uris: dict A dictionary of related websites for this card. + purchase_uris: dict A dictionary of links to purchase the card. + """ + + def __init__(self, _id, _format=None, face=None, version=None, pretty=None): + self.id = _id + self.format = _format + self.face = face + self.version = version + self.pretty = pretty + loop = asyncio.get_event_loop() + self.session = aiohttp.ClientSession(loop=loop) + + async def getRequest(url, **kwargs): + async with self.session.get(url, **kwargs) as response: + return await response.json() + + self.scryfallJson = loop.run_until_complete(getRequest( + url='https://api.scryfall.com/cards/{}'.format(self.id), + params={ + 'format':self.format, + 'face':self.face, + 'version':self.version, + 'pretty':self.pretty + })) + + if self.scryfallJson['object'] == 'error': + raise Exception(self.scryfallJson['details']) + self.session.close() + + self.session.close() + + def object(self): + return self.scryfallJson['object'] + + def id(self): + return self.scryfallJson['id'] + + def multiverse_ids(self): + return self.scryfallJson['multiverse_ids'] + + def mtgo_id(self): + return self.scryfallJson['mtgo_id'] + + def mtgo_foil_id(self): + return self.scryfallJson['mtgo_foil_id'] + + def name(self): + return self.scryfallJson['name'] + + def uri(self): + return self.scryfallJson['uri'] + + def scryfall_uri(self): + return self.scryfallJson['scryfall_uri'] + + def layout(self): + return self.scryfallJson['layout'] + + def highres_image(self): + return self.scryfallJson['highres_image'] + + def image_uris(self): + return self.scryfallJson['image_uris'] + + def cmc(self): + return self.scryfallJson['cmc'] + + def type_line(self): + return self.scryfallJson['type_line'] + + def oracle_text(self): + return self.scryfallJson['oracle_text'] + + def mana_cost(self): + return self.scryfallJson['mana_cost'] + + def colors(self): + return self.scryfallJson['colors'] + + def color_identity(self): + return self.scryfallJson['color_identity'] + + def legalities(self): + return self.scryfallJson['legalities'] + + def reserved(self): + return self.scryfallJson['reserved'] + + def reprint(self): + return self.scryfallJson['reprint'] + + def set(self): + return self.scryfallJson['set'] + + def set_name(self): + return self.scryfallJson['set_name'] + + def set_uri(self): + return self.scryfallJson['set_uri'] + + def set_search_uri(self): + return self.scryfallJson['set_search_uri'] + + def scryfall_set_uri(self): + return self.scryfallJson['scryfall_set_uri'] + + def rulings_uri(self): + return self.scryfallJson['rulings_uri'] + + def prints_search_uri(self): + return self.scryfallJson['prints_search_uri'] + + def collector_number(self): + return self.scryfallJson['collector_number'] + + def digital(self): + return self.scryfallJson['digital'] + + def rarity(self): + return self.scryfallJson['rarity'] + + def illustration_id(self): + return self.scryfallJson['illustration_id'] + + def artist(self): + return self.scryfallJson['artist'] + + def frame(self): + return self.scryfallJson['frame'] + + def full_art(self): + return self.scryfallJson['full_art'] + + def border_color(self): + return self.scryfallJson['border_color'] + + def timeshifted(self): + return self.scryfallJson['timeshifted'] + + def colorshifted(self): + return self.scryfallJson['colorshifted'] + + def futureshifted(self): + return self.scryfallJson['futureshifted'] + + def edhrec_rank(self): + return self.scryfallJson['edhrec_rank'] + + def tix(self): + return self.scryfallJson['tix'] + + def related_uris(self): + return self.scryfallJson['related_uris'] + + def purchase_uris(self): + return self.scryfallJson['purchase_uris'] diff --git a/cards/mtgo.py b/cards/mtgo.py new file mode 100644 index 0000000..e41789f --- /dev/null +++ b/cards/mtgo.py @@ -0,0 +1,214 @@ +import asyncio, aiohttp +import json + +class Mtgo(object): + """ cards/named + + Parameters: + id: int The multiverse id of the card. + format: str The data format to return: json, text, or image. Defaults to json. + face: str If using the image format and this parameter has the value back, + the back face of the card will be returned. + Will return a 404 if this card has no back face. + version: str The image version to return when using the image + format: small, normal, large, png, art_crop, or border_crop. Defaults to large. + pretty: bool If true, the returned JSON will be prettified. Avoid using for production code. + + Attributes: + object: str Returns the type of object it is. (card, error, etc) + id: str The scryfall id of the card. + multiverse_ids: arr The associated multiverse ids of the card. + mtgo_id: int The Magic Online id of the card. + mtgo_foil_id: int The Magic Online foil id of the card. + name: str The full name of the card. Cards with multiple faces are named with '//' as a seperator. + uri: str The Scryfall API uri for the card. + scryfall_uri: str The full Scryfall page of the card. + layout: str The image layout of the card. (normal, transform, etc) + highres_image: bool Returns True if the card has a high res image. + card.image_uris: dict All image uris of the card in various qualities. + cmc: float A float of the converted mana cost of the card. + type_line: str The full type line of the card. + oracle_text: str The official oracle text of a card. + mana_cost: str The full mana cost using shorthanded mana symbols. + colors: arr An array of strings with all colors found in the mana cost. + color_identity: arr An array of strings with all colors found in on the card itself. + legalities: dict A dictionary of all formats and their legality. + reserved: bool Returns True if the card is on the reserved list. + reprint: bool Returns True if the card has been reprinted before. + set: str The 3 letter code for the set of the card. + set_name: str The full name for the set of the card. + set_uri: str The API uri for the full set list of the card. + set_search_uri: str Same output as set_uri. + scryfall_set_uri: str The full link to the set on Scryfall. + rulings_uri: str The API uri for the rulings of the card. + prints_search_uri: str TODO: Figure out what this does. + collector_number: str The collector number of the card. + digital: bool Returns True if the card is the digital version. + rarity: str The rarity of the card. + illustration_id: str The related id of the card art. + artist: str The artist of the card. + frame: str The year of the card frame. + full_art: bool Returns True if the card is considered full art. + border_color: str The color of the card border. + timeshifted: bool Returns True if the card is timeshifted. + colorshifted: bool Returns True if the card is colorshifted. + futureshifted: bool Returns True if the card is futureshifted. + edhrec_rank: int The rank of the card on edhrec.com + tix: int The MTGO price of the card + related_uris: dict A dictionary of related websites for this card. + purchase_uris: dict A dictionary of links to purchase the card. + """ + + def __init__(self, _id, _format=None, face=None, version=None, pretty=None): + self.mtgoid = _id + self.format = _format + self.face = face + self.version = version + self.pretty = pretty + loop = asyncio.get_event_loop() + self.session = aiohttp.ClientSession(loop=loop) + + async def getRequest(url, **kwargs): + async with self.session.get(url, **kwargs) as response: + return await response.json() + + self.scryfallJson = loop.run_until_complete(getRequest( + url='https://api.scryfall.com/cards/mtgo/{}'.format(self.mtgoid), + params={ + 'format':self.format, + 'face':self.face, + 'version':self.version, + 'pretty':self.pretty + })) + + if self.scryfallJson['object'] == 'error': + raise Exception(self.scryfallJson['details']) + self.session.close() + + self.session.close() + + def object(self): + return self.scryfallJson['object'] + + def id(self): + return self.scryfallJson['id'] + + def multiverse_ids(self): + return self.scryfallJson['multiverse_ids'] + + def mtgo_id(self): + return self.scryfallJson['mtgo_id'] + + def mtgo_foil_id(self): + return self.scryfallJson['mtgo_foil_id'] + + def name(self): + return self.scryfallJson['name'] + + def uri(self): + return self.scryfallJson['uri'] + + def scryfall_uri(self): + return self.scryfallJson['scryfall_uri'] + + def layout(self): + return self.scryfallJson['layout'] + + def highres_image(self): + return self.scryfallJson['highres_image'] + + def image_uris(self): + return self.scryfallJson['image_uris'] + + def cmc(self): + return self.scryfallJson['cmc'] + + def type_line(self): + return self.scryfallJson['type_line'] + + def oracle_text(self): + return self.scryfallJson['oracle_text'] + + def mana_cost(self): + return self.scryfallJson['mana_cost'] + + def colors(self): + return self.scryfallJson['colors'] + + def color_identity(self): + return self.scryfallJson['color_identity'] + + def legalities(self): + return self.scryfallJson['legalities'] + + def reserved(self): + return self.scryfallJson['reserved'] + + def reprint(self): + return self.scryfallJson['reprint'] + + def set(self): + return self.scryfallJson['set'] + + def set_name(self): + return self.scryfallJson['set_name'] + + def set_uri(self): + return self.scryfallJson['set_uri'] + + def set_search_uri(self): + return self.scryfallJson['set_search_uri'] + + def scryfall_set_uri(self): + return self.scryfallJson['scryfall_set_uri'] + + def rulings_uri(self): + return self.scryfallJson['rulings_uri'] + + def prints_search_uri(self): + return self.scryfallJson['prints_search_uri'] + + def collector_number(self): + return self.scryfallJson['collector_number'] + + def digital(self): + return self.scryfallJson['digital'] + + def rarity(self): + return self.scryfallJson['rarity'] + + def illustration_id(self): + return self.scryfallJson['illustration_id'] + + def artist(self): + return self.scryfallJson['artist'] + + def frame(self): + return self.scryfallJson['frame'] + + def full_art(self): + return self.scryfallJson['full_art'] + + def border_color(self): + return self.scryfallJson['border_color'] + + def timeshifted(self): + return self.scryfallJson['timeshifted'] + + def colorshifted(self): + return self.scryfallJson['colorshifted'] + + def futureshifted(self): + return self.scryfallJson['futureshifted'] + + def edhrec_rank(self): + return self.scryfallJson['edhrec_rank'] + + def tix(self): + return self.scryfallJson['tix'] + + def related_uris(self): + return self.scryfallJson['related_uris'] + + def purchase_uris(self): + return self.scryfallJson['purchase_uris'] diff --git a/cards/multiverse.py b/cards/multiverse.py new file mode 100644 index 0000000..7c91588 --- /dev/null +++ b/cards/multiverse.py @@ -0,0 +1,214 @@ +import asyncio, aiohttp +import json + +class Multiverse(object): + """ cards/named + + Parameters: + id: int The multiverse id of the card. + format: str The data format to return: json, text, or image. Defaults to json. + face: str If using the image format and this parameter has the value back, + the back face of the card will be returned. + Will return a 404 if this card has no back face. + version: str The image version to return when using the image + format: small, normal, large, png, art_crop, or border_crop. Defaults to large. + pretty: bool If true, the returned JSON will be prettified. Avoid using for production code. + + Attributes: + object: str Returns the type of object it is. (card, error, etc) + id: str The scryfall id of the card. + multiverse_ids: arr The associated multiverse ids of the card. + mtgo_id: int The Magic Online id of the card. + mtgo_foil_id: int The Magic Online foil id of the card. + name: str The full name of the card. Cards with multiple faces are named with '//' as a seperator. + uri: str The Scryfall API uri for the card. + scryfall_uri: str The full Scryfall page of the card. + layout: str The image layout of the card. (normal, transform, etc) + highres_image: bool Returns True if the card has a high res image. + card.image_uris: dict All image uris of the card in various qualities. + cmc: float A float of the converted mana cost of the card. + type_line: str The full type line of the card. + oracle_text: str The official oracle text of a card. + mana_cost: str The full mana cost using shorthanded mana symbols. + colors: arr An array of strings with all colors found in the mana cost. + color_identity: arr An array of strings with all colors found in on the card itself. + legalities: dict A dictionary of all formats and their legality. + reserved: bool Returns True if the card is on the reserved list. + reprint: bool Returns True if the card has been reprinted before. + set: str The 3 letter code for the set of the card. + set_name: str The full name for the set of the card. + set_uri: str The API uri for the full set list of the card. + set_search_uri: str Same output as set_uri. + scryfall_set_uri: str The full link to the set on Scryfall. + rulings_uri: str The API uri for the rulings of the card. + prints_search_uri: str TODO: Figure out what this does. + collector_number: str The collector number of the card. + digital: bool Returns True if the card is the digital version. + rarity: str The rarity of the card. + illustration_id: str The related id of the card art. + artist: str The artist of the card. + frame: str The year of the card frame. + full_art: bool Returns True if the card is considered full art. + border_color: str The color of the card border. + timeshifted: bool Returns True if the card is timeshifted. + colorshifted: bool Returns True if the card is colorshifted. + futureshifted: bool Returns True if the card is futureshifted. + edhrec_rank: int The rank of the card on edhrec.com + tix: int The MTGO price of the card + related_uris: dict A dictionary of related websites for this card. + purchase_uris: dict A dictionary of links to purchase the card. + """ + + def __init__(self, _id, _format=None, face=None, version=None, pretty=None): + self.multiverseid = _id + self.format = _format + self.face = face + self.version = version + self.pretty = pretty + loop = asyncio.get_event_loop() + self.session = aiohttp.ClientSession(loop=loop) + + async def getRequest(url, **kwargs): + async with self.session.get(url, **kwargs) as response: + return await response.json() + + self.scryfallJson = loop.run_until_complete(getRequest( + url='https://api.scryfall.com/cards/multiverse/{}'.format(self.multiverseid), + params={ + 'format':self.format, + 'face':self.face, + 'version':self.version, + 'pretty':self.pretty + })) + + if self.scryfallJson['object'] == 'error': + raise Exception(self.scryfallJson['details']) + self.session.close() + + self.session.close() + + def object(self): + return self.scryfallJson['object'] + + def id(self): + return self.scryfallJson['id'] + + def multiverse_ids(self): + return self.scryfallJson['multiverse_ids'] + + def mtgo_id(self): + return self.scryfallJson['mtgo_id'] + + def mtgo_foil_id(self): + return self.scryfallJson['mtgo_foil_id'] + + def name(self): + return self.scryfallJson['name'] + + def uri(self): + return self.scryfallJson['uri'] + + def scryfall_uri(self): + return self.scryfallJson['scryfall_uri'] + + def layout(self): + return self.scryfallJson['layout'] + + def highres_image(self): + return self.scryfallJson['highres_image'] + + def image_uris(self): + return self.scryfallJson['image_uris'] + + def cmc(self): + return self.scryfallJson['cmc'] + + def type_line(self): + return self.scryfallJson['type_line'] + + def oracle_text(self): + return self.scryfallJson['oracle_text'] + + def mana_cost(self): + return self.scryfallJson['mana_cost'] + + def colors(self): + return self.scryfallJson['colors'] + + def color_identity(self): + return self.scryfallJson['color_identity'] + + def legalities(self): + return self.scryfallJson['legalities'] + + def reserved(self): + return self.scryfallJson['reserved'] + + def reprint(self): + return self.scryfallJson['reprint'] + + def set(self): + return self.scryfallJson['set'] + + def set_name(self): + return self.scryfallJson['set_name'] + + def set_uri(self): + return self.scryfallJson['set_uri'] + + def set_search_uri(self): + return self.scryfallJson['set_search_uri'] + + def scryfall_set_uri(self): + return self.scryfallJson['scryfall_set_uri'] + + def rulings_uri(self): + return self.scryfallJson['rulings_uri'] + + def prints_search_uri(self): + return self.scryfallJson['prints_search_uri'] + + def collector_number(self): + return self.scryfallJson['collector_number'] + + def digital(self): + return self.scryfallJson['digital'] + + def rarity(self): + return self.scryfallJson['rarity'] + + def illustration_id(self): + return self.scryfallJson['illustration_id'] + + def artist(self): + return self.scryfallJson['artist'] + + def frame(self): + return self.scryfallJson['frame'] + + def full_art(self): + return self.scryfallJson['full_art'] + + def border_color(self): + return self.scryfallJson['border_color'] + + def timeshifted(self): + return self.scryfallJson['timeshifted'] + + def colorshifted(self): + return self.scryfallJson['colorshifted'] + + def futureshifted(self): + return self.scryfallJson['futureshifted'] + + def edhrec_rank(self): + return self.scryfallJson['edhrec_rank'] + + def tix(self): + return self.scryfallJson['tix'] + + def related_uris(self): + return self.scryfallJson['related_uris'] + + def purchase_uris(self): + return self.scryfallJson['purchase_uris'] diff --git a/cards/named.py b/cards/named.py index 2bb7e31..5d088b6 100644 --- a/cards/named.py +++ b/cards/named.py @@ -45,7 +45,20 @@ class Named(object): rulings_uri: str The API uri for the rulings of the card. prints_search_uri: str TODO: Figure out what this does. collector_number: str The collector number of the card. - + digital: bool Returns True if the card is the digital version. + rarity: str The rarity of the card. + illustration_id: str The related id of the card art. + artist: str The artist of the card. + frame: str The year of the card frame. + full_art: bool Returns True if the card is considered full art. + border_color: str The color of the card border. + timeshifted: bool Returns True if the card is timeshifted. + colorshifted: bool Returns True if the card is colorshifted. + futureshifted: bool Returns True if the card is futureshifted. + edhrec_rank: int The rank of the card on edhrec.com + tix: int The MTGO price of the card + related_uris: dict A dictionary of related websites for this card. + purchase_uris: dict A dictionary of links to purchase the card. """ def __init__(self, exact=None, fuzzy=None, _set=None, _format=None, face=None, version=None, pretty=None): @@ -75,6 +88,10 @@ class Named(object): 'pretty':self.pretty })) + if self.scryfallJson['object'] == 'error': + self.session.close() + raise Exception(self.scryfallJson['details']) + self.session.close() def object(self): diff --git a/cards/randomcard.py b/cards/randomcard.py new file mode 100644 index 0000000..5ebc23e --- /dev/null +++ b/cards/randomcard.py @@ -0,0 +1,212 @@ +import asyncio, aiohttp +import json + +class RandomCard(object): + """ cards/named + + Parameters: + format: str The data format to return: json, text, or image. Defaults to json. + face: str If using the image format and this parameter has the value back, + the back face of the card will be returned. + Will return a 404 if this card has no back face. + version: str The image version to return when using the image + format: small, normal, large, png, art_crop, or border_crop. Defaults to large. + pretty: bool If true, the returned JSON will be prettified. Avoid using for production code. + + Attributes: + object: str Returns the type of object it is. (card, error, etc) + id: str The scryfall id of the card. + multiverse_ids: arr The associated multiverse ids of the card. + mtgo_id: int The Magic Online id of the card. + mtgo_foil_id: int The Magic Online foil id of the card. + name: str The full name of the card. Cards with multiple faces are named with '//' as a seperator. + uri: str The Scryfall API uri for the card. + scryfall_uri: str The full Scryfall page of the card. + layout: str The image layout of the card. (normal, transform, etc) + highres_image: bool Returns True if the card has a high res image. + card.image_uris: dict All image uris of the card in various qualities. + cmc: float A float of the converted mana cost of the card. + type_line: str The full type line of the card. + oracle_text: str The official oracle text of a card. + mana_cost: str The full mana cost using shorthanded mana symbols. + colors: arr An array of strings with all colors found in the mana cost. + color_identity: arr An array of strings with all colors found in on the card itself. + legalities: dict A dictionary of all formats and their legality. + reserved: bool Returns True if the card is on the reserved list. + reprint: bool Returns True if the card has been reprinted before. + set: str The 3 letter code for the set of the card. + set_name: str The full name for the set of the card. + set_uri: str The API uri for the full set list of the card. + set_search_uri: str Same output as set_uri. + scryfall_set_uri: str The full link to the set on Scryfall. + rulings_uri: str The API uri for the rulings of the card. + prints_search_uri: str TODO: Figure out what this does. + collector_number: str The collector number of the card. + digital: bool Returns True if the card is the digital version. + rarity: str The rarity of the card. + illustration_id: str The related id of the card art. + artist: str The artist of the card. + frame: str The year of the card frame. + full_art: bool Returns True if the card is considered full art. + border_color: str The color of the card border. + timeshifted: bool Returns True if the card is timeshifted. + colorshifted: bool Returns True if the card is colorshifted. + futureshifted: bool Returns True if the card is futureshifted. + edhrec_rank: int The rank of the card on edhrec.com + tix: int The MTGO price of the card + related_uris: dict A dictionary of related websites for this card. + purchase_uris: dict A dictionary of links to purchase the card. + """ + + def __init__(self, _format=None, face=None, version=None, pretty=None): + self.format = _format + self.face = face + self.version = version + self.pretty = pretty + loop = asyncio.get_event_loop() + self.session = aiohttp.ClientSession(loop=loop) + + async def getRequest(url, **kwargs): + async with self.session.get(url, **kwargs) as response: + return await response.json() + + self.scryfallJson = loop.run_until_complete(getRequest( + url='https://api.scryfall.com/cards/random?', + params={ + 'format':self.format, + 'face':self.face, + 'version':self.version, + 'pretty':self.pretty + })) + + if self.scryfallJson['object'] == 'error': + raise Exception(self.scryfallJson['details']) + self.session.close() + + self.session.close() + + def object(self): + return self.scryfallJson['object'] + + def id(self): + return self.scryfallJson['id'] + + def multiverse_ids(self): + return self.scryfallJson['multiverse_ids'] + + def mtgo_id(self): + return self.scryfallJson['mtgo_id'] + + def mtgo_foil_id(self): + return self.scryfallJson['mtgo_foil_id'] + + def name(self): + return self.scryfallJson['name'] + + def uri(self): + return self.scryfallJson['uri'] + + def scryfall_uri(self): + return self.scryfallJson['scryfall_uri'] + + def layout(self): + return self.scryfallJson['layout'] + + def highres_image(self): + return self.scryfallJson['highres_image'] + + def image_uris(self): + return self.scryfallJson['image_uris'] + + def cmc(self): + return self.scryfallJson['cmc'] + + def type_line(self): + return self.scryfallJson['type_line'] + + def oracle_text(self): + return self.scryfallJson['oracle_text'] + + def mana_cost(self): + return self.scryfallJson['mana_cost'] + + def colors(self): + return self.scryfallJson['colors'] + + def color_identity(self): + return self.scryfallJson['color_identity'] + + def legalities(self): + return self.scryfallJson['legalities'] + + def reserved(self): + return self.scryfallJson['reserved'] + + def reprint(self): + return self.scryfallJson['reprint'] + + def set(self): + return self.scryfallJson['set'] + + def set_name(self): + return self.scryfallJson['set_name'] + + def set_uri(self): + return self.scryfallJson['set_uri'] + + def set_search_uri(self): + return self.scryfallJson['set_search_uri'] + + def scryfall_set_uri(self): + return self.scryfallJson['scryfall_set_uri'] + + def rulings_uri(self): + return self.scryfallJson['rulings_uri'] + + def prints_search_uri(self): + return self.scryfallJson['prints_search_uri'] + + def collector_number(self): + return self.scryfallJson['collector_number'] + + def digital(self): + return self.scryfallJson['digital'] + + def rarity(self): + return self.scryfallJson['rarity'] + + def illustration_id(self): + return self.scryfallJson['illustration_id'] + + def artist(self): + return self.scryfallJson['artist'] + + def frame(self): + return self.scryfallJson['frame'] + + def full_art(self): + return self.scryfallJson['full_art'] + + def border_color(self): + return self.scryfallJson['border_color'] + + def timeshifted(self): + return self.scryfallJson['timeshifted'] + + def colorshifted(self): + return self.scryfallJson['colorshifted'] + + def futureshifted(self): + return self.scryfallJson['futureshifted'] + + def edhrec_rank(self): + return self.scryfallJson['edhrec_rank'] + + def tix(self): + return self.scryfallJson['tix'] + + def related_uris(self): + return self.scryfallJson['related_uris'] + + def purchase_uris(self): + return self.scryfallJson['purchase_uris']