optimized requests to dndb

This commit is contained in:
2023-06-16 15:48:52 +03:00
parent 9795ca1a8c
commit ffd3705bfa
2 changed files with 33 additions and 25 deletions

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 KiB