|
|
|
"""
|
|
Ü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) |