import datetime import re # برای پردازش قیمت # import requests # فرض می‌کنیم که این کتابخانه در محیط شما موجود است # از lxml به جای xml.etree.ElementTree استفاده می‌کنیم برای سرعت و امکانات بیشتر from lxml import etree as ET from xml.dom import minidom # همچنان برای pretty print استفاده می‌شود # اگر requests در محیط شما موجود نیست، باید از urllib استفاده شود. # فعلا فرض می‌کنیم requests در دسترس است. try: import requests except ImportError: print("کتابخانه requests یافت نشد. لطفا آن را نصب کنید: pip install requests") # در صورت عدم وجود requests، کد زیر را فعال کنید و بخش requests را کامنت کنید # from urllib.request import urlopen # from urllib.error import URLError pass # استفاده از dict برای ذخیره محصولات و تبدیل به XML در انتها، می‌تواند حافظه را کمتر مصرف کند # اما برای سادگی، همچنان از ساختار ElementTree استفاده می‌کنیم. def create_torob_feed_optimized(): """ Optimized function to create a Torob feed XML from a given API. Uses lxml for faster XML processing and improved price handling. """ api_url = "https://lavasemkhangi.ir/api/torob/v3/products/" # نام فایل خروجی با فرمت تاریخ و زمان دقیق‌تر output_filename = f"torob_feed_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.xml" try: print(f"در حال دریافت اطلاعات از API: {api_url}") # استفاده از requests برای دریافت داده‌ها response = requests.get(api_url, timeout=30) # اضافه کردن timeout response.raise_for_status() # بررسی خطا در پاسخ API products_data = response.json() print(f"تعداد {len(products_data)} محصول دریافت شد.") if not products_data: print("هیچ محصولی از API دریافت نشد. فایل XML ایجاد نخواهد شد.") return None # 2. ایجاد ساختار XML پایه با استفاده از lxml # namespace برای سازگاری بهتر، اما برای ترب ممکن است لازم نباشد # root = ET.Element("products", nsmap={'': 'http://www.w3.org/2001/XMLSchema'}) # nsmap اختیاری است root = ET.Element("products") # 3. پردازش و تبدیل داده‌ها for product in products_data: product_element = ET.SubElement(root, "product") # -- استخراج و تبدیل فیلدهای مورد نیاز -- # این بخش باید بر اساس ساختار دقیق API شما و نیاز ترب تنظیم شود # شناسه محصول (ID) product_id = product.get('id') if product_id: ET.SubElement(product_element, "id").text = str(product_id) # نام محصول (Name) product_name = product.get('title') if product_name: ET.SubElement(product_element, "name").text = product_name # قیمت محصول (Price) # حذف کاراکترهای غیر عددی و اطمینان از اینکه قیمت به ریال است (اگر ترب نیاز به فرمت خاصی دارد) price = product.get('price') if price: try: # استفاده از regex برای حذف هرگونه کاراکتر غیر عددی # این روش قوی‌تر از filter است اگر قیمت فرمت‌های پیچیده داشته باشد price_str = re.sub(r'[^\d]', '', str(price)) if price_str: # اطمینان از اینکه قیمت به فرمت قابل قبول ترب است # مثال: اگر ترب نیاز به قیمت بدون جداکننده هزارگان دارد، این فرمت مناسب است ET.SubElement(product_element, "price").text = price_str except Exception as e: print(f"خطا در پردازش قیمت محصول {product_id if product_id else 'N/A'}: {e}") # می‌توانید قیمت را خالی بگذارید یا یک مقدار پیش‌فرض مناسب قرار دهید pass # در صورت خطا، این فیلد برای محصول ایجاد نمی‌شود # لینک محصول (URL) product_url = product.get('url') if product_url: ET.SubElement(product_element, "url").text = product_url # لینک تصویر محصول (Image URL) image_url = product.get('image_url') if image_url: ET.SubElement(product_element, "image_url").text = image_url # توضیحات محصول (Description) - اختیاری description = product.get('description') if description: ET.SubElement(product_element, "description").text = description # افزودن فیلدهای دیگر در صورت نیاز (مانند برند، دسته‌بندی و...) # brand = product.get('brand') # if brand: # ET.SubElement(product_element, "brand").text = brand # 4. تولید فایل XML با فرمت خوانا # استفاده از lxml.etree.tostring و سپس minidom برای pretty print xml_bytes = ET.tostring(root, encoding='utf-8', xml_declaration=True) # pretty print با minidom dom = minidom.parseString(xml_bytes) pretty_xml_string = dom.toprettyxml(indent=" ", encoding='utf-8') with open(output_filename, "wb") as f: f.write(pretty_xml_string) print(f"فایل فید ترب بهینه‌سازی شده با موفقیت در مسیر زیر ایجاد شد: {output_filename}") return output_filename except requests.exceptions.Timeout: print(f"خطا: درخواست به API با timeout مواجه شد ({api_url})") return None except requests.exceptions.RequestException as e: print(f"خطا در دریافت اطلاعات از API: {e}") return None except ET.XMLSyntaxError as e: print(f"خطا در پردازش XML: {e}") return None except Exception as e: # خطای کلی برای موارد پیش‌بینی نشده print(f"خطای غیرمنتظره در پردازش و تولید فایل XML: {e}") return None # برای اجرای کد بهینه‌سازی شده: # create_torob_feed_optimized() import requests api_url = "https://lavasemkhangi.ir/api/torob/v3/products/" try: response = requests.get(api_url) response.raise_for_status() # Raise an exception for bad status codes (4xx or 5xx) products_data = response.json() print(products_data) # در اینجا می‌توانید با داده‌های دریافتی محصولات کار کنید # مثلاً آن‌ها را در پایگاه داده خود ذخیره کنید یا به فرمت دیگری تبدیل کنید except requests.exceptions.RequestException as e: print(f"An error occurred: {e}") import requests import xml.etree.ElementTree as ET from xml.dom import minidom import datetime def create_torob_feed(): api_url = "https://lavasemkhangi.ir/api/torob/v3/products/" output_filename = f"torob_feed_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.xml" try: # 1. فراخوانی API print(f"در حال دریافت اطلاعات از API: {api_url}") response = requests.get(api_url) response.raise_for_status() # بررسی خطا در پاسخ API products_data = response.json() print(f"تعداد {len(products_data)} محصول دریافت شد.") # 2. ایجاد ساختار XML پایه برای ترب # این ساختار باید بر اساس مستندات ترب تنظیم شود # مثال زیر یک ساختار فرضی است root = ET.Element("products") # 3. پردازش و تبدیل داده‌ها for product in products_data: product_element = ET.SubElement(root, "product") # استخراج و تبدیل فیلدهای مورد نیاز - این بخش باید بر اساس ساختار API شما و نیاز ترب تنظیم شود # مثال: فرض کنید API شما 'id', 'title', 'price', 'url', 'image_url', 'description' دارد # شناسه محصول (اگر API شما شناسه منحصر به فردی دارد) if 'id' in product: ET.SubElement(product_element, "id").text = str(product['id']) # نام محصول if 'title' in product: ET.SubElement(product_element, "name").text = product['title'] # قیمت محصول (فرض می‌کنیم قیمت به ریال است و باید به فرمت عددی باشد) if 'price' in product: try: # حذف هرگونه کاراکتر غیر عددی و تبدیل به عدد صحیح price_str = ''.join(filter(str.isdigit, str(product['price']))) if price_str: ET.SubElement(product_element, "price").text = price_str except Exception as e: print(f"خطا در پردازش قیمت محصول {product.get('id', 'N/A')}: {e}") # می‌توانید قیمت را خالی بگذارید یا یک مقدار پیش‌فرض قرار دهید pass # لینک محصول if 'url' in product: ET.SubElement(product_element, "url").text = product['url'] # لینک تصویر محصول if 'image_url' in product: ET.SubElement(product_element, "image_url").text = product['image_url'] # توضیحات محصول (اختیاری، اما برای سئو مفید است) if 'description' in product: ET.SubElement(product_element, "description").text = product['description'] # در صورت نیاز، فیلدهای دیگر مانند برند، دسته بندی و ... را اضافه کنید # if 'brand' in product: # ET.SubElement(product_element, "brand").text = product['brand'] # 4. تولید فایل XML با فرمت خوانا xml_string = ET.tostring(root, encoding='utf-8') # استفاده از minidom برای فرمت‌دهی زیباتر XML (indentation) dom = minidom.parseString(xml_string) pretty_xml_as_string = dom.toprettyxml(indent=" ", encoding='utf-8') with open(output_filename, "wb") as f: f.write(pretty_xml_as_string) print(f"فایل فید ترب با موفقیت در مسیر زیر ایجاد شد: {output_filename}") return output_filename except requests.exceptions.RequestException as e: print(f"خطا در دریافت اطلاعات از API: {e}") return None except Exception as e: print(f"خطا در پردازش و تولید فایل XML: {e}") return None # اجرای تابع برای ایجاد فید # create_torob_feed()

سرخ‌کن سیلور کرست مدل 3030 | هواپز 14 لیتری حرفه‌ای

سرخ‌کن سیلور کرست 3030 نمای کناری سرخ‌کن سیلور کرست داخل سرخ‌کن 3030

مشخصات و ویژگی‌ها

💰 قیمت: ۱۰,۵۰۰,۰۰۰ تومان
🛒 خرید فوری و ارسال سریع
اینماد پرداخت امن | ضمانت اصالت کالا 📞 پشتیبانی: ۰۹۱۲xxxxxxx
createElement($tag); $el->appendChild($dom->createTextNode($value)); $parent->appendChild($el); } // ===================================================== // ساخت فید مخصوص ترب // ===================================================== $dom_t = new DOMDocument("1.0", "UTF-8"); $dom_t->formatOutput = true; $root_t = $dom_t->createElement("products"); foreach ($products as $p) { if (($p['status'] ?? "") !== "active") continue; if (($p['stock'] ?? 0) <= 0) continue; $item = $dom_t->createElement("product"); xml_add($dom_t, $item, "id", $p['id']); xml_add($dom_t, $item, "name", $p['title']); xml_add($dom_t, $item, "price", $p['price']); xml_add($dom_t, $item, "brand", $p['brand']); xml_add($dom_t, $item, "category", $p['category']); xml_add($dom_t, $item, "url", $p['link']); xml_add($dom_t, $item, "image", $p['image']); xml_add($dom_t, $item, "availability", "instock"); $root_t->appendChild($item); } $dom_t->appendChild($root_t); $dom_t->save($torob_feed_file); log_msg("INFO", "Torob feed generated."); // ===================================================== // ساخت فید گوگل Merchant Center // ===================================================== $dom_g = new DOMDocument("1.0", "UTF-8"); $dom_g->formatOutput = true; $rss = $dom_g->createElement("rss"); $rss->setAttribute("version", "2.0"); $rss->setAttribute("xmlns:g", "http://base.google.com/ns/1.0"); $channel = $dom_g->createElement("channel"); xml_add($dom_g, $channel, "title", "LavasemKhangi Product Feed"); xml_add($dom_g, $channel, "link", "https://lavasemkhangi.ir"); xml_add($dom_g, $channel, "description", "Google Shopping Feed"); foreach ($products as $p) { if (($p['status'] ?? "") !== "active") continue; if (($p['stock'] ?? 0) <= 0) continue; $item = $dom_g->createElement("item"); xml_add($dom_g, $item, "g:id", $p['id']); xml_add($dom_g, $item, "g:title", $p['title']); xml_add($dom_g, $item, "g:description", $p['title']); xml_add($dom_g, $item, "g:link", $p['link']); xml_add($dom_g, $item, "g:image_link", $p['image']); xml_add($dom_g, $item, "g:brand", $p['brand']); xml_add($dom_g, $item, "g:price", $p['price'] . " IRR"); xml_add($dom_g, $item, "g:availability", "in stock"); $channel->appendChild($item); } $rss->appendChild($channel); $dom_g->appendChild($rss); $dom_g->save($google_feed_file); log_msg("INFO", "Google feed generated."); // ===================================================== // آپلود خودکار فید به ترب // ===================================================== $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $torob_api, CURLOPT_POST => true, CURLOPT_POSTFIELDS => [ 'feed_file' => new CURLFile($torob_feed_file) ], CURLOPT_RETURNTRANSFER => true ]); $response = curl_exec($ch); $error = curl_error($ch); curl_close($ch); if ($error) { log_msg("ERROR", "Torob upload failed: $error"); exit("Torob upload failed."); } log_msg("INFO", "Torob upload OK. Response: $response"); // ===================================================== // پینگ خودکار گوگل جهت بروزرسانی // ===================================================== $ping_url = "https://www.google.com/ping?sitemap=" . urlencode("https://lavasemkhangi.ir/google-feed.xml"); @file_get_contents($ping_url); log_msg("INFO", "Google ping sent."); echo "Feed built, uploaded to Torob, and Google notified."; ?> getMessage()); } // گرفتن محصولات فعال $stmt = $pdo->prepare("SELECT id, name, price, stock, description, image, category, brand FROM products WHERE status='active'"); $stmt->execute(); $products = $stmt->fetchAll(PDO::FETCH_ASSOC); // شروع XML echo ''; echo ""; foreach($products as $p) { echo ""; echo "{$p['id']}"; echo ""; echo "{$p['price']}"; echo "{$p['stock']}"; echo "https://lavasemkhangi.ir/product.php?id={$p['id']}"; echo "{$p['image']}"; echo ""; echo ""; echo ""; echo ""; } echo ""; ?> torob-feed.php $apiKey, "transid" => $transid ]; $ch = curl_init("https://panel.aqayepardakht.ir/api/v2/verify"); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 15); $result = json_decode(curl_exec($ch), true); curl_close($ch); if(isset($result['data']['status']) && $result['data']['status'] == "success"){ $amount = $result['data']['amount']; $order_id = $result['data']['order_id']; // ثبت سفارش ساده (می‌تونی اینجا دیتابیس بزنی) echo "

پرداخت با موفقیت انجام شد ✅

شماره سفارش: $order_id

مبلغ: $amount تومان

سفارش شما ثبت شد و در حال پردازش است.

"; } else { echo "

پرداخت ناموفق ❌

در صورت کسر وجه، مبلغ طی 72 ساعت برگشت می‌خورد.

"; } ?>
جستجو در محصولات
کالایی در این صفحه موجود نیست
    پروفایلسبد خریددسته‌بندیخانه