Настройка парсера
This commit is contained in:
@@ -1,19 +1,24 @@
|
||||
import os
|
||||
import chardet # pip install chardet
|
||||
import traceback
|
||||
from mail_order_bot.excel_processor import ExcelProcessor
|
||||
|
||||
from ..src.mail_order_bot.excel_processor import ExcelProcessor
|
||||
# установим рабочую директорию
|
||||
import os
|
||||
os.chdir(os.path.dirname(os.path.abspath(__file__)))
|
||||
from io import BytesIO
|
||||
|
||||
|
||||
import logging
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
logging.basicConfig(level=logging.WARNING, format='%(module)s - %(message)s') #%(asctime)s -
|
||||
BASE_PATH = './files'
|
||||
|
||||
|
||||
ep = ExcelProcessor("./suppliers.yml")
|
||||
processor = ExcelProcessor("./suppliers.yml")
|
||||
|
||||
print("================================================")
|
||||
for provider_name in os.listdir(BASE_PATH):
|
||||
print(f'Провайдер: {provider_name}')
|
||||
|
||||
|
||||
provider_folder = os.path.join(BASE_PATH, provider_name)
|
||||
if os.path.isdir(provider_folder):
|
||||
for file_name in os.listdir(provider_folder):
|
||||
@@ -21,16 +26,23 @@ for provider_name in os.listdir(BASE_PATH):
|
||||
if os.path.isfile(file_path):
|
||||
with open(file_path, 'rb') as file: # бинарный режим
|
||||
raw_data = file.read()
|
||||
detected = chardet.detect(raw_data)
|
||||
encoding = detected['encoding'] or 'utf-8'
|
||||
bio = BytesIO(raw_data)
|
||||
|
||||
print("========================================================")
|
||||
print(f'Обработка: {provider_name} - {file_name}')
|
||||
try:
|
||||
data = raw_data.decode(encoding)
|
||||
except (UnicodeDecodeError, TypeError):
|
||||
# Если декодировать не удалось, попробуем utf-8 игнорируя ошибки
|
||||
data = raw_data.decode('utf-8', errors='ignore')
|
||||
|
||||
print(f'Файл: {file_name}')
|
||||
positions_a = processor.process(
|
||||
file_bytes=bio,
|
||||
file_name=file_name,
|
||||
supplier_name=provider_name
|
||||
)
|
||||
|
||||
print(f"\nПолучено {len(positions_a)} позиций от {provider_name}:")
|
||||
for pos in positions_a: # Первые 5
|
||||
print(f" - {pos.article}: {pos.name} "
|
||||
f"({pos.quantity} x {pos.price} = {pos.total})")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Ошибка обработки: {e}", traceback.format_exc())
|
||||
|
||||
|
||||
|
||||
#print(f'Содержимое: {data}')
|
||||
|
||||
@@ -2,8 +2,8 @@ suppliers:
|
||||
# order@stparts.ru
|
||||
"order@stparts.ru":
|
||||
sheet_name: "TDSheet" # Название листа Excel
|
||||
header_row: 0 # Номер строки с заголовками (0 = первая)
|
||||
|
||||
key_field: "Номер"
|
||||
|
||||
# Маппинг: внутреннее_поле -> название_колонки_в_Excel
|
||||
mapping:
|
||||
article: "Номер"
|
||||
@@ -13,16 +13,10 @@ suppliers:
|
||||
quantity: "Количество"
|
||||
#total: "Сумма"
|
||||
#Вопросы: что за поле "Фактическая_отгрузка"?
|
||||
|
||||
# Дополнительные настройки (опционально)
|
||||
options:
|
||||
decimal_separator: ","
|
||||
encoding: "utf-8"
|
||||
|
||||
# Рай Авто СПб
|
||||
EMPTY-FROM:
|
||||
sheet_name: 0
|
||||
header_row: 2 # Заголовки во второй строке
|
||||
key_field: "Артикул" # Заголовки во второй строке
|
||||
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
@@ -38,10 +32,9 @@ suppliers:
|
||||
#thousand_separator: ","
|
||||
# Примечание: гемор - нет имейла
|
||||
|
||||
# АвтоТО
|
||||
"order@avtoto.ru":
|
||||
sheet_name: "Заказы" # Можно указать индекс листа
|
||||
header_row: 4
|
||||
key_field: "Артикул"
|
||||
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
@@ -50,17 +43,10 @@ suppliers:
|
||||
price: "Цена"
|
||||
quantity: "Кол-во"
|
||||
total: "Сумма"
|
||||
|
||||
options:
|
||||
#skip_footer_rows: 3
|
||||
decimal_separator: ","
|
||||
|
||||
|
||||
|
||||
# автолига.рф
|
||||
"автолига.рф":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
header_row: 8
|
||||
key_field: "Артикул"
|
||||
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
@@ -69,9 +55,357 @@ suppliers:
|
||||
price: "Цена, р."
|
||||
quantity: "Количество"
|
||||
total: "Сумма, р."
|
||||
|
||||
options:
|
||||
#skip_footer_rows: 3
|
||||
decimal_separator: ","
|
||||
|
||||
|
||||
abstd.ru:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул поставщика"
|
||||
|
||||
mapping:
|
||||
article: "Артикул поставщика"
|
||||
manufacturer: "Бренд поставщика"
|
||||
name: "Наименование"
|
||||
price: "Цена поставщика"
|
||||
quantity: "Кол-во"
|
||||
total: "Сумма"
|
||||
|
||||
adeo.pro:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Каталожный номер"
|
||||
|
||||
mapping:
|
||||
article: "Каталожный номер"
|
||||
manufacturer: "Производитель"
|
||||
name: "Наименование"
|
||||
price: "Цена"
|
||||
quantity: "Кол-во"
|
||||
total: "Сумма"
|
||||
|
||||
amtel.club:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Номер"
|
||||
|
||||
mapping:
|
||||
article: "Номер"
|
||||
manufacturer: "Фирма"
|
||||
name: "Наименование"
|
||||
price: "Цена"
|
||||
quantity: "Кол-во"
|
||||
total: "Сумма"
|
||||
|
||||
auto-sputnik.ru:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул"
|
||||
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
manufacturer: "Производитель"
|
||||
name: "Наименование"
|
||||
price: "Цена"
|
||||
quantity: "Кол-во"
|
||||
total: "Сумма"
|
||||
|
||||
autocode.ru:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул"
|
||||
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
manufacturer: "Бренд"
|
||||
name: "Наименование"
|
||||
price: "Цена"
|
||||
quantity: "Кол-во"
|
||||
# Надо ли как-то учитывать доп поля типа Кол-во в отказ?
|
||||
|
||||
autopiter.ru:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Номер"
|
||||
|
||||
mapping:
|
||||
article: "Номер"
|
||||
manufacturer: "Каталог"
|
||||
price: "Цена"
|
||||
quantity: "Кол-во"
|
||||
|
||||
|
||||
autostels.ru:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "№ Детали"
|
||||
|
||||
mapping:
|
||||
article: "№ Детали"
|
||||
manufacturer: "Производитель"
|
||||
name: "Наименование"
|
||||
price: "Прайс"
|
||||
quantity: "Количество"
|
||||
total: "Сумма"
|
||||
|
||||
|
||||
avtoformula.ru:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "№ Детали"
|
||||
|
||||
mapping:
|
||||
article: "№ Детали"
|
||||
manufacturer: "Производитель"
|
||||
name: "Наименование"
|
||||
price: "Прайс"
|
||||
quantity: "Количество"
|
||||
total: "Сумма"
|
||||
|
||||
autoeuro.ru:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Номер Производителя"
|
||||
|
||||
mapping:
|
||||
article: "Номер Производителя"
|
||||
manufacturer: "Производитель"
|
||||
price: "Цена"
|
||||
quantity: "Количество"
|
||||
|
||||
avtogut.ru:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул"
|
||||
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
manufacturer: "Производитель"
|
||||
name: "Наименование"
|
||||
price: "Цена, р."
|
||||
quantity: "Количество"
|
||||
total: "Сумма, р."
|
||||
|
||||
avtokrep.spb.ru:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул"
|
||||
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
manufacturer: "Бренд"
|
||||
name: "Наименование"
|
||||
price: "Цена"
|
||||
quantity: "Количество"
|
||||
|
||||
avtolavka.net:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Номер"
|
||||
|
||||
mapping:
|
||||
article: "Номер"
|
||||
manufacturer: "Бренд"
|
||||
name: "Описание"
|
||||
price: "Цена закупки"
|
||||
quantity: "Количество"
|
||||
|
||||
avtoto.ru:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул"
|
||||
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
manufacturer: "Производитель"
|
||||
name: "Название"
|
||||
price: "Цена (рубли)"
|
||||
quantity: "Кол-во"
|
||||
|
||||
detal.msk.ru:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул"
|
||||
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
manufacturer: "Производитель"
|
||||
name: "Наименование"
|
||||
price: "Цена"
|
||||
quantity: "Количество"
|
||||
total: "Сумма"
|
||||
|
||||
detali.ru:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Код поставщика"
|
||||
|
||||
mapping:
|
||||
article: "Код поставщика"
|
||||
manufacturer: "Бренд"
|
||||
name: "Наименование"
|
||||
price: "Цена"
|
||||
quantity: "Количество"
|
||||
|
||||
e-tape.ru:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул"
|
||||
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
manufacturer: "Производитель"
|
||||
name: "Название детали"
|
||||
price: "Цена, р."
|
||||
quantity: "Количество"
|
||||
total: "Сумма, р."
|
||||
|
||||
forum-auto.ru:
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Номер по каталогу"
|
||||
|
||||
mapping:
|
||||
article: "Номер по каталогу"
|
||||
manufacturer: "Производитель"
|
||||
name: "Название детали"
|
||||
price: "Цена"
|
||||
quantity: "Количество"
|
||||
|
||||
"info_avtor@mail.ru":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул"
|
||||
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
manufacturer: "Бренд"
|
||||
name: "Товары (работы, услуги)"
|
||||
price: "Цена"
|
||||
quantity: "Количество"
|
||||
total: "Сумма"
|
||||
|
||||
"mikado-parts.ru":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "артикул"
|
||||
|
||||
mapping:
|
||||
article: "артикул"
|
||||
manufacturer: "бренд"
|
||||
name: "наименование"
|
||||
price: "цена"
|
||||
quantity: "количество"
|
||||
|
||||
"multikrep.com":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул"
|
||||
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
manufacturer: "Бренд"
|
||||
name: "Наименование"
|
||||
price: "Цена"
|
||||
quantity: "Количество"
|
||||
|
||||
"only-original.parts":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Номер"
|
||||
|
||||
mapping:
|
||||
article: "Номер"
|
||||
manufacturer: "Бренд"
|
||||
name: "Описание"
|
||||
price: "Цена закупки"
|
||||
quantity: "Количество"
|
||||
|
||||
"part-kom.ru":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Код\nпоставщика"
|
||||
|
||||
mapping:
|
||||
article: "Код\nпоставщика"
|
||||
manufacturer: "Изготовитель"
|
||||
name: "Наименование товара"
|
||||
price: "Цена"
|
||||
quantity: "Кол-во"
|
||||
total: "Сумма"
|
||||
|
||||
"parterra.ru":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул поставщика"
|
||||
|
||||
mapping:
|
||||
article: "Артикул поставщика"
|
||||
manufacturer: "Производитель Поставщика"
|
||||
name: "Номенклатура"
|
||||
price: "Цена"
|
||||
quantity: "Количество (в единицах хранения)"
|
||||
total: "Сумма с НДС"
|
||||
|
||||
|
||||
"pmmobile.ru":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Номер"
|
||||
|
||||
mapping:
|
||||
article: "Номер"
|
||||
manufacturer: "Бренд"
|
||||
name: "Описание"
|
||||
price: "Цена закупки"
|
||||
quantity: "Количество"
|
||||
|
||||
|
||||
"rmsauto.ru":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Номер детали"
|
||||
mapping:
|
||||
article: "Номер детали"
|
||||
manufacturer: "Производитель"
|
||||
name: "Наименование детали"
|
||||
price: "Цена, рублей (с НДС)"
|
||||
quantity: "Количество заказанное, штук"
|
||||
total: "Сумма, рублей (с НДС)"
|
||||
|
||||
"rnsprice.ru":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул"
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
manufacturer: "Марка"
|
||||
name: "Наименование"
|
||||
price: "Цена"
|
||||
quantity: "Кол-во"
|
||||
total: "Сумма"
|
||||
|
||||
"stutzen.ru":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул"
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
manufacturer: "Производитель"
|
||||
name: "Название детали"
|
||||
price: "Цена, р."
|
||||
quantity: "Количество"
|
||||
total: "Сумма, р."
|
||||
|
||||
"sz-snab.ru":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Номер"
|
||||
mapping:
|
||||
article: "Номер"
|
||||
manufacturer: "Бренд"
|
||||
name: "Описание"
|
||||
price: "Цена закупки"
|
||||
quantity: "Количество"
|
||||
|
||||
"todx.ru":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Код детали"
|
||||
mapping:
|
||||
article: "Код детали"
|
||||
manufacturer: "Производитель"
|
||||
name: "Наименование"
|
||||
price: "Цена\nдетали"
|
||||
quantity: "Кол-\nво"
|
||||
total: "Сумма"
|
||||
|
||||
"uniqom.ru":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул"
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
manufacturer: "Брэнд"
|
||||
name: "Наименование товара"
|
||||
price: "Цена"
|
||||
quantity: "Заказ, кол-во"
|
||||
total: "Сумма"
|
||||
|
||||
"Рай Авто СПб":
|
||||
sheet_name: 0 # Можно указать индекс листа
|
||||
key_field: "Артикул"
|
||||
mapping:
|
||||
article: "Артикул"
|
||||
manufacturer: "Производитель"
|
||||
name: "Название"
|
||||
price: "Цена"
|
||||
quantity: "Количество"
|
||||
Reference in New Issue
Block a user