Tool theo dõi, thống kê và cập nhật liên tục số lượng bình chọn của các ứng viên trong cuộc thi SR Fashion Awards. Dữ liệu được lấy từ trang web chính thức (https://srfashionawards2026.1vote.vn/bang-xep-hang) và xuất ra Google Sheets với giao diện trực quan, giúp theo dõi sự tăng trưởng và khoảng cách giữa các ứng viên.
- Real-time Tracking: Cập nhật số liệu bình chọn liên tục theo interval tùy chỉnh.
- Advanced Metrics:
- Votes: Tổng số lượt bình chọn hiện tại.
- Growth: Số lượt bình chọn tăng thêm so với lần chạy trước.
- Gap: Khoảng cách so với người dẫn đầu (Top 1) trong cùng hạng mục.
- Google Sheets Export: Xuất dữ liệu ra Google Sheet với giao diện Matrix dễ nhìn, tự động format (Merge, Center, Number format).
- Auto-Configuration: Tự động phát hiện và thêm cột cho ứng viên mới.
Dự án sử dụng uv để quản lý package và môi trường.
Đảm bảo đã cài đặt uv. Nếu chưa:
curl -LsSf https://astral.sh/uv/install.sh | shuv syncTạo file config.json ở thư mục gốc (nếu chưa có):
{
"targets": ["Tên Ứng Viên A", "Tên Ứng Viên B"],
"categories": ["Tên Hạng Mục (Tùy chọn)"],
"interval": 60,
"google_sheet": {
"enabled": true,
"sheet_id": "YOUR_SHEET_ID",
"service_account_file": "service_account.json"
}
}Ví dụ:
{
"targets": ["TATICHU"],
"categories": ["THƯƠNG HIỆU THỜI TRANG NỮ CỦA NĂM"],
"interval": 60,
"google_sheet": {
"enabled": true,
"sheet_id": "YOUR_SHEET_ID",
"service_account_file": "service_account.json"
}
}targets: Danh sách tên hoặc ID thí sinh cụ thể muốn theo dõi.categories: Danh sách tên danh mục muốn theo dõi toàn bộ thí sinh trong đó.interval: Thời gian cập nhật (giây).google_sheet: Cấu hình Google Sheet.-
enabled: Bật/tắt tính năng ghi vào Sheet (truehoặcfalse). -
sheet_id: ID của Google Sheet. Ví dụ link google sheet https://docs.google.com/spreadsheets/d/2htfFetzFmDYBpKN5FihTY-SryjRfJn3b6p9fn123/edit?gid=0#gid=0 thìsheet_idlà2htfFetzFmDYBpKN5FihTY-SryjRfJn3b6p9fn123. -
service_account_file: Tên file key JSON của Google Service Account (Theo hướng dẫn phía dưới).
-
Chạy tool trực tiếp bằng uv:
# Chạy liên tục (cập nhật mỗi 60s hoặc theo config)
uv run main.py
# Chạy 1 lần rồi thoát (kiểm tra)
uv run main.py --once
# Reset sheet (Xóa dữ liệu cũ và tạo mới header)
uv run main.py --reset --forceĐể có được file này, cần thực hiện các bước sau trên Google Cloud Platform (GCP):
- Truy cập Google Cloud Console.
- Tạo một Project mới (ví dụ: "Tracking Vote").
- Trong Project vừa tạo, tìm kiếm "Google Sheets API" trên thanh tìm kiếm.
- Nhấn Enable (Bật).
- Vào menu IAM & Admin > Service Accounts.
- Nhấn Create Service Account.
- Đặt tên (ví dụ: "bot-crawler"). Nhấn Create and Continue.
- (Quan trọng) Ở phần Grant this service account access to project, chọn role Editor (hoặc Owner). Nhấn Continue > Done.
- Trong danh sách Service Accounts, nhấn vào email của account vừa tạo (ví dụ:
bot-crawler@tracking-vote.iam.gserviceaccount.com). - Chuyển sang tab Keys.
- Nhấn Add Key > Create new key.
- Chọn JSON và nhấn Create.
- Một file
.jsonsẽ được tải về máy tính.
- Đổi tên file vừa tải về thành
service_account.json. - Copy file này vào thư mục chứa code (
vote-tracking/). - Mở file JSON đó ra, tìm dòng
"client_email". Copy địa chỉ email đó. - Mở Google Sheet, nhấn nút Share (Chia sẻ) và dán email vừa copy vào, cấp quyền Editor (Chỉnh sửa).
Lệnh tải source html ban đầu (tham khảo):
curl -k -L -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" "https://srfashionawards2026.1vote.vn/bang-xep-hang" -o page_source.html