MTGRandomScryfallBot/MTGMastodonBot.py

68 lines
1.8 KiB
Python

import random
import os
from requests import get
from json import loads
from shutil import copyfileobj
from mastodon import Mastodon
from dotenv import load_dotenv
load_dotenv()
mastodon = Mastodon(
access_token = os.getenv("token"),
api_base_url = os.getenv("url")
)
# Use this only if you want a specific set.
# You need to set both the code and find out how many total cards are in the set
# setname = "sld"
# cardid = random.randint(0,1718)
# Load the card data from Scryfall
#This is for a specific set
card = loads(get(f"https://api.scryfall.com/cards/{setname}/{cardid}").text)
# This is the actual random card:
card = loads(get(f"https://api.scryfall.com/cards/random?format=image.json").text)
# Get the image URL
img_url = card['image_uris']['large']
# Get card title
mtg_title = card['name']
# Artist name
mtg_artist = card['artist']
# Get flavor text
flavor = card['oracle_text']
# Get card set
mtg_set = card['set_name']
# Save the image
with open('image.jpg', 'wb') as out_file:
copyfileobj(get(img_url, stream = True).raw, out_file)
# Removing weird or unusable characters for hashtags
special_characters=["$","'","`","%","&","(",")",":","?","!","@","*"," "]
for i in special_characters:
hTitle = mtg_title.replace(i,"")
hSet = mtg_set.replace(i,"")
hArtist = mtg_artist.replace(i,"")
hArtist = hArtist.replace('.', '')
hArtist = hArtist.replace(',', '')
hArtist = hArtist.replace("'", '')
hTitle = hTitle.replace(',',"")
hTitle = hTitle.replace('.',"")
hTitle = hTitle.replace(':',"")
hTitle = hTitle.replace("'","")
hSet = hSet.replace('.','')
hSet = hSet.replace(',','')
# Set the Mastodon post information
media = mastodon.media_post("image.jpg", description="Card Name: " + mtg_title + "\n" + "Set: " + mtg_set + "\n" + "Description: " + flavor + "\n" + "Artist: " + mtg_artist)