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)
|
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 = {
|
STATS_DICT = {
|
||||||
1: {
|
1: {
|
||||||
"name": "strength",
|
"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()
|
ch = CharacterService()
|
||||||
print(f"Chars name: {char['characterName']}")
|
print(f"Chars name: {char['characterName']}")
|
||||||
max_hp = ch.get_max_hp(data)
|
max_hp = ch.get_max_hp(char['data'])
|
||||||
current_hp = max_hp - int(data['removedHitPoints'])
|
current_hp = max_hp - int(char['data']['removedHitPoints'])
|
||||||
print(f"CHARS HEALTH: {max_hp-int(data['removedHitPoints'])}/{max_hp}")
|
print(f"CHARS HEALTH: {current_hp}/{max_hp}")
|
||||||
|
|
||||||
# Load the background image
|
# 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
|
# Load the image to be placed on top
|
||||||
foreground = Image.open(f"parts/{char['portraitName']}-main.png")
|
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]
|
draw_width, _ = draw.im.size # pyright: ignore[reportGeneralTypeIssues]
|
||||||
|
|
||||||
for stat in ch.stat_map.keys():
|
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
|
# Define the font and font size for the text labels
|
||||||
stats_font = ImageFont.truetype("fonts/NotoSerif-Regular.ttf", 30)
|
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):
|
if not os.path.exists(results_dir):
|
||||||
os.makedirs(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
|
return True
|
||||||
|
|
||||||
@@ -431,4 +437,6 @@ empty_image.save("results/transparent.png")
|
|||||||
|
|
||||||
# generate_main(DNDB_CHARS[1])
|
# generate_main(DNDB_CHARS[1])
|
||||||
for char in DNDB_CHARS:
|
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