vodanh / app.py
thoptk's picture
Update app.py
0c80c6a verified
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)