| |
| import requests |
| import xml.etree.ElementTree as ET |
|
|
| def test_variant_search(product_name): |
| """B2B API'den variant field'ı kontrol et""" |
| try: |
| warehouse_url = 'https://video.trek-turkey.com/bizimhesap-warehouse-xml.php' |
| response = requests.get(warehouse_url, verify=False, timeout=15) |
| |
| if response.status_code != 200: |
| return None |
| |
| root = ET.fromstring(response.content) |
| |
| |
| turkish_map = {'ı': 'i', 'ğ': 'g', 'ü': 'u', 'ş': 's', 'ö': 'o', 'ç': 'c', 'İ': 'i', 'I': 'i'} |
| |
| def normalize_turkish(text): |
| import unicodedata |
| text = unicodedata.normalize('NFD', text) |
| text = ''.join(char for char in text if unicodedata.category(char) != 'Mn') |
| for tr_char, en_char in turkish_map.items(): |
| text = text.replace(tr_char, en_char) |
| return text |
| |
| |
| search_name = normalize_turkish(product_name.lower().strip()) |
| search_words = search_name.split() |
| |
| print(f"DEBUG: Aranan: '{product_name}' -> normalize: '{search_name}' -> kelimeler: {search_words}") |
| |
| variant_matches = [] |
| |
| |
| for product in root.findall('Product'): |
| product_name_elem = product.find('ProductName') |
| variant_elem = product.find('Variant') |
| |
| if product_name_elem is not None and product_name_elem.text: |
| xml_product_name = product_name_elem.text.strip() |
| |
| |
| if variant_elem is not None and variant_elem.text: |
| variant_text = variant_elem.text.strip() |
| variant_normalized = normalize_turkish(variant_text.lower().replace('-', ' ')) |
| |
| |
| if all(word in variant_normalized for word in search_words): |
| |
| warehouses = product.find('Warehouses') |
| stock_info = [] |
| if warehouses is not None: |
| for warehouse in warehouses.findall('Warehouse'): |
| name_elem = warehouse.find('Name') |
| stock_elem = warehouse.find('Stock') |
| |
| if name_elem is not None and stock_elem is not None: |
| warehouse_name = name_elem.text if name_elem.text else "Bilinmeyen" |
| try: |
| stock_count = int(stock_elem.text) if stock_elem.text else 0 |
| if stock_count > 0: |
| stock_info.append(f"{warehouse_name}: {stock_count}") |
| except (ValueError, TypeError): |
| pass |
| |
| variant_matches.append({ |
| 'product_name': xml_product_name, |
| 'variant': variant_text, |
| 'variant_normalized': variant_normalized, |
| 'stock_info': stock_info |
| }) |
| |
| print(f"DEBUG: VARIANT MATCH - {xml_product_name}") |
| print(f" Variant: {variant_text} -> {variant_normalized}") |
| if stock_info: |
| print(f" Stok: {', '.join(stock_info)}") |
| else: |
| print(f" Stokta yok") |
| |
| return variant_matches |
| |
| except Exception as e: |
| print(f"Hata: {e}") |
| return None |
|
|
| if __name__ == "__main__": |
| |
| test_cases = [ |
| "M Turuncu", |
| "m turuncu", |
| "L Siyah", |
| "S Beyaz" |
| ] |
| |
| for test_case in test_cases: |
| print(f"\n=== Testing: {test_case} ===") |
| result = test_variant_search(test_case) |
| |
| if result: |
| print(f"Toplam {len(result)} variant match bulundu:") |
| for i, match in enumerate(result, 1): |
| print(f"{i}. {match['product_name']} - {match['variant']}") |
| if match['stock_info']: |
| print(f" Stokta: {', '.join(match['stock_info'])}") |
| else: |
| print(f" Stokta değil") |
| else: |
| print("Variant match bulunamadı") |
| print("-" * 50) |