|
|
| """
|
| Ürün Resimlerini Sohbette Gösterme Sistemi
|
| """
|
|
|
| def round_price(price_str):
|
| """Fiyatı yuvarlama formülüne göre yuvarla"""
|
| try:
|
|
|
| price_clean = price_str.replace(' TL', '').replace(',', '.')
|
| price_float = float(price_clean)
|
|
|
|
|
| if price_float > 200000:
|
| return str(round(price_float / 5000) * 5000)
|
|
|
| elif price_float > 30000:
|
| return str(round(price_float / 1000) * 1000)
|
|
|
| elif price_float > 10000:
|
| return str(round(price_float / 100) * 100)
|
|
|
| else:
|
| return str(round(price_float / 10) * 10)
|
| except (ValueError, TypeError):
|
| return price_str
|
|
|
| def format_message_with_images(message):
|
| """Mesajdaki resim URL'lerini HTML formatına çevir"""
|
| if "Ürün resmi:" not in message:
|
| return message
|
|
|
| lines = message.split('\n')
|
| formatted_lines = []
|
|
|
| for line in lines:
|
| if line.startswith("Ürün resmi:"):
|
| image_url = line.replace("Ürün resmi:", "").strip()
|
| if image_url:
|
|
|
| img_html = f"""
|
| <div style="margin: 10px 0;">
|
| <img src="{image_url}"
|
| alt="Ürün Resmi"
|
| style="max-width: 300px; max-height: 200px; border-radius: 8px; border: 1px solid #ddd; box-shadow: 0 2px 4px rgba(0,0,0,0.1);"
|
| onerror="this.style.display='none'">
|
| </div>"""
|
| formatted_lines.append(img_html)
|
| else:
|
| formatted_lines.append(line)
|
| else:
|
| formatted_lines.append(line)
|
|
|
| return '\n'.join(formatted_lines)
|
|
|
| def create_product_gallery(products_with_images):
|
| """Birden fazla ürün için galeri oluştur"""
|
| if not products_with_images:
|
| return ""
|
|
|
| gallery_html = """
|
| <div style="display: flex; flex-wrap: wrap; gap: 15px; margin: 15px 0;">
|
| """
|
|
|
| for product in products_with_images:
|
| name = product.get('name', 'Bilinmeyen')
|
| price = product.get('price', 'Fiyat yok')
|
| image_url = product.get('image_url', '')
|
| product_url = product.get('product_url', '')
|
|
|
| if image_url:
|
| card_html = f"""
|
| <div style="border: 1px solid #ddd; border-radius: 8px; padding: 10px; max-width: 200px; text-align: center; background: white; box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
|
| <img src="{image_url}"
|
| alt="{name}"
|
| style="max-width: 180px; max-height: 120px; border-radius: 4px; margin-bottom: 8px;"
|
| onerror="this.style.display='none'">
|
| <div style="font-size: 12px; font-weight: bold; margin-bottom: 4px;">{name}</div>
|
| <div style="font-size: 11px; color: #666; margin-bottom: 8px;">{price}</div>
|
| {f'<a href="{product_url}" target="_blank" style="font-size: 10px; color: #007bff; text-decoration: none;">Detaylı Bilgi</a>' if product_url else ''}
|
| </div>"""
|
| gallery_html += card_html
|
|
|
| gallery_html += "</div>"
|
| return gallery_html
|
|
|
| def extract_product_info_for_gallery(message):
|
| """Mesajdan ürün bilgilerini çıkarıp galeri formatına çevir"""
|
| if "karşılaştır" in message.lower() or "öneri" in message.lower():
|
|
|
| lines = message.split('\n')
|
| products = []
|
|
|
| current_product = {}
|
| for line in lines:
|
| line = line.strip()
|
| if line.startswith('•') and any(keyword in line.lower() for keyword in ['marlin', 'émonda', 'madone', 'domane', 'fuel', 'powerfly', 'fx']):
|
|
|
| if current_product:
|
| products.append(current_product)
|
|
|
|
|
| parts = line.split(' - ')
|
| name = parts[0].replace('•', '').strip()
|
| price_raw = parts[1] if len(parts) > 1 else 'Fiyat yok'
|
|
|
|
|
| if price_raw != 'Fiyat yok':
|
| price = round_price(price_raw) + ' TL'
|
| else:
|
| price = price_raw
|
|
|
| current_product = {
|
| 'name': name,
|
| 'price': price,
|
| 'image_url': '',
|
| 'product_url': ''
|
| }
|
| elif "Ürün resmi:" in line and current_product:
|
| current_product['image_url'] = line.replace("Ürün resmi:", "").strip()
|
| elif "Ürün linki:" in line and current_product:
|
| current_product['product_url'] = line.replace("Ürün linki:", "").strip()
|
|
|
|
|
| if current_product:
|
| products.append(current_product)
|
|
|
| if products:
|
| gallery = create_product_gallery(products)
|
|
|
| cleaned_message = message
|
| for line in message.split('\n'):
|
| if line.startswith("Ürün resmi:") or line.startswith("Ürün linki:"):
|
| cleaned_message = cleaned_message.replace(line, "")
|
|
|
| return cleaned_message.strip() + "\n\n" + gallery
|
|
|
| return format_message_with_images(message)
|
|
|
| def should_use_gallery_format(message):
|
| """Mesajın galeri formatı kullanması gerekip gerekmediğini kontrol et"""
|
| gallery_keywords = ["karşılaştır", "öneri", "seçenek", "alternatif", "bütçe"]
|
| return any(keyword in message.lower() for keyword in gallery_keywords) |