formatOutput = true; // برای خوانایی بهتر XML $rss = $dom_g->createElement('rss'); $rss->setAttribute('version', '2.0'); $rss->setAttribute('xmlns:g', 'http://base.google.com/ns/1.0'); // Namespace گوگل $channel = $dom_g->createElement('channel'); // افزودن اطلاعات کانال (اختیاری اما توصیه می‌شود) $channel->appendChild($dom_g->createElement('title', 'لوازم خانگی')); // عنوان سایت شما $channel->appendChild($dom_g->createElement('link', 'https://lavasemkhangi.ir')); $channel->appendChild($dom_g->createElement('description', 'فروشگاه آنلاین لوازم خانگی')); foreach ($products as $p) { $item = $dom_g->createElement('item'); // افزودن تگ های g: (برای گوگل شاپینگ) $item->appendChild($dom_g->createElement('g:id', htmlspecialchars($p['id'] ?? ''))); // شناسه محصول الزامی است $item->appendChild($dom_g->createElement('g:title', htmlspecialchars($p['title']))); $item->appendChild($dom_g->createElement('g:description', htmlspecialchars($p['description']))); $item->appendChild($dom_g->createElement('g:link', htmlspecialchars($p['link']))); $item->appendChild($dom_g->createElement('g:image_link', htmlspecialchars($p['image']))); $item->appendChild($dom_g->createElement('g:brand', htmlspecialchars($p['brand'] ?? ''))); // اطمینان از فرمت صحیح قیمت و واحد پول $price = number_format((float)$p['price'], 2, '.', ''); // فرمت عددی بدون جداکننده هزارگان $item->appendChild($dom_g->createElement('g:price', $price . ' IRR')); $item->appendChild($dom_g->createElement('g:availability', 'in stock')); // افزودن تگ های مورد نیاز دیگر مانند g:condition, g:gtin, g:mpn, g:google_product_category و ... $channel->appendChild($item); } $rss->appendChild($channel); $dom_g->appendChild($rss); if ($dom_g->save($filename) === false) { log_msg("ERROR", "Failed to save Google feed to $filename."); return false; } log_msg("INFO", "Google feed generated successfully at $filename."); return true; } // تابع آپلود با تلاش مجدد function uploadWithRetries($url, $filePath, $maxRetries = MAX_RETRIES, $delay = RETRY_DELAY) { $ch = curl_init(); $fileData = new CURLFile($filePath); curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_POST => true, CURLOPT_POSTFIELDS => ['feed_file' => $fileData], CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 60, // افزایش تایم‌اوت کلی CURLOPT_CONNECTTIMEOUT => 15, // تایم‌اوت اتصال ]); $response = null; $error = null; for ($i = 0; $i <= $maxRetries; $i++) { $response = curl_exec($ch); $error = curl_error($ch); if (!$error) { // بررسی کدهای وضعیت HTTP (اختیاری اما مفید) $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($httpCode >= 200 && $httpCode < 300) { log_msg("INFO", "Upload to $url OK. Response: " . $response); curl_close($ch); return ['success' => true, 'response' => $response]; } else { $error = "HTTP Error: " . $httpCode; } } if ($i < $maxRetries) { log_msg("WARNING", "Upload attempt {$i} to $url failed: " . ($error ?: 'Unknown error') . ". Retrying in {$delay} seconds..."); sleep($delay); // ممکن است بخواهید delay را افزایش دهید (exponential backoff) // $delay *= 2; } } log_msg("ERROR", "Torob upload failed after {$maxRetries} retries. Last error: " . $error); curl_close($ch); return ['success' => false, 'error' => $error]; } // تابع پینگ گوگل با cURL function pingGoogle($sitemapUrl) { $pingUrl = "https://www.google.com/ping?sitemap=" . urlencode($sitemapUrl); $ch = curl_init(); curl_setopt_array($ch, [ CURLOPT_URL => $pingUrl, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 5, // تایم‌اوت کوتاه برای پینگ CURLOPT_CONNECTTIMEOUT => 3, CURLOPT_USERAGENT => 'GoogleFeedPingBot/1.0 (+http://yourdomain.com/botinfo)' // تنظیم User Agent (اختیاری) ]); $response = curl_exec($ch); $error = curl_error($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if (!$error && ($httpCode >= 200 && $httpCode < 300)) { log_msg("INFO", "Google ping sent successfully to $sitemapUrl."); return true; } else { log_msg("ERROR", "Google ping failed for $sitemapUrl. Error: " . ($error ?: "HTTP Error: {$httpCode}")); return false; } } // --- اجرای اصلی اسکریپت --- // 1. دریافت محصولات (از دیتابیس یا منبع دیگر) // فرض کنید $products آرایه‌ای از محصولات است // مثال: // $products = fetchProductsFromDB(); // یک تابع فرضی برای دریافت محصولات // 2. تولید فید گوگل if (generateGoogleFeed($products, GOOGLE_FEED_FILE)) { // 3. آپلود فید به ترب (با تلاش مجدد) // فرض می‌کنیم فایل فید ترب همان فایل گوگل است یا جداگانه تولید می‌شود // if (generateTorobFeed($products, TOROB_FEED_FILE)) { // اگر فایل ترب جداست $uploadResult = uploadWithRetries(TOROB_API_URL, GOOGLE_FEED_FILE); // یا TOROB_FEED_FILE if ($uploadResult['success']) { // 4. پینگ گوگل (فقط در صورت موفقیت آپلود یا همیشه؟ بستگی به استراتژی دارد) // اطمینان از اینکه URL فید گوگل صحیح است $googleFeedUrl = 'https://lavasemkhangi.ir/google-feed.xml'; // URL عمومی فید pingGoogle($googleFeedUrl); echo "Feed processed and actions completed successfully."; } else { echo "Feed generated, but upload to Torob failed. Please check logs."; // ممکن است بخواهید notification دیگری ارسال کنید } // } else { // echo "Failed to generate Torob feed. Please check logs."; // } } else { echo "Failed to generate Google feed. Please check logs."; } ?> '; $query = mysqli_query($conn,"SELECT p.*, c.name as category FROM products p LEFT JOIN categories c ON p.category_id=c.id WHERE p.status='1' AND p.stock > 0"); while($row = mysqli_fetch_assoc($query)){ $id = $row['id']; $name = htmlspecialchars($row['title']); $price = $row['price']; $brand = htmlspecialchars($row['brand']); $category = htmlspecialchars($row['category']); $image = "https://lavasemkhangi.ir/uploads/".$row['image']; $url = "https://lavasemkhangi.ir/product/".$row['slug']; $xml .= " $id $name $price $brand $category $url $image instock "; } $xml .= ""; // ذخیره فید روی سرور (کش محلی) $cache_file = __DIR__ . '/torob-feed-real.xml'; file_put_contents($cache_file, $xml); // ارسال فید به ترب خودکار $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $torob_api); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, ['feed_file' => new CURLFile($cache_file)]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); // گزارش آپدیت file_put_contents(__DIR__ . '/torob-log.txt', date('Y-m-d H:i:s')." - Feed sent. Response: ".$response."\n", FILE_APPEND); echo "Feed sent to Torob successfully!"; ?>
جستجو در محصولات
کالایی در این صفحه موجود نیست
    پروفایلسبد خریددسته‌بندیخانه