Some checks failed
CD Pipeline / deploy (push) Failing after 59s
- 建立 Gitea Actions CD pipeline (.gitea/workflows/cd.yaml) - 部署模式: rsync Python 檔案至 188 → docker restart (volume mount) - Dockerfile/requirements 變動時自動重建 Docker image - 部署通知: Telegram (開始/成功/失敗) - 健康檢查: https://mo.wooo.work/health (最多 5 次重試) - 同步最新 CLAUDE.md / ADR-008 / memory (2026-04-19) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
96 lines
2.7 KiB
Python
96 lines
2.7 KiB
Python
# cSpell:ignore momo bottomicon
|
||
"""
|
||
修正錯誤圖片腳本
|
||
清理資料庫中的錯誤圖片(bottomIcon 等),並標記為需要重新抓取
|
||
"""
|
||
import os
|
||
import sys
|
||
from sqlalchemy import create_engine
|
||
from sqlalchemy.orm import sessionmaker
|
||
|
||
# 設定路徑
|
||
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
|
||
sys.path.insert(0, BASE_DIR)
|
||
|
||
from database.models import Product
|
||
from database.edm_models import PromoProduct
|
||
|
||
# 資料庫路徑
|
||
DB_PATH = os.path.join(BASE_DIR, 'data', 'momo_database.db')
|
||
|
||
def fix_wrong_images():
|
||
"""清理錯誤的圖片 URL"""
|
||
print("🔧 開始修正錯誤圖片...\n")
|
||
|
||
if not os.path.exists(DB_PATH):
|
||
print(f"❌ 資料庫檔案不存在: {DB_PATH}")
|
||
return
|
||
|
||
try:
|
||
engine = create_engine(f"sqlite:///{DB_PATH}")
|
||
Session = sessionmaker(bind=engine)
|
||
session = Session()
|
||
|
||
# 定義錯誤圖片的關鍵字
|
||
wrong_patterns = [
|
||
'%bottomIcon%',
|
||
'%bottomicon%',
|
||
'%loader.gif%',
|
||
'%blank.png%'
|
||
]
|
||
|
||
print("=" * 60)
|
||
print("📦 修正一般商品 (Product)")
|
||
print("=" * 60)
|
||
|
||
fixed_count = 0
|
||
for pattern in wrong_patterns:
|
||
products = session.query(Product).filter(
|
||
Product.image_url.like(pattern)
|
||
).all()
|
||
|
||
for p in products:
|
||
print(f"修正: [{p.i_code}] {p.name[:50]}...")
|
||
print(f" 錯誤圖片: {p.image_url}")
|
||
p.image_url = None # 清空錯誤的圖片 URL
|
||
fixed_count += 1
|
||
|
||
session.commit()
|
||
print(f"\n✅ 已修正 {fixed_count} 個商品的錯誤圖片")
|
||
|
||
# 檢查促銷商品
|
||
print("\n" + "=" * 60)
|
||
print("🎁 檢查促銷商品 (PromoProduct)")
|
||
print("=" * 60)
|
||
|
||
promo_fixed = 0
|
||
for pattern in wrong_patterns:
|
||
promos = session.query(PromoProduct).filter(
|
||
PromoProduct.image_url.like(pattern)
|
||
).all()
|
||
|
||
for p in promos:
|
||
print(f"修正: [{p.i_code}] {p.name[:50]}...")
|
||
print(f" 錯誤圖片: {p.image_url}")
|
||
p.image_url = None
|
||
promo_fixed += 1
|
||
|
||
session.commit()
|
||
print(f"\n✅ 已修正 {promo_fixed} 個促銷商品的錯誤圖片")
|
||
|
||
print("\n" + "=" * 60)
|
||
print("🎉 修正完成!")
|
||
print("=" * 60)
|
||
print(f"總計修正: {fixed_count + promo_fixed} 個商品")
|
||
print("\n💡 提示: 下次執行爬蟲時,這些商品會重新抓取圖片。")
|
||
|
||
session.close()
|
||
|
||
except Exception as e:
|
||
print(f"❌ 修正失敗: {e}")
|
||
import traceback
|
||
traceback.print_exc()
|
||
|
||
if __name__ == "__main__":
|
||
fix_wrong_images()
|