Help for mtg.search

mtg ยท search

Sample CLI

gway mtg search

Full Code

def search(query, *, show=True, limit=5, **kwargs):
    """
    Search for Magic: The Gathering cards using Scryfall API.

    Parameters:
        query (str): The search query (name, text, type, etc.)
        show (bool): If True, print the card(s) info; else, return the results.
        **kwargs: Extra parameters for the Scryfall search API.

    Returns:
        list of dict: List of matching card data dicts if show=False.
        None: If show=True (prints results directly).
    """
    # Construct the query parameters
    params = {'q': query}
    params.update(kwargs)
    url = "https://api.scryfall.com/cards/search"
    
    try:
        response = requests.get(url, params=params)
        response.raise_for_status()
        data = response.json()
    except Exception as e:
        print(f"Error searching Scryfall: {e}")
        return None

    if data.get('object') != 'list' or not data.get('data'):
        print("No cards found for that query.")
        return None

    cards = data['data']

    if show:
        for card in cards[:limit]:  # Show up to 5 results
            print(f"\n--- {card.get('name', 'Unknown')} ---")
            print(f"Set: {card.get('set_name', 'Unknown')} ({card.get('set').upper()})")
            print(f"Type: {card.get('type_line', '-')}")
            if card.get('mana_cost'):
                print(f"Mana Cost: {card['mana_cost']}")
            if card.get('oracle_text'):
                print(f"Text: {card['oracle_text']}")
            if card.get('power') or card.get('toughness'):
                print(f"P/T: {card.get('power', '')}/{card.get('toughness', '')}")
            if card.get('image_uris', {}).get('normal'):
                print(f"Image: {card['image_uris']['normal']}")
    else:
        return cards