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.";
}
?>
🎁 کد تخفیف ویژه اولین خرید: naniwa | ارسال سریع به سراسر کشور 🚀.