from fast_bitrix24 import Bitrix import re from difflib import SequenceMatcher from dotenv import load_dotenv import os load_dotenv() B24 = os.getenv('BITRIX') # замените на ваш вебхук для доступа к Bitrix24 webhook = B24 b = Bitrix(webhook) idss = '35578' deals = b.get_all( 'crm.deal.list', params={ 'select': ['COMMENTS'], 'filter': {'ID': idss} }) # print(deals) for d in deals: com = d['COMMENTS'] # print(com) pattern = re.compile(r'Product - (.*?)\s*Additional info:', re.DOTALL) pattern_kg = re.compile(r'\[\*\]кг: (.*?)\[/list\]', re.DOTALL) # Используем findall для поиска всех совпадений matches_product = pattern.findall(com) matches_kg = pattern_kg.findall(com) # Объединяем совпадения в одну строку result = [f"{product} кг: {kg}" for product, kg in zip(matches_product, matches_kg)] # Выводим результат tovar_name = [] for item in result: # print(item) names = item tovar_name.append(names) print(tovar_name) tov = [] tovar = b.get_all('crm.deal.productrows.get', params= {"ID": idss} ) # print(tovar) for t in tovar: product_id = t['PRODUCT_ID'] product_name = t['PRODUCT_NAME'] price = t['PRICE'] quan = t['QUANTITY'] data = {'PRODUCT_ID': product_id, 'PRODUCT_NAME': product_name, 'PRICE': price, 'QUANTITY': quan} tov.append(data) # print(tov) def similar(a, b): return SequenceMatcher(None, a, b).ratio() threshold = 0.6 # Задайте порог схожести по вашему усмотрению similar_items = [] for product_info in tov: found_similar = False for product_name in tovar_name: if similar(product_info['PRODUCT_NAME'], product_name) > threshold: similar_items.append({'PRODUCT_ID': product_info['PRODUCT_ID'], 'PRODUCT_NAME': f"{product_info['PRODUCT_NAME']} {product_name}", 'PRICE': product_info['PRICE'], 'QUANTITY': product_info['QUANTITY']}) # Удалить найденный элемент из product_names tovar_name.remove(product_name) found_similar = True break if not found_similar: similar_items.append(product_info) tovar_up = b.call( "crm.deal.productrows.set", { "ID": idss, 'rows':similar_items } )