optimized requests to dndb
This commit is contained in:
58
generate.py
58
generate.py
@@ -312,7 +312,27 @@ def get_correct_text_sizes(draw, text: str, font: ImageFont.FreeTypeFont):
|
||||
|
||||
return (label_width, label_height)
|
||||
|
||||
def generate_main(char: dict):
|
||||
def get_char_data_from_dndb(char_id: int):
|
||||
headers = {
|
||||
'Content-Type': 'text/json',
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0',
|
||||
'Referer': 'https://www.dndbeyond.com/'
|
||||
}
|
||||
|
||||
for i in range(3):
|
||||
response = requests.get(f"{DNDB_BASE_URL}/{char_id}?includeCustomItems=true", headers=headers)
|
||||
if response.status_code == 200:
|
||||
data = response.json()['data']
|
||||
break
|
||||
sleep(1)
|
||||
|
||||
else:
|
||||
print("Error: Failed to retrieve data from URL.")
|
||||
return False
|
||||
|
||||
return data
|
||||
|
||||
def generate_main(char: dict, scene: str = "main"):
|
||||
STATS_DICT = {
|
||||
1: {
|
||||
"name": "strength",
|
||||
@@ -340,31 +360,14 @@ def generate_main(char: dict):
|
||||
},
|
||||
}
|
||||
|
||||
headers = {
|
||||
'Content-Type': 'text/json',
|
||||
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0',
|
||||
'Referer': 'https://www.dndbeyond.com/'
|
||||
}
|
||||
|
||||
for i in range(3):
|
||||
response = requests.get(f"{DNDB_BASE_URL}/{char['characterId']}?includeCustomItems=true", headers=headers)
|
||||
if response.status_code == 200:
|
||||
data = response.json()['data']
|
||||
break
|
||||
sleep(1)
|
||||
|
||||
else:
|
||||
print("Error: Failed to retrieve data from URL.")
|
||||
return False
|
||||
|
||||
ch = CharacterService()
|
||||
print(f"Chars name: {char['characterName']}")
|
||||
max_hp = ch.get_max_hp(data)
|
||||
current_hp = max_hp - int(data['removedHitPoints'])
|
||||
print(f"CHARS HEALTH: {max_hp-int(data['removedHitPoints'])}/{max_hp}")
|
||||
max_hp = ch.get_max_hp(char['data'])
|
||||
current_hp = max_hp - int(char['data']['removedHitPoints'])
|
||||
print(f"CHARS HEALTH: {current_hp}/{max_hp}")
|
||||
|
||||
# Load the background image
|
||||
background = Image.open("parts/background-main.png")
|
||||
background = Image.open(f"parts/background-{scene}.png")
|
||||
|
||||
# Load the image to be placed on top
|
||||
foreground = Image.open(f"parts/{char['portraitName']}-main.png")
|
||||
@@ -380,7 +383,7 @@ def generate_main(char: dict):
|
||||
draw_width, _ = draw.im.size # pyright: ignore[reportGeneralTypeIssues]
|
||||
|
||||
for stat in ch.stat_map.keys():
|
||||
final_stat = ch.get_stat_mod(data, stat)
|
||||
final_stat = ch.get_stat_mod(char['data'], stat)
|
||||
|
||||
# Define the font and font size for the text labels
|
||||
stats_font = ImageFont.truetype("fonts/NotoSerif-Regular.ttf", 30)
|
||||
@@ -419,7 +422,10 @@ def generate_main(char: dict):
|
||||
if not os.path.exists(results_dir):
|
||||
os.makedirs(results_dir)
|
||||
|
||||
background.save(f"results/{char['portraitName']}-main.png")
|
||||
if scene == "battle":
|
||||
background = background.resize((553, 320))
|
||||
|
||||
background.save(f"results/{char['portraitName']}-{scene}.png")
|
||||
|
||||
return True
|
||||
|
||||
@@ -431,4 +437,6 @@ empty_image.save("results/transparent.png")
|
||||
|
||||
# generate_main(DNDB_CHARS[1])
|
||||
for char in DNDB_CHARS:
|
||||
generate_main(char)
|
||||
char['data'] = get_char_data_from_dndb(char['characterId'])
|
||||
generate_main(char, "main")
|
||||
generate_main(char, "battle")
|
||||
|
||||
BIN
parts/background-battle.png
Normal file
BIN
parts/background-battle.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 309 KiB |
Reference in New Issue
Block a user