import os # Nhớ thêm dòng này ở đầu file import pandas as pd from flask import Flask, render_template # Khởi tạo ứng dụng Flask app = Flask(__name__) # --- LINK CSV CỦA BẠN --- PRODUCT_SHEET_URL = "https://docs.google.com/spreadsheets/d/e/2PACX-1vSHOvfG4hGVCBQYsjOpC0QhamhVKWwFojz4IRc32B6HOvRDaEqc9dNRy8E8pLyJDnDo2mGvJ4oJANtk/pub?gid=319581950&single=true&output=csv" VIDEO_SHEET_URL = "https://docs.google.com/spreadsheets/d/e/2PACX-1vSHOvfG4hGVCBQYsjOpC0QhamhVKWwFojz4IRc32B6HOvRDaEqc9dNRy8E8pLyJDnDo2mGvJ4oJANtk/pub?gid=1503614356&single=true&output=csv" # ------------------------------------- def load_data(url): """ Hàm tải dữ liệu từ Google Sheet CSV và trả về danh sách (list of dictionaries). """ try: df = pd.read_csv(url, dtype=str) df = df.fillna("") return df.to_dict('records') except Exception as e: print(f"[LỖI LOAD_DATA] Lỗi khi tải dữ liệu từ {url}: {e}") return [] @app.route('/') def home(): """Trang chủ của website""" products_raw = load_data(PRODUCT_SHEET_URL) videos = load_data(VIDEO_SHEET_URL) products_processed = [] for product in products_raw: try: # === SỬA LỖI 1: Đọc đúng tên cột Cột D === # Đọc từ cột 'image_id' (thay vì 'image_url' như code trước) file_id = product.get('image_id') if file_id: # Tạo biến mới 'image_url_processed' product['image_url_processed'] = f"https://drive.google.com/thumbnail?id={file_id}&sz=w500" else: # Nếu không có ID, dùng ảnh dự phòng product['image_url_processed'] = "https://placehold.co/300x300/eee/333?text=No+Image" # === SỬA LỖI 2: Đọc đúng tên cột Cột E === # Đọc từ cột 'link_shopee' (thay vì 'shopee_link' như code trước) shopee_link = product.get('link_shopee', '') if shopee_link and not shopee_link.startswith(('http://', 'https://')): # Tự động thêm https:// nếu thiếu product['shopee_link_processed'] = f"https://{shopee_link}" elif not shopee_link: # Nếu ô bị rỗng, đặt link là '#' để tránh lỗi product['shopee_link_processed'] = '#' else: # Nếu link đã đúng, giữ nguyên product['shopee_link_processed'] = shopee_link # Thêm sản phẩm đã xử lý vào danh sách products_processed.append(product) except Exception as e: print(f"Lỗi xử lý sản phẩm {product.get('name')}: {e}") continue # Render file 'index.html' và truyền 2 biến mới vào return render_template('index.html', products=products_processed, videos=videos) if __name__ == '__main__': # Tự động lấy cổng (PORT) mà Hugging Face cung cấp, # nếu không có thì mặc định là 7860 port = int(os.environ.get("PORT", 7860)) app.run(host='0.0.0.0', port=port)