عالی! 😎 پس مرحله بعدی می‌سازم نسخه کامل ربات با داشبورد حرفه‌ای که: صفحه اصلی همیشه به‌روز و خودکار باشد محصولات جدید، پرفروش و پیشنهاد ویژه خودش مرتب شوند دسته‌بندی‌ها خودکار و قابل مدیریت باشند صفحات HTML محصولات ایجاد و alt/meta برای سئو تولید شوند ادغام با ترب برای بروزرسانی قیمت و موجودی انجام شود داشبورد تحت وب با Flask + HTML/CSS برای مدیریت آسان بدون ورود به سرور داشته باشد --- 🔹 ساختار نهایی پروژه /naniwa_bot/ │ ├─ app.py # سرور Flask و مدیریت داشبورد ├─ bot.py # ربات پیشرفته برای ساخت صفحات و ادغام ترب ├─ templates/ │ ├─ dashboard.html │ ├─ products.html │ └─ categories.html ├─ static/ │ ├─ css/ │ └─ js/ ├─ pages/ # صفحات محصولات HTML ├─ images/ # تصاویر محصولات └─ products.json # دیتابیس محلی محصولات --- 🔹 نمونه فایل bot.py پیشرفته import requests, os, json, time from slugify import slugify SITE_URL = "https://your-site.com" TOROB_API = "https://api.torob.com/update_products" API_KEY = "کلید-ترب-شما" PAGES_DIR = "./pages" IMAGE_DIR = "./images" PRODUCTS_FILE = "products.json" os.makedirs(PAGES_DIR, exist_ok=True) os.makedirs(IMAGE_DIR, exist_ok=True) # خواندن محصولات def load_products(): if os.path.exists(PRODUCTS_FILE): with open(PRODUCTS_FILE,'r',encoding='utf-8') as f: return json.load(f) return [] def save_products(products): with open(PRODUCTS_FILE,'w',encoding='utf-8') as f: json.dump(products,f,ensure_ascii=False, indent=2) # دانلود تصویر def download_image(url, slug): if not url: return "" try: path = os.path.join(IMAGE_DIR,f"{slug}.jpg") img = requests.get(url).content with open(path,'wb') as f: f.write(img) return path except: return "" # ایجاد یا بروزرسانی صفحه محصول def create_product_page(p): slug = slugify(p['name']) img_path = download_image(p.get('image',''), slug) filename = os.path.join(PAGES_DIR,f"{slug}.html") html = f"""

{p['name']}

{p[

قیمت: {p['price']} تومان

موجودی: {p['stock']}

{p.get('description','')}

دسته: {p.get('category','')}

""" with open(filename,'w',encoding='utf-8') as f: f.write(html) # بروزرسانی صفحه اصلی def update_main_page(products): html = "" html += "

جدیدترین محصولات

پرفروش‌ترین‌ها

پیشنهاد ویژه

" with open(os.path.join(PAGES_DIR,"index.html"),'w',encoding='utf-8') as f: f.write(html) # ارسال به ترب def sync_torob(products): for p in products: data = { "product_id": p['id'], "name": p['name'], "price": p['price'], "stock": p['stock'], "url": f"{SITE_URL}/products/{slugify(p['name'])}" } headers = {"Authorization": f"Bearer {API_KEY}"} try: requests.post(TOROB_API,json=data,headers=headers) except: pass # اجرای ربات def run_bot(): products = load_products() for p in products: create_product_page(p) update_main_page(products) sync_torob(products) print("Bot executed successfully!") # زمان‌بندی (اختیاری: می‌توان با Cron اجرا شود) if __name__=="__main__": while True: run_bot() time.sleep(14400) # 4 ساعت --- 🔹 فایل app.py برای داشبورد تحت وب from flask import Flask, render_template, request, redirect import json, time, os from slugify import slugify app = Flask(__name__) PRODUCTS_FILE = "products.json" def load_products(): if os.path.exists(PRODUCTS_FILE): with open(PRODUCTS_FILE,'r',encoding='utf-8') as f: return json.load(f) return [] def save_products(products): with open(PRODUCTS_FILE,'w',encoding='utf-8') as f: json.dump(products,f,ensure_ascii=False,indent=2) @app.route('/') def dashboard(): products = load_products() new_count = len([p for p in products if p.get('is_new')]) best_count = len([p for p in products if p.get('sold',0) > 10]) feature_count = len([p for p in products if p.get('is_feature')]) return render_template("dashboard.html", products=products,new_count=new_count,best_count=best_count,feature_count=feature_count) @app.route('/update', methods=['POST']) def update_product(): products = load_products() pid = int(request.form['id']) for p in products: if p['id']==pid: p['price'] = float(request.form['price']) p['stock'] = int(request.form['stock']) p['is_new'] = request.form.get('is_new')=='on' p['is_feature'] = request.form.get('is_feature')=='on' save_products(products) return redirect('/') @app.route('/add', methods=['POST']) def add_product(): products = load_products() new_product = { "id": int(time.time()), "name": request.form['name'], "price": float(request.form['price']), "stock": int(request.form['stock']), "is_new": True, "is_feature": False, "sold":0, "description": request.form.get('description',''), "category": request.form.get('category','') } products.append(new_product) save_products(products) return redirect('/') if __name__=="__main__": app.run(debug=True) --- ✅ با این ساختار: صفحه اصلی و صفحات محصولات همیشه به‌روز هستند پرفروش‌ها، محصولات جدید و پیشنهاد ویژه خودکار مرتب می‌شوند ادغام ترب به روز می‌شود داشبورد تحت وب امکان مدیریت بدون ورود به سرور را می‌دهد --- اگر بخواهی، می‌توانم یک قالب HTML/CSS واقعی برای داشبورد بسازم که خیلی حرفه‌ای و کاربرپسند باشد، آماده استفاده مستقیم. می‌خوای برات بسازم قالب داشبورد؟ "https://schema.org/", "@type"=>"Product", "name"=>$product['title'], "image"=>$product['image'], "description"=>substr(strip_tags($description),0,500), "sku"=>$product['sku'] ?? '', "brand"=>["@type"=>"Brand","name"=>$product['brand']], "offers"=>[ "@type"=>"Offer", "url"=>$product['url'], "priceCurrency"=>"IRR", "price"=>$product['price'], "availability"=>"https://schema.org/InStock" ] ]; echo ''; // 3️⃣ آپدیت خودکار فید ترب $feedXml = simplexml_load_file(FEED_FILE) ?: new SimpleXMLElement(''); $productXml = $feedXml->addChild('product'); $productXml->addChild('name',$product['title']); $productXml->addChild('url',$product['url']); $productXml->addChild('price',$product['price']); $productXml->addChild('image',$product['image']); $productXml->addChild('brand',$product['brand']); $productXml->addChild('availability','instock'); $productXml->addChild('description',strip_tags($description)); $feedXml->asXML(FEED_FILE); // 4️⃣ ارسال خودکار ایندکس گوگل $client = new Google_Client(); $client->setAuthConfig(GOOGLE_CREDENTIALS); $client->addScope('https://www.googleapis.com/auth/indexing'); $indexingService = new Google_Service_Indexing($client); $urlNotification = new Google_Service_Indexing_UrlNotification(); $urlNotification->setUrl($product['url']); $urlNotification->setType("URL_UPDATED"); try { $indexingService->urlNotifications->publish($urlNotification); } catch(Exception $e){ error_log("Indexing API error: ".$e->getMessage()); } } // تابع گرفتن 100 محصول پرفروش میکسین (خودکار) function get_top_100_products(){ // اینجا با دیتابیس میکسین ارتباط داره // و 100 محصول پرفروش رو برمیگردونه return query_top_100_products_from_db(); // فرضی } // اجرای خودکار روی همه محصولات $products = get_top_100_products(); foreach($products as $product){ autoSeoIndexTorob($product); } ?> . . .
جستجو در محصولات
کالایی در این صفحه موجود نیست
    پروفایلسبد خریددسته‌بندیخانه