[V10.337] 兼容 PChome 商品 API list 回應
All checks were successful
CD Pipeline / deploy (push) Successful in 1m6s
All checks were successful
CD Pipeline / deploy (push) Successful in 1m6s
This commit is contained in:
@@ -238,8 +238,28 @@ class PChomeCrawler:
|
||||
data = response.json()
|
||||
crawled_at = datetime.now()
|
||||
|
||||
if isinstance(data, dict):
|
||||
product_entries = data.items()
|
||||
product_count = len(data)
|
||||
elif isinstance(data, list):
|
||||
product_entries = [
|
||||
((item or {}).get('Id') or f'index_{idx}', item)
|
||||
for idx, item in enumerate(data)
|
||||
if isinstance(item, dict)
|
||||
]
|
||||
product_count = len(product_entries)
|
||||
failed_count += max(0, len(data) - product_count)
|
||||
else:
|
||||
logger.warning(
|
||||
"PChome 商品 API 回傳格式異常 (批次 %s): %s",
|
||||
i // batch_size + 1,
|
||||
type(data).__name__,
|
||||
)
|
||||
failed_count += len(batch)
|
||||
continue
|
||||
|
||||
# 解析商品資料
|
||||
for prod_key, prod_data in data.items():
|
||||
for prod_key, prod_data in product_entries:
|
||||
try:
|
||||
product = self._parse_product_data(prod_data, crawled_at)
|
||||
if product:
|
||||
@@ -248,7 +268,7 @@ class PChomeCrawler:
|
||||
logger.warning(f"解析商品 {prod_key} 失敗: {e}")
|
||||
failed_count += 1
|
||||
|
||||
logger.info(f"批次 {i // batch_size + 1}: 取得 {len(data)} 個商品資料")
|
||||
logger.info(f"批次 {i // batch_size + 1}: 取得 {product_count} 個商品資料")
|
||||
|
||||
except requests.RequestException as e:
|
||||
logger.error(f"API 請求失敗 (批次 {i // batch_size + 1}): {e}")
|
||||
|
||||
Reference in New Issue
Block a user