bugfix + postprocessing
This commit is contained in:
@ -21,31 +21,36 @@ def extract_crafts(soup: BeautifulSoup, storage: CraftStorage) -> set[str]:
|
||||
if(is_hidden):
|
||||
continue
|
||||
|
||||
output_item = parse_craft_item(container)
|
||||
# Получаем список рецептов (может быть несколько для печи)
|
||||
recipes_list = parse_craft_components_and_recipe(
|
||||
container, output_item.item.name, output_item.amount
|
||||
)
|
||||
output_items = parse_craft_items(container)
|
||||
for output_item in output_items:
|
||||
# Получаем список рецептов (может быть несколько для печи)
|
||||
if(output_item is None):
|
||||
logger.error(f'ошибка для: \n{container}\n не удалось получить продукт машинного рецепта')
|
||||
continue
|
||||
|
||||
for recipe_input in recipes_list: # Обрабатываем каждый рецепт отдельно
|
||||
if not storage.try_add_recipe_signature(
|
||||
output_item.item.name,
|
||||
recipe_input.components,
|
||||
recipe_input.recipe.craft_type
|
||||
):
|
||||
continue # Дубликат
|
||||
recipes_list = parse_craft_components_and_recipe(
|
||||
container, output_item.item.name, output_item.amount
|
||||
)
|
||||
|
||||
storage.add_item(output_item.item)
|
||||
for input_item in recipe_input.items:
|
||||
storage.add_item(input_item)
|
||||
for recipe_input in recipes_list: # Обрабатываем каждый рецепт отдельно
|
||||
if not storage.try_add_recipe_signature(
|
||||
output_item.item.name,
|
||||
recipe_input.components,
|
||||
recipe_input.recipe.craft_type
|
||||
):
|
||||
continue # Дубликат
|
||||
|
||||
recipe_id = storage.add_recipe(recipe_input.recipe)
|
||||
for component in recipe_input.components:
|
||||
component.recipe_id = recipe_id
|
||||
storage.add_component(component)
|
||||
storage.add_item(output_item.item)
|
||||
for input_item in recipe_input.items:
|
||||
storage.add_item(input_item)
|
||||
|
||||
logger.info(f'Добавлен рецепт машинного крафта для {output_item.item.name} '
|
||||
f'(ингредиент: {recipe_input.components[0].input_item})')
|
||||
recipe_id = storage.add_recipe(recipe_input.recipe)
|
||||
for component in recipe_input.components:
|
||||
component.recipe_id = recipe_id
|
||||
storage.add_component(component)
|
||||
|
||||
logger.info(f'Добавлен рецепт машинного крафта для {output_item.item.name} '
|
||||
f'(ингредиент: {recipe_input.components[0].input_item})')
|
||||
|
||||
return src_links
|
||||
|
||||
@ -55,36 +60,40 @@ def check_is_hidden(container : BeautifulSoup) -> bool:
|
||||
return True
|
||||
return False
|
||||
|
||||
def parse_craft_item(container) -> ParsedItem|None:
|
||||
output_span = container.find('span', class_='gt-output')
|
||||
def parse_craft_items(container : BeautifulSoup) -> list[ParsedItem]|None:
|
||||
|
||||
result = []
|
||||
|
||||
output_span : BeautifulSoup = container.find('span', class_='gt-output')
|
||||
if(output_span is None):
|
||||
logger.error(f'ошибка для \n{container}\n: не найдено ячейки с результатом!')
|
||||
return None
|
||||
|
||||
output_span_name_container = output_span.find('span', class_='invslot-item')
|
||||
if(output_span_name_container is None):
|
||||
logger.error(f'ошибка для \n{output_span}\n: не найден текстовый контейнер!')
|
||||
output_span_name_containers = output_span.find_all('span', class_='invslot-item')
|
||||
if(output_span_name_containers is None or output_span_name_containers.__len__ == 0):
|
||||
logger.error(f'ошибка для \n{output_span}\n: не найдено ни одного текстового контейнера!')
|
||||
return None
|
||||
|
||||
|
||||
data_from_span = extract_data_from_sprite_span(output_span_name_container)
|
||||
if(data_from_span is not None):
|
||||
output_item_title = data_from_span.title
|
||||
output_item_img_shift = data_from_span.shift
|
||||
output_item_img_url = data_from_span.img_url
|
||||
output_amount = data_from_span.amount
|
||||
else:
|
||||
data_from_img = extract_data_from_sprite_img(output_span_name_container)
|
||||
if(data_from_img is None):
|
||||
logger.error(f'ошибка для \n{output_span_name_container}\n: не удалось извлечь картинку и заголовок ни одним из способов')
|
||||
return None
|
||||
output_item_title = data_from_img.title
|
||||
output_item_img_shift = data_from_img.shift
|
||||
output_item_img_url = data_from_img.img_url
|
||||
output_amount = 1
|
||||
|
||||
item = CraftItem(output_item_title, output_item_img_url, output_item_img_shift)
|
||||
return ParsedItem(item=item, amount=output_amount)
|
||||
for output_span_name_container in output_span_name_containers:
|
||||
data_from_span = extract_data_from_sprite_span(output_span_name_container)
|
||||
if(data_from_span is not None):
|
||||
output_item_title = data_from_span.title
|
||||
output_item_img_shift = data_from_span.shift
|
||||
output_item_img_url = data_from_span.img_url
|
||||
output_amount = data_from_span.amount
|
||||
else:
|
||||
data_from_img = extract_data_from_sprite_img(output_span_name_container)
|
||||
if(data_from_img is None):
|
||||
logger.error(f'ошибка для \n{output_span_name_container}\n: не удалось извлечь картинку и заголовок ни одним из способов')
|
||||
continue
|
||||
output_item_title = data_from_img.title
|
||||
output_item_img_shift = data_from_img.shift
|
||||
output_item_img_url = data_from_img.img_url
|
||||
output_amount = 1
|
||||
|
||||
item = CraftItem(output_item_title, output_item_img_url, output_item_img_shift)
|
||||
result.append(ParsedItem(item=item, amount=output_amount))
|
||||
return result
|
||||
|
||||
def parse_craft_components_and_recipe(container, output_item_name: str, output_item_count: int) -> list[ParsedRecipeInput]:
|
||||
input_span = container.find('span', class_='gt-input')
|
||||
@ -178,6 +187,7 @@ def extract_data_from_sprite_img(input_span_name_container) -> SpriteData|None:
|
||||
logger.error(f'ошибка для \n{input_span_name_container}\n: не найден url картинки!')
|
||||
return None
|
||||
return SpriteData(
|
||||
amount=1,
|
||||
title=title,
|
||||
shift=(0, 0),
|
||||
img_url=url,
|
||||
|
||||
Reference in New Issue
Block a user